leetcode 16 3Sum Closest

来源:互联网 发布:iphone x 知乎 编辑:程序博客网 时间:2024/05/22 09:25

3Sum Closest

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).
类似15题,二分查找的时候返回一个最接近的数即可。


class Solution:    def find(self,s,start,end,num):        while start<=end:            if end-start<=1:                if abs(s[start]-num)<abs(s[end]-num):                    return s[start]                else:                    return s[end]            mid=(start+end)/2            if s[mid]==num:                return s[mid]            elif s[mid]>num:                end=mid-1            else:                start=mid+1        return mid    # @return an integer    def threeSumClosest(self, num, target):        a=sorted(num)        l=len(a)        ans=a[0]+a[1]+a[2]        for i in range(l-2):            for j in range(i+1,l-1):                ret=self.find(a,j+1,l-1,target-a[i]-a[j])                tmp=a[i]+a[j]+ret                if tmp==target:                    return tmp                if abs(ans-target)>abs(tmp-target):                    ans=tmp        return ans


0 0
原创粉丝点击