- 题目要求:
思路:
- 把数组排序,遍历数组,遍历时用双指针寻找当前元素后面的所有元素中,与当前元素和最接近目标值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 -= 1return 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