class Solution:
### 0208 排序 + 双指针(128 ms,14.7 MB)
def threeSumClosest(self, nums: List[int], target: int) -> int:
# 首先对数组排序
nums.sort()
# 初始化与target最接近的值res为正无穷
n, res = len(nums), float('+inf')
# 注意:由于题目规定答案唯一,因此不会存在重复值,无需跳过重复值!
for k in range(n-2):
# 初始化另外两个指针
i, j = k+1, n-1
while i < j:
# 计算当前的3数之和s,若与target相等,则直接返回s
s = nums[k] + nums[i] + nums[j]
if s == target: return s
# 判断是否需要更新与target最接近的值res
if abs(s - target) < abs(res - target):
res = s
# 移动双指针
if s < target: i += 1
elif s > target: j -= 1
return res
LeetCode 16. 最接近 target 的三数之和(Medium)
于 2021-02-08 22:49:03 首次发布