Leetcode 16. 最接近的三数之和

题目描述:

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

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

题目分析:

首先说明,这个代码是别人的,我写的太low了,就不拿出来了。

数组题基本上都是套路了,看到数组没思路你就给它排个序,排完再想想就有点眉目了。如果你做过三数之和这道题,那你基本上做这道题也就差不多了。还是双指针➕排序的老套路,老老实实做就完事了。当然由于是最接近的三数之和,所以你需要维护一个变量去保存每次三个数的和。

code:

class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        # 数组题如果没思路记得排序一下就有思路了!!!
        # 排除一些特定问题减少计算
        # 如果只有3个数,那直接返回这三个数的和
        if len(nums) == 3:
            return sum(nums)
        nums = sorted(nums)
        # 如果最小的和大于目标,那返回最小的和
        if sum(nums[:3]) >= target:
            return sum(nums[:3])
        # 如果最大的和小于目标,那返回最大的和
        if sum(nums[-3:]) <= target:
            return sum(nums[-3:])

        cur = nums[0] + nums[1] + nums[-1]

        for i in range(0, len(nums) - 2):
            # 避免重复计算
            if i > 0 and nums[i] == nums[i - 1]:
                continue
            j = i + 1
            k = len(nums) - 1

            while j < k:
                res = nums[i] + nums[j] + nums[k]
                if abs(res - target) < abs(cur - target):
                    cur = res
                elif res == target:
                    return target
                elif res < target:
                    j = j + 1
                else:
                    k = k - 1
        return cur
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和...
    LeeYunFeng阅读 3,938评论 0 50
  • 题目:16. 最接近的三数之和 难度:中等 分类:数组 解决方案:双指针 今天我们学习第16题最接近的三数之和,这...
    编程半岛阅读 3,012评论 0 1
  • 题目描述 给定一个包括个整数的数组和 一个目标值。找出 中的三个整数,使得它们的和与最接近。返回这三个数的和。假定...
    topshi阅读 1,355评论 0 1
  • 教育也许是这个世间最困难的事情吧!昨天和一个大姐聊天(她女儿在山东省实验中学上过),她给我传授了好多让孩子提分的技...
    7f0405b4c186阅读 1,324评论 0 0
  • 《七绝·咏竹》 柳若水作 虚心向上自清高,具体有节贯末梢。 相伴松菊三径客,闲云野鹤乐荒郊。
    柳若水阅读 10,708评论 132 169

友情链接更多精彩内容