day07 代码随想录算法训练营 15. 三数之和

题目:15. 三数之和

我的感悟:

  • 加油,我可以的。不能放弃。

理解难点:

  • 双指针 思路打开
  • 边界考虑

代码难点:

  • 缩进问题 
  • continue是跳出循环条件
  • 我以前分不清循环条件和判断条件。哈哈哈。一个是if 一个是while / for 

 

总结概括:

  • 只要不放弃就行!!!!!!!!

代码示例:

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        # 思路:先排序
        # 逐个位置去计算,握住i,用left和right去寻找符合要求的结果
        nums.sort() # 原地排序
        res = []
        for i in range(len(nums)):
            # 1.判断异常
            if nums[i] > 0: # 如果排序后,第1位就是大于0的,说明后面都是大于0的.
                return res  # 直接返回就可以了 
            # 2.去重i位置
            if i>0 and nums[i] == nums[i-1]:    # 从第2位开始去重
                continue    # 跳过本次循环
            # 3.左右指针寻找满足题意的
            left = i + 1
            right = len(nums) -1
            while left < right:
                sum_ = nums[i] + nums[left] + nums[right]
                if sum_ > 0:    # 大了,移动后面的right
                    right -= 1
                elif sum_ < 0:  # 小了,移动前面的left
                    left += 1
                else:   #等于0 ### 下面的代码注意缩进
                    res.append([nums[i],nums[left],nums[right]])    # 记录值
                    # 对left去重
                    while left < right and nums[left] == nums[left+1]:
                        left +=1
                    # 对right去重
                    while left < right and nums[right] == nums[right-1]:
                        right -=1 
                    # 找的值之后,左右也要移动,找i开头的下一组
                    left += 1
                    right -= 1
        return res

通过截图:

资料:

题目链接/文章讲解/视频讲解:https://programmercarl.com/0015.%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C.html

posted @ 2024-01-03 18:42  o蹲蹲o  阅读(5)  评论(0编辑  收藏  举报