15. 三数之和

难度中等2455

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例:

1
2
3
4
5
6
7
给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]

通过次数293,697

提交次数1,016,765

还是看了题解,排序太香了!

主要操作是排序使用双指针进行检查;同时记得去重;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
n=len(nums)
res=[]
if n<3 or not nums:
return res
nums.sort()

#从i遍历到n-2,使用双指针维护和探查;
#记得去重,也就是对于相同的找最后的;

for i in range(0,n):
if nums[i]>0:
return res
if i>0 and nums[i]==nums[i-1]:
continue #去重

L=i+1
R=n-1
while(L<R):
if(nums[i]+nums[L]+nums[R]==0):
res.append([nums[i],nums[L],nums[R]])
while(L<R and nums[L]==nums[L+1]):
L=L+1
while L< R and nums[R]==nums[R-1]:
R=R-1
L=L+1
R=R-1
elif nums[i]+nums[L]+nums[R]<0:
L=L+1
else:
R=R-1

return res