美文网首页
16.leetcode题目讲解(Python):最接近的三数之和

16.leetcode题目讲解(Python):最接近的三数之和

作者: 夏山闻汐 | 来源:发表于2018-09-06 15:44 被阅读178次

题目如下:

题目

这道题可以用排一些特殊情况,减少计算量, 参考代码如下:

class Solution:
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: 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

ps:如果您有好的建议,欢迎交流 :-D,也欢迎访问我的个人博客:tundrazone.com

相关文章

网友评论

      本文标题:16.leetcode题目讲解(Python):最接近的三数之和

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