三数之和
# 题目
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请
你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
# 代码
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> results = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
int lp = i+1;
int rp = nums.length-1;
if (i>0 && nums[i] == nums[i-1]){
continue;
}
while (lp<rp){
int sum = nums[i]+nums[lp]+nums[rp];
if (sum == 0){
results.add(Arrays.asList(nums[i],nums[lp],nums[rp]));
lp++;
rp--;
while (lp<rp && nums[lp] == nums[lp-1]){
lp++;
}
while (lp<rp && nums[rp]==nums[rp+1]){
rp--;
}
}else if (sum>0){
rp--;
}else {
lp ++;
}
}
}
return results;
}
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
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
编辑 (opens new window)
上次更新: 2023/10/31, 13:49:43