leetcode 第16题(最接近的三数之和)

225 阅读1分钟

给定一组整数,并给定一个目标值,求出这组数中三数之和最接近目标值的和


输入:[-1, 2, 1, -4], 1

输出:2 (-2 + 1 + -1 = 2)


解法:(类似三数之和,条件稍微有变化)

class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        nums.sort()
        i = 0
        closet = nums[0] + nums[1] + nums[-1]
        minn = 99999999
        
        while i < len(nums) - 2:
            left = i + 1
            right = len(nums) - 1
            
            while left < right:
                cur = nums[i] + nums[left] + nums[right]
                
                if cur == target:
                    return target
                elif cur < target:
                    if target - cur < minn:
                        minn = target - cur
                        closet = cur
                    left += 1
                else:
                    if cur - target < minn:
                        minn = cur - target
                        closet = cur
                    right -= 1
            while i < len(nums) - 2 and nums[i] == nums[i + 1]:
                i += 1
            i += 1
        return closet