@@ -8,109 +8,41 @@ const threeSum = (nums) => {
8
8
console . log ( nums )
9
9
10
10
for ( let i = 0 ; i < nums . length ; i ++ ) {
11
- if ( undefined !== nums [ i - 1 ] && nums [ i - 1 ] === nums [ i ] ) {
11
+ if ( i > 0 && nums [ i ] === nums [ i - 1 ] ) {
12
12
console . log ( "-------------------> !!!! same as prev" )
13
13
console . log ( nums [ i - 1 ] )
14
14
console . log ( nums [ i ] )
15
15
continue ;
16
16
}
17
17
18
- let tmpList = [ ...nums ] ;
19
- tmpList . splice ( i , 1 ) ;
20
-
21
- let b = ( 0 === nums [ i ] ) ? 0 : - nums [ i ] ;
22
- let c = nums [ i ] + b ;
23
- console . log ( `i: ${ i } , nums[i]: ${ nums [ i ] } , b: ${ b } , c: ${ c } ` ) ;
24
- console . log ( "tmpList" )
25
- console . log ( tmpList )
26
-
27
- // // Build a hash map except the current item in order to find the other 2 group mates.
28
- // for (let j = 0; j < tmpList.length; j++) {
29
- // tmpMap[tmpList[j]] = tmpList[j]
30
- // }
31
- // console.log(tmpMap)
32
-
33
- result = findGroup ( Math . min ( ...nums ) , Math . max ( ...nums ) , nums [ i ] , b , c , tmpList , result ) ;
18
+ let l = i + 1 , r = nums . length - 1 ;
19
+ while ( r > l ) {
20
+ let n = ( nums [ i ] + nums [ l ] + nums [ r ] ) ;
21
+ console . log ( "n" )
22
+ console . log ( n )
23
+
24
+ if ( 0 === n ) {
25
+ console . log ( `Pushing ${ i } ` )
26
+ result . push ( [ nums [ i ] , nums [ l ] , nums [ r ] ] ) ;
27
+ // r--;
28
+ l ++ ;
29
+ while ( nums [ l ] == nums [ l - 1 ] && r > l ) {
30
+ l ++ ;
31
+ }
32
+ } else if ( n > 0 ) {
33
+ r -- ;
34
+ } else { // < 0
35
+ l ++ ;
36
+ }
37
+ }
34
38
}
35
39
36
40
console . log ( "result" )
37
41
console . log ( result )
38
- // console.log(removeDuplicates(result))
39
- // console.log([...new Set(result.map(JSON.stringify))].map(JSON.parse));
40
42
41
- return removeDuplicates ( result ) ;
43
+ return ( result ) ;
42
44
} ;
43
45
44
- function compareArrays ( arr1 , arr2 ) {
45
- if ( arr1 . length !== arr2 . length ) {
46
- return false ;
47
- }
48
-
49
- arr1 . sort ( ) ;
50
- arr2 . sort ( ) ;
51
-
52
- for ( let i = 0 ; i < arr1 . length ; i ++ ) {
53
- if ( arr1 [ i ] !== arr2 [ i ] ) {
54
- return false ;
55
- }
56
- }
57
-
58
- return true ;
59
- }
60
-
61
- function removeDuplicates ( list ) {
62
- let uniqueSet = new Set ( ) ;
63
- let uniqueList = [ ] ;
64
-
65
- for ( let i = 0 ; i < list . length ; i ++ ) {
66
- let isUnique = true ;
67
- let array = list [ i ] ;
68
-
69
- for ( let j = 0 ; j < uniqueList . length ; j ++ ) {
70
- if ( compareArrays ( array , uniqueList [ j ] ) ) {
71
- isUnique = false ;
72
- break ;
73
- }
74
- }
75
-
76
- if ( isUnique ) {
77
- uniqueSet . add ( JSON . stringify ( array ) ) ;
78
- uniqueList . push ( array ) ;
79
- }
80
- }
81
-
82
- return uniqueList ;
83
- }
84
-
85
- const findGroup = ( min , max , a , b , c , list , result ) => {
86
- if ( b > max || c < min ) return result ;
87
-
88
- console . log ( `-> min: ${ min } , max: ${ max } , a: ${ a } , b: ${ b } , c: ${ c } , result: ${ result } ` ) ;
89
- // let tmpMap = { ...map }, tmp = [a];
90
- let tmpList = [ ...list ] , tmp = [ a ] ;
91
-
92
- if ( tmpList . includes ( b ) ) {
93
- console . log ( "--> tmpList[b] Exist!" )
94
- console . log ( b )
95
- tmp = [ ...tmp , b ] ;
96
-
97
- tmpList . splice ( tmpList . indexOf ( b ) , 1 )
98
-
99
- if ( tmpList . includes ( c ) ) {
100
- console . log ( "---> tmpList[c] Exist!" )
101
- console . log ( c )
102
-
103
- result . push ( [ ...tmp , c ] )
104
- tmpList . splice ( tmpList . indexOf ( c ) , 1 )
105
-
106
- console . log ( "----> result" ) ;
107
- console . log ( result ) ;
108
- }
109
- }
110
-
111
- return findGroup ( min , max , a , b + 1 , c - 1 , list , result ) ;
112
-
113
- }
114
-
115
46
// threeSum([0, 0, 0])
116
- threeSum ( [ - 1 , 0 , 1 , 2 , - 1 , - 4 ] )
47
+ // threeSum([-1, 0, 1, 2, -1, -4])
48
+ threeSum ( [ - 2 , 0 , 0 , 2 , 2 ] )
0 commit comments