zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【Leetcode刷题Python】16. 最接近的三数之和

PythonLeetCode 16 刷题 接近 三数
2023-09-14 09:12:59 时间

1 题目

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

示例 1:

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

示例 2:

输入:nums = [0,0,0], target = 1
输出:0

2 解析

和15题三数之和,遍历思路几乎是一样的思想
参考【15.三数之和】的思路
用一个min_flag 和result记录最小差值和最小差值对应的和
如果当前的差值比min_flag小,就替换,并且保留当前三个数的和。

3 Python实现

class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        n =  len(nums)
        if n<3:
            return nums.sum()
        nums.sort()
        min_gap = 0
        result = nums[0]+nums[1]+nums[2]
        
        for i in range(n-1):
            l = i+1
            r =n-1
            while l<r:
                sum = nums[l] +nums[i]+nums[r]
                gap = sum -target
                min_gap = abs(target-result)
                # 判断新组合是否超过最小值
                if min_gap > abs(gap):
                    result = sum
                if gap >0:
                    r-=1
                elif gap<0:
                    l+=1
                else:
                    return result
        return result