classSolution:defthreeSumClosest(self, nums: List[int], target:int)->int:
lens =len(nums)
nums.sort()# 设最小差为无限大
mini =float('inf')
closesum =0if lens ==3:returnsum(nums)else:for i inrange(lens-2):if i >1and nums[i]== nums[i-1]:continue
L = i +1
R = lens -1while L < R:
Sum = nums[i]+ nums[L]+ nums[R]
diff = Sum - target
ifabs(diff)< mini:
mini =abs(diff)
closesum = Sum
if diff ==0:return Sum
elif diff >0:
R -=1while L<R and nums[R]== nums[R+1]:
R -=1else:
L +=1while L<R and nums[L]== nums[L-1]:
L +=1return closesum
classSolution:defthreeSumClosest(self, nums: List[int], target:int)->int:
nums.sort()
res =float('inf')
lens =len(nums)for i inrange(lens -2):
L =max(i +1,bisect.bisect_left(nums, target - nums[lens-1]- nums[i], i+1, lens-1)-1)
R = lens-1while L < R and res != target:
Sum = nums[i]+ nums[L]+ nums[R]
res =min(res, Sum, key=lambda x:abs(x - target))
L = L +(Sum < target)
R = R -(Sum > target)return res
classSolution:defthreeSumClosest(self, nums: List[int], target:int)->int:
nums.sort()
res =float('inf')
lens =len(nums)for i inrange(lens-2):if i >0and nums[i]== nums[i-1]:continue
L = i +1
R = lens -1
mini = nums[i]+ nums[L]+ nums[L+1]
maxi = nums[i]+ nums[R-1]+ nums[R]if mini > target:ifabs(mini - target)<abs(res - target):
res = mini
breakif maxi < target:ifabs(maxi - target)<abs(res - target):
res = maxi
continuewhile L < R:
Sum = nums[i]+ nums[L]+ nums[R]if Sum == target:return target
ifabs(Sum - target)<abs(res - target):
res = Sum
if Sum < target:
L +=1while L < R and nums[L]== nums[L-1]:
L +=1if Sum > target:
R -=1while L < R and nums[R]== nums[R+1]:
R -=1return res