Skip to content

Commit 61c8127

Browse files
committed
three sum
1 parent 47c8cef commit 61c8127

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

sequence/ThreeSum.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,53 @@
11
package Algorithms.sequence;
22

3+
import java.util.ArrayList;
4+
import java.util.Arrays;
35
import java.util.List;
46

57
public class ThreeSum {
68
public List<List<Integer>> threeSum(int[] num) {
9+
List<List<Integer>> ret = new ArrayList<List<Integer>>();
10+
if (num == null) {
11+
return ret;
12+
}
713

14+
Arrays.sort(num);
15+
16+
int len = num.length;
17+
for (int i = 0; i < len; i++) {
18+
// 跳过重复的元素,首个数字不需要选择重复的.
19+
if (i > 0 && num[i] == num[i - 1]) {
20+
continue;
21+
}
22+
23+
// 创建二个指针,分别从2头查找,查目标值,它们2个加起来要等于0-num1
24+
int l = i + 1;
25+
int r = len - 1;
26+
while (l < r) {
27+
int sum = num[i] + num[l] + num[r];
28+
if (sum == 0) {
29+
ArrayList<Integer> list = new ArrayList<Integer>();
30+
list.add(num[i]);
31+
list.add(num[l]);
32+
list.add(num[r]);
33+
ret.add(list);
34+
35+
// 跳过重复元素
36+
do {
37+
l++;
38+
} while (l < r && num[l] == num[l - 1]);
39+
40+
do {
41+
r--;
42+
} while (l < r && num[r] == num[r + 1]);
43+
} else if (sum < 0) {
44+
l++;
45+
} else {
46+
r--;
47+
}
48+
}
49+
}
50+
51+
return ret;
852
}
953
}

0 commit comments

Comments
 (0)