美文网首页
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