和三数之和很接近 不过只用返回一个最接近的值 所以也是用双指针 找到最接近的一个值
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
diff=nums[0]+nums[1]+num[len(nums)]-target
for i in range(len(nums)-2):
# 如果i与前一个一样不用在找了
if i==0 or nums[i]>nums[i-1]:
l=i+1
r=len(nums)-1
# 默认最接近的
# 不等于target 就循环找一下有没有等于target的选项 并记录最接近的一个
while(l<r):
s=nums[i]+nums[l]+nums[r]-target
if abs(s)<abs(diff):
diff=s
# 等于target记录 可以直接返回
if nums[i]+nums[l]+nums[r]==target:
return target
elif s>0:
r-=1
elif s<0:
l+=1
return target+diff