python-leetcode-三数之和

15. 三数之和 - 力扣(LeetCode)

python 复制代码
class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()  # 排序
        n = len(nums)
        res = []

        for i in range(n):
            # 剪枝:如果当前数 > 0,三数之和不可能为 0
            if nums[i] > 0:
                break

            # 去重:跳过重复元素
            if i > 0 and nums[i] == nums[i - 1]:
                continue

            # 双指针
            left, right = i + 1, n - 1

            while left < right:
                total = nums[i] + nums[left] + nums[right]

                if total == 0:
                    res.append([nums[i], nums[left], nums[right]])

                    # 去重:跳过相同的 left 和 right
                    while left < right and nums[left] == nums[left + 1]:
                        left += 1
                    while left < right and nums[right] == nums[right - 1]:
                        right -= 1

                    left += 1
                    right -= 1

                elif total < 0:
                    left += 1  # 和偏小,左指针右移
                else:
                    right -= 1  # 和偏大,右指针左移

        return res   
相关推荐
什巳1 小时前
JAVA练习309- 二叉树的层序遍历
java·数据结构·算法·leetcode
什巳3 小时前
JAVA练习306- 翻转二叉树
java·数据结构·算法·leetcode
smj2302_796826523 小时前
解决leetcode第3989题网格中保持一致的最大列数
python·算法·leetcode
ychqsq4 小时前
88.归途
经验分享·职场和发展
巧克力男孩dd5 小时前
Python超典型练习题(第一次作业)
开发语言·python·算法
爱刷碗的苏泓舒5 小时前
平方根信息滤波:矩阵推导及 GNSS 参数估计应用
线性代数·算法·矩阵·gnss·参数估计·测量平差·平方根信息滤波
想做小南娘,发现自己是女生喵6 小时前
第 2 章 顺序表和 vector
java·数据结构·算法
艾醒6 小时前
2026年第29周(7.13-7.19)AI全复盘:技术突破、行业趣闻翻车、算力服务器商业动态
人工智能·算法
雪碧聊技术7 小时前
动态规划算法—01背包问题
算法·动态规划
bu_shuo7 小时前
c与cpp中的argc和argv
c语言·c++·算法