题目:
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
和15题一样,三指针,不同的是这题每组输入只存在唯一答案,不用去重,但是是接近target,所以需要更新结果:
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
res = float('inf')
for i in range(len(nums)):
l = i + 1
r = len(nums) - 1
while l < r:
three_sum = nums[i] + nums[l] + nums[r]
if three_sum == target:
return target
elif three_sum > target:
r -= 1
elif three_sum < target:
l += 1
if abs(three_sum - target) < abs(res - target):
res = three_sum
return res