File tree Expand file tree Collapse file tree 1 file changed +53
-36
lines changed Expand file tree Collapse file tree 1 file changed +53
-36
lines changed Original file line number Diff line number Diff line change
1
+ use std:: cmp:: Ordering :: { Equal , Greater , Less } ;
2
+
1
3
impl Solution {
2
- pub fn three_sum ( mut nums : Vec < i32 > ) -> Vec < Vec < i32 > > {
3
- nums. sort_unstable ( ) ;
4
-
5
- let mut res = vec ! [ ] ;
6
-
7
- for i in 0 ..nums. len ( ) - 1 {
8
- let n1 = nums[ i] ;
9
-
10
- if i > 0 && n1 == nums[ i - 1 ] {
4
+ pub fn three_sum ( mut numbers : Vec < i32 > ) -> Vec < Vec < i32 > > {
5
+ numbers. sort_unstable ( ) ;
6
+
7
+ let mut ans: Vec < Vec < i32 > > = Vec :: new ( ) ;
8
+
9
+ for i in 0 ..numbers. len ( ) {
10
+ if i > 0 && numbers[ i] == numbers[ i - 1 ] {
11
11
continue ;
12
12
}
13
-
14
- let ( mut l, mut r) = ( i + 1 , nums. len ( ) - 1 ) ;
15
-
16
- while l < r{
17
- let n2 = nums[ l] ;
18
- let n3 = nums[ r] ;
19
-
20
- let sum = n1 + n2 + n3;
21
-
22
- if sum > 0 {
23
- r-=1 ;
24
- } else if sum < 0 {
25
- l+=1 ;
26
- } else {
27
- res. push ( vec ! [ n1, n2, n3] ) ;
28
-
29
- while l < r && n2 == nums[ l + 1 ] {
30
- l+=1 ;
31
- }
32
- l+=1 ;
33
-
34
- while l < r && n3 == nums[ r - 1 ] {
35
- r-=1 ;
13
+
14
+ let ( mut l, mut r) = ( i + 1 , numbers. len ( ) - 1 ) ;
15
+
16
+ while l < r {
17
+ match ( numbers[ i] + numbers[ l] + numbers[ r] ) . cmp ( & 0 ) {
18
+ Less => l += 1 ,
19
+ Greater => r -= 1 ,
20
+ Equal => {
21
+ ans. push ( vec ! [ numbers[ i] , numbers[ l] , numbers[ r] ] ) ;
22
+ l += 1 ;
23
+ while numbers[ l] == numbers[ l - 1 ] && l < r {
24
+ l += 1 ;
25
+ }
26
+ r -= 1 ;
27
+ while numbers[ r] == numbers[ r + 1 ] && l < r {
28
+ r -= 1 ;
29
+ }
36
30
}
37
- r-=1 ;
38
31
}
39
32
}
40
33
}
41
-
42
- res
34
+
35
+ ans
43
36
}
44
- }
37
+ }
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
You can’t perform that action at this time.
0 commit comments