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