美文网首页
每日一题_最接近的三数之和

每日一题_最接近的三数之和

作者: Jonah_Peng | 来源:发表于2021-04-21 15:34 被阅读0次

    题目

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

    示例:

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

    思路

    1. 可以先固定一个数字,然后一定程度的遍历得到结果
    2. 暴力遍历肯定能解决,也肯定会超时
    3. 不暴力的话,排序是个不错的想法,把数据排序好了之后,先确定一个数字人,然后两个指针,分别从最大最小的开始向中间收敛。
      收敛的规则是:
      如果得到的三数之和sum > target,表示这个数据偏大,适当的缩小可能会更接近结果,所以需要将右边的指针向中间移动,减小sum
      如果得到的三数之和sum < target,表示这个数据偏小,适当的增加会更接近结果,所以需要将左边的指针向中间移动,增大sum。
      如果两个指针重叠,遍历结束。

    代码

    class Solution:
        def threeSumClosest(self, nums: List[int], target: int) -> int:
            nums = sorted(nums)
            cloest = nums[0] + nums[1] + nums[2]
            for i in range(len(nums) - 2):
                l = i + 1
                r = len(nums) - 1
                while l < r:
                    threeSum = nums[i] + nums[l] + nums[r]
                    if abs(threeSum - target) < abs(cloest - target):
                        cloest = threeSum
    
                    if threeSum - target > 0:
                        r -= 1
                    elif threeSum - target == 0:
                        return threeSum
                    else:
                        l += 1
            return cloest
    

    相关文章

      网友评论

          本文标题:每日一题_最接近的三数之和

          本文链接:https://www.haomeiwen.com/subject/xivolltx.html