题目:
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).
链接:https://oj.leetcode.com/problems/3sum-closest/
解法:与3Sum一样的思路,O(n^2)的时间复杂度
solution by python:
class Solution:
# @return an integer
def threeSumClosest(self, num, target):
num.sort()
ans = None
for i in range(len(num)-2):
if i!=0 and num[i]==num[i-1]: continue
t = target-num[i]
low=i+1;high=len(num)-1
while low < high:
if num[low]+num[high] == t:
return target
if ans == None or abs(t-num[low]-num[high]) < abs(ans-target):
ans = num[i]+num[low]+num[high]
if num[low]+num[high] < t:
low+=1
else: high -= 1
return ans