题目
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.sort()
d = []
lens = len(nums)
for i in range(lens-2):
r = lens-1
l = i+1
if (nums[i]+nums[r]+nums[r-1])<target:
d.append(nums[i]+nums[r]+nums[r-1])
elif (nums[i]+nums[l]+nums[l+1])>target:
d.append(nums[i]+nums[l]+nums[l+1])
else :
temp = nums[i]+nums[r]+nums[l]
close = temp
while l<r-1:
if target < temp:
r = r-1
elif target > temp:
l = l+1
else :
return temp
temp = nums[i]+nums[r]+nums[l]
if abs(temp-target) < abs(close-target):
close = temp
d.append(close)
return min(d, key=lambda x: abs(x-target))