File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed
Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change 11package Algorithms .sequence ;
22
3+ import java .util .ArrayList ;
4+ import java .util .Arrays ;
35import java .util .List ;
46
57public 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}
You can’t perform that action at this time.
0 commit comments