题意:给定一个含有n个数的数组S,找出其中的三个数即它们的和与给定的目标数最接近,并返回这三个数的和,假定每个输入只有一个解。
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.3Sum 类似,只是要求的是使三个数的和与目标数的差尽量接近0,用一个mint来存储暂时的差的绝对值最小值即可。
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums = sorted(nums)
mint = float('inf')
for i in xrange(len(nums)-2):
if i > 0 and nums[i] == nums[i-1]:
continue
j, k = i+1, len(nums)-1
while j < k:
sumt = nums[i]+nums[j]+nums[k]-target
if abs(sumt) == 0:
return nums[i]+nums[j]+nums[k]
if abs(sumt) < mint:
answer = nums[i]+nums[j]+nums[k]
mint = abs(sumt)
if sumt < 0:
j += 1
else:
k -= 1
return answer