题目
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
解法
吴彦祖的解法非常清晰明了
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
if len(nums) < 3:
return []
nums.sort() # 排序
ans = []
for i in range(len(nums) - 2):
low, high = i + 1, len(nums) - 1
if nums[i] > 0:
return ans
# 相同的元素
if i > 0 and nums[i] == nums[i - 1]:
continue
while low < high:
complement = nums[low] + nums[high]
if complement == -nums[i]:
ans.append([nums[i], nums[low], nums[high]])
# 跳过重复的元素
while low < high and nums[low] == nums[low + 1]:
low += 1
# 跳过重复的元素
while low < high and nums[high] == nums[high - 1]:
high -= 1
low += 1
high -= 1
elif complement > -nums[i]:
high -= 1
else:
low += 1
return ans