File tree 2 files changed +91
-0
lines changed
2 files changed +91
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @param {number } target
4
+ * @return {number[][] }
5
+ */
6
+ var fourSum = function ( nums , target ) {
7
+ const sortedNums = nums . sort ( ( a , b ) => a - b ) ;
8
+ const res = [ ] ;
9
+ const quad = [ ] ;
10
+
11
+ const kSum = ( k , start , target ) => {
12
+ if ( k > 2 ) {
13
+ for ( let i = start ; i < sortedNums . length ; i ++ ) {
14
+ if ( i !== start && sortedNums [ i ] === sortedNums [ i - 1 ] ) {
15
+ continue ;
16
+ }
17
+ quad . push ( sortedNums [ i ] ) ;
18
+ kSum ( k - 1 , i + 1 , target - sortedNums [ i ] ) ;
19
+ quad . pop ( ) ;
20
+ }
21
+ } else {
22
+ let left = start ;
23
+ let right = sortedNums . length - 1 ;
24
+
25
+ while ( left < right ) {
26
+ const sum = sortedNums [ left ] + sortedNums [ right ] ;
27
+ if ( sum < target ) {
28
+ left ++ ;
29
+ } else if ( sum > target ) {
30
+ right -- ;
31
+ } else {
32
+ res . push (
33
+ quad . concat ( [ sortedNums [ left ] , sortedNums [ right ] ] )
34
+ ) ;
35
+ left ++ ;
36
+ while (
37
+ left < right &&
38
+ sortedNums [ left ] === sortedNums [ left - 1 ]
39
+ ) {
40
+ left ++ ;
41
+ }
42
+ }
43
+ }
44
+ }
45
+ } ;
46
+ kSum ( 4 , 0 , target ) ;
47
+ return res ;
48
+ } ;
Original file line number Diff line number Diff line change
1
+ function fourSum ( nums : number [ ] , target : number ) : number [ ] [ ] {
2
+ const sortedNums : number [ ] = nums . sort ( ( a : number , b : number ) => a - b ) ;
3
+ const res : number [ ] [ ] = [ ] ;
4
+ const quad : number [ ] = [ ] ;
5
+
6
+ const kSum = ( k : number , start : number , target : number ) : void => {
7
+ if ( k > 2 ) {
8
+ for ( let i = start ; i < sortedNums . length ; i ++ ) {
9
+ if ( i !== start && sortedNums [ i ] === sortedNums [ i - 1 ] ) {
10
+ continue ;
11
+ }
12
+ quad . push ( sortedNums [ i ] ) ;
13
+ kSum ( k - 1 , i + 1 , target - sortedNums [ i ] ) ;
14
+ quad . pop ( ) ;
15
+ }
16
+ } else {
17
+ let left : number = start ;
18
+ let right : number = sortedNums . length - 1 ;
19
+
20
+ while ( left < right ) {
21
+ const sum = sortedNums [ left ] + sortedNums [ right ] ;
22
+ if ( sum < target ) {
23
+ left ++ ;
24
+ } else if ( sum > target ) {
25
+ right -- ;
26
+ } else {
27
+ res . push (
28
+ quad . concat ( [ sortedNums [ left ] , sortedNums [ right ] ] )
29
+ ) ;
30
+ left ++ ;
31
+ while (
32
+ left < right &&
33
+ sortedNums [ left ] === sortedNums [ left - 1 ]
34
+ ) {
35
+ left ++ ;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ } ;
41
+ kSum ( 4 , 0 , target ) ;
42
+ return res ;
43
+ }
You can’t perform that action at this time.
0 commit comments