吴师兄学算法day07 双指针 16. 最接近的三数之和

题目:16. 最接近的三数之和

易错点:

  • 比较的时候,要减去target 在算结果

我的代码:

class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        nums = sorted(nums)
        max_res = float('inf')
        min_res = float('-inf')
        for i in range(len(nums)):
            left = i + 1
            right = len(nums) - 1
            while left < right:
                cur_buy = nums[i] + nums[left] + nums[right] # 2 目标是 1
                if cur_buy - target  < 0 :  # 说明目前购买的不够4 10
                    min_res = max(min_res,cur_buy)
                    left += 1  # 多加一个
                if cur_buy- target  > 0:  # 说明买多了
                    max_res = min(max_res, cur_buy)   # 取小的
                    right -= 1  # 减去一个
                if cur_buy == target:  # 正好买到了
                    return target
        # 返回更接近的那个
        if abs(max_res - target) > abs(min_res-target):
            return min_res
        else:
            return max_res

大神的代码:

class Solution:
    def threeSumClosest(self, nums, target):
        ret = float('inf')
        nums.sort()
        length = len(nums)
        for i in range(length - 2):
            left = i + 1
            right = length - 1
            while left < right:
                tmp = nums[i] + nums[left] + nums[right]
                # 如果新计算的tmp更靠近target 就更新为tmp
                # 否则就继续用原来的ret
                ret = tmp if abs(tmp - target) < abs(ret - target) else ret
                
                if tmp == target:
                    return target
                if tmp > target:
                    right -= 1
                else:
                    left += 1
        return ret

作者:清风Python
链接:https://leetcode.cn/problems/3sum-closest/solutions/758394/16zui-jie-jin-de-san-shu-zhi-he-pythonsh-ujl9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

扩展写法:

总结:

  • 大神跟我写的差不多,重点是要理解这句话:ret = tmp if abs(tmp - target) < abs(ret - target) else ret
  • 我的思路还可以。
  • 继续加油!!!!
  • 我可以的!!

参考:

清风Python 题解

posted @ 2024-01-16 21:29  o蹲蹲o  阅读(2)  评论(0编辑  收藏  举报