class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
n = len(nums)
min_diff = inf #表示一个无穷大的常量
for i in range(n-2):
x = nums[i]
if i and x == nums[i-1]:
continue
s = x + nums[i+1] + nums[i+2]
if s > target:
#后面无论怎么选,选出的三个数的和不会比s还小
if s - target < min_diff:
ans = s #下一行直接跳出循环,得到答案
break
s = x + nums[-2] + nums[-1]
if s < target:
# x加上后面任意两个数都不会超过是,所以双指针就不需要跑了
if target - s < min_diff:
min_diff = target - s
ans = s
continue # 结束下面的代码,继续下一循环
#双指针
j,k = i+1,n-1
while j<k:
s = x + nums[j] + nums[k]
if s == target:
return s
if s > target:
if s - target < min_diff:
min_diff = s - target
ans = s
k -= 1
else:
if target - s < min_diff:
min_diff = target - s
ans = s
j += 1
return ans
09-27
11-17
08-06
77
05-19