File tree Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Original file line number Diff line number Diff line change
1
+ package com .fghpdf .ThreeSum ;
2
+
3
+ import java .util .ArrayList ;
4
+ import java .util .Arrays ;
5
+ import java .util .List ;
6
+
7
+ /**
8
+ * @author fghpdf
9
+ * @date 2019/11/11
10
+ * https://leetcode.com/problems/3sum/
11
+ *
12
+ * can't to loop 3 times, it will overtime
13
+ * first sort
14
+ * then loop 1 time and to compute 3 numbers
15
+ * if sum == 0, should eliminate same numbers
16
+ * if sum < 0, lower number is too small
17
+ * if sum > 0, higher number is too big
18
+ **/
19
+ public class Solution {
20
+ public List <List <Integer >> threeSum (int [] nums ) {
21
+ Arrays .sort (nums );
22
+
23
+ List <List <Integer >> result = new ArrayList <>();
24
+ for (int i = 0 ; i < nums .length - 2 ; i ++) {
25
+ if (i == 0 || nums [i ] != nums [i - 1 ]) {
26
+ int lower = i + 1 ;
27
+ int higher = nums .length - 1 ;
28
+ while (lower < higher ) {
29
+ if (nums [i ] + nums [lower ] + nums [higher ] == 0 ) {
30
+ result .add (Arrays .asList (nums [i ], nums [lower ], nums [higher ]));
31
+ // to eliminate same number
32
+ while (lower < higher && nums [lower ] == nums [lower +1 ]) {
33
+ lower ++;
34
+ }
35
+ while (lower < higher && nums [higher ] == nums [higher -1 ]) {
36
+ higher --;
37
+ }
38
+ lower ++;
39
+ higher --;
40
+ } else if (nums [lower ] + nums [higher ] + nums [i ] < 0 ) {
41
+ lower ++;
42
+ } else {
43
+ higher --;
44
+ }
45
+ }
46
+ }
47
+ }
48
+ return result ;
49
+ }
50
+ }
You can’t perform that action at this time.
0 commit comments