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