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

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

作者: 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