1. 程式人生 > >leetcode第16題,最接近的三數之和,python實現

leetcode第16題,最接近的三數之和,python實現

題目解析

該題目和三數之和類似,不同點是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