给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
示例 1:
输入:nums = [-1,2,1,-4], target = 1 输出:2 解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
示例2:
输入:nums = [0,0,0], target = 1 输出:0
class Solution:def threeSumClosest(self, nums: List[int], target: int) -> int:# 这种选若干个数组成和的问题,第一步是排序nums.sort()n=len(nums)ans=nums[0]+nums[1]+nums[2]# 固定第一个数for first in range(n):# 跳过重复值if first>0 and nums[first]==nums[first-1]:continuesecond=first+1third=n-1# 双指针从两边遍历while second<third:tol=nums[first]+nums[second]+nums[third]if tol==target:return tolelif tol<target:second+=1else:third-=1# 目标值与当前和之差较大的话就不更新ansans=ans if abs(target-tol)>abs(target-ans) else tolreturn ans
