Leetcode刷题Python16. 最接近的三数之和

Posted Better Bench

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题Python16. 最接近的三数之和相关的知识,希望对你有一定的参考价值。

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

以上是关于Leetcode刷题Python16. 最接近的三数之和的主要内容,如果未能解决你的问题,请参考以下文章

2018.9.30 LeetCode 刷题日记 第16题

LeetCode:最接近的三数之和16

leetcode 16:最接近的三数之和

LeetCode 16. 最接近的三数之和

[LeetCode] 16. 最接近的三数之和

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