乐趣区

Leetcode16-最接近的三数之和-Python实现

  • 题目要求:

  • 思路:

    • 把数组排序,遍历数组,遍历时用双指针寻找当前元素后面的所有元素中,与当前元素和最接近目标值 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
退出移动版