LC 速查

HOT 100索引 › B2 双指针 Two Pointers

LC 15三数之和3Sum 中等

找出数组中所有和为 0 且互不重复的三元组。

思路 排序后固定 i,双指针 l/r 寻找两数之和为 -nums[i],遍历中跳过重复元素。时间 O(n²)。

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        n = len(nums)
        ans = []
        for i in range(n - 2):
            if nums[i] > 0:
                break
            if i and nums[i] == nums[i - 1]:
                continue
            l, r = i + 1, n - 1
            while l < r:
                s = nums[i] + nums[l] + nums[r]
                if s < 0:
                    l += 1
                elif s > 0:
                    r -= 1
                else:
                    ans.append([nums[i], nums[l], nums[r]])
                    l += 1
                    r -= 1
                    while l < r and nums[l] == nums[l - 1]:
                        l += 1
                    while l < r and nums[r] == nums[r + 1]:
                        r -= 1
        return ans
← 上一题 盛最多水的容器接雨水 下一题 →