15-三数之和

15-三数之和

力扣15

https://leetcode-cn.com/problems/3sum/

思路:这题的关键在于排序+双指针,虽然有三个指针,但核心是j, k指针

因为排好序了,所以指针k从i+1开始向右走,k从末尾往前走

-3 | -2 -1 0 2 4 7 此时i指向-3,那么j指向下一个-2,k指向末尾7,然后用|两端表示j, k

-3 | -2 -1 0 2 4 7| 然后计算-3 + -2 + 7 > 0,k–

-3 | -2 -1 0 2 4 | 7 然后计算-3 + -2 + 4 < 0,j++

-3 -2 | -1 0 2 4 | 7 然后计算-3 + -1 + 4 = 0,说名-3, -1, 4是一组结果

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
public List<List<Integer>> threeSum(int[] nums) {
Set<List<Integer>> res = new HashSet<>();
int n = nums.length;

if(n < 3){
return new ArrayList<>(res);
}

Arrays.sort(nums);
for (int i = 0; i < n - 2; i++) {
int j = i + 1;
int k = n - 1;
while (j < k){
if (nums[i] + nums[j] + nums[k] > 0){
k--;
}else if (nums[i] + nums[j] + nums[k] < 0){
j++;
}else {
List<Integer> list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[j]);
list.add(nums[k]);
res.add(list);

j++;
k--;
}
}
}
return new ArrayList<>(res);
}

其他双指针类型的题目点击这里

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×