Skip to the content.

leetcode [16] 最接近的三数之和


Contact me:

Blog -> https://cugtyt.github.io/blog/index
Email -> cugtyt@qq.com
GitHub -> Cugtyt@GitHub


给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

来自题解:

先排序,遍历定位第一个元素,两个指针指向后面的首和尾,如果小于目标,增大左指针,如果大于目标,减少右指针,如果等于目标直接返回结果。

class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        if len(nums) < 3:
            return 0
        nums.sort()
        res = 999
        for i in range(len(nums)):
            left, right = i + 1, len(nums) - 1
            while left < right:
                newres = sum([nums[i], nums[left], nums[right]])
                if abs(newres - target) < abs(res - target):
                    res = newres
                if newres - target < 0:
                    left += 1
                elif newres - target > 0:
                    right -= 1
                else:
                    return target
                    
        return res