1. 程式人生 > >16. 3Sum Closest Leetcode Python

16. 3Sum Closest Leetcode Python

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.


    For example, given array S = {-1 2 1 -4}, and target = 1.


    The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

這題的做法和3sum一樣只不過把sum=0改成sum變成target,需要設定一個minval來記錄每次和target的最小,如果得到的差值小於記錄值那麼就將sum賦值給result 最後輸出。

時間複雜度依然為O(n^2)

This problem is similar to 3 sum, beside use three pointers to track the value of the 3sums we need to use an extra tracker minval to track the difference between the target and the sum. When the the abs(sum-target)<minval we pass abs(sum-target) to minval and pass sum to result. if any of the sum=target we return target, otherwise return result when all the iteration finished.

the time complexity is O(n^2) space O(1)

code as follow:

class Solution:
    # @return an integer
    def threeSumClosest(self, num, target):
        minval=100000
        num.sort()
        for i in range(len(num)):
            #if i>0 and num[i]==num[i-1]:
             #   continue
            left=i+1
            right=len(num)-1
            while left<right:
                val=num[i]+num[left]+num[right]
                
                if abs(val-target)<minval:
                    minval=abs(val-target)
                    result=val
                if val==target:
                    return target
                if val<=target:
                    left+=1
                else:
                    right-=1
        return result