给定一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
解题思路:
双指针
跟两数之和思路很像,先排序,再遍历小于0的数,再从该数左侧找到两个数之和为该数的相反数,再去重即可。
代码:
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
n = len(nums)
res = []
for i in range(n):
if i > 0 and nums[i] == nums[i-1]:
continue
else:
left, right = i+1, n-1
while left < right:
num_sum = nums[i] + nums[left] + nums[right]
if num_sum == 0:
s = [nums[i], nums[left], nums[right]]
res.append(s)
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 num_sum < 0:
left += 1
elif num_sum >0:
right -=1
return res