给定一组整数,并给定一个目标值,求出这组数中三数之和最接近目标值的和
输入:[-1, 2, 1, -4], 1
输出:2 (-2 + 1 + -1 = 2)
解法:(类似三数之和,条件稍微有变化)
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
i = 0
closet = nums[0] + nums[1] + nums[-1]
minn = 99999999
while i < len(nums) - 2:
left = i + 1
right = len(nums) - 1
while left < right:
cur = nums[i] + nums[left] + nums[right]
if cur == target:
return target
elif cur < target:
if target - cur < minn:
minn = target - cur
closet = cur
left += 1
else:
if cur - target < minn:
minn = cur - target
closet = cur
right -= 1
while i < len(nums) - 2 and nums[i] == nums[i + 1]:
i += 1
i += 1
return closet