leetcode第16題,最接近的三數之和,python實現
阿新 • • 發佈:2018-12-15
題目解析
該題目和三數之和類似,不同點是target也會發生變化,解答基本思路是根據要求不斷變化target值,使其偏離原始target的程度越來越大,在此過程中檢測當前的target值是否可以由陣列中三數之和進行表示。
三數之和求法回顧
檢查陣列中是否存在三個數相加之和等於target值,思路為先將陣列進行排序,然後進行遍歷,遍歷過程見程式碼。
class Solution(object): def threeSumClosest(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ nums = sorted(nums) result = 0 if len(nums) ==3: # 若只有三個數,則返回三數之和 return sum(nums) j=0 flag=1 test = [] newTarget = target while True: for i in range(len(nums)-2): if i!=0 and nums[i]==nums[i-1]: # 若該數和之前數值相同,則跳過 continue l,r = i+1,len(nums)-1 # 定義左邊和右邊的起始位置 while (l < r): if newTarget == nums[i] + nums[l] + nums[r]: # return newTarget,test,[nums[i],nums[l],nums[r]],nums return newTarget elif newTarget > nums[i] + nums[l] + nums[r]: l += 1 else: r -= 1 j = j+1 if flag == 1 else j # 確定target變更長度 flag = -flag # 反轉target變更方向 test.append(newTarget) newTarget = target +
flag * j