- 题目要求:
-
思路:
- 把数组排序,遍历数组,遍历时用双指针寻找当前元素后面的所有元素中,与当前元素和最接近目标值 target 的两个元素,把三数之和作为 res 返回
- 核心代码:
# 把数组排序
nums.sort()
# 结果初始化为数组的前三个元素之和
res = nums[0] + nums[1] + nums[2]
# 遍历数组
for i in range(len(nums)-2):
left = i + 1
right = len(nums) - 1
while left < right:
tmp = nums[i] + nums[left] + nums[right]
# 如果当前的三个元素之和更接近目标值,把当前的三个元素之和赋给结果 res
if abs(tmp - target) < abs(res - target):
res = tmp
if tmp < target:
left += 1
else:
right -= 1
return res
- 完整代码:
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
if len(nums) < 3:
return 0
nums.sort()
res = nums[0] + nums[1] + nums[2]
for i in range(len(nums)-2):
left = i + 1
right = len(nums) - 1
while left < right:
tmp = nums[i] + nums[left] + nums[right]
if abs(tmp - target) < abs(res - target):
res = tmp
if tmp < target:
left += 1
else:
right -= 1
return res