File tree Expand file tree Collapse file tree 3 files changed +118
-0
lines changed
solution/0000-0099/0018.4Sum Expand file tree Collapse file tree 3 files changed +118
-0
lines changed Original file line number Diff line number Diff line change @@ -132,6 +132,47 @@ class Solution {
132132}
133133```
134134
135+ ### ** JavaScript**
136+ ``` js
137+ /**
138+ * @param {number[]} nums
139+ * @param {number} target
140+ * @return {number[][]}
141+ */
142+ var fourSum = function (nums , target ) {
143+ let len = nums .length ;
144+ let res = [];
145+ if (len < 4 ) return [];
146+ nums .sort ((a , b ) => a - b);
147+ for (i = 0 ; i < len - 3 ; i++ ) {
148+ if (i > 0 && nums[i] === nums[i - 1 ]) continue ;
149+ if (nums[i] + nums[len - 1 ] + nums[len - 2 ] + nums[len - 3 ] < target) continue ;
150+ if (nums[i] + nums[i + 1 ] + nums[i + 2 ] + nums[i + 3 ] > target) break ;
151+ for (j = i + 1 ; j < len - 2 ; j++ ) {
152+ if (j > i + 1 && nums[j] === nums[j - 1 ]) continue ;
153+ let left = j + 1 , right = len - 1 ;
154+ while (left < right) {
155+ if (nums[i] + nums[j] + nums[left] + nums[right] === target) {
156+ res .push ([nums[i], nums[j], nums[left], nums[right]]);
157+ while (nums[left] === nums[left + 1 ]) left++ ;
158+ left++ ;
159+ while (nums[right] === nums[right - 1 ]) right-- ;
160+ right-- ;
161+ continue ;
162+ } else if (nums[i] + nums[j] + nums[left] + nums[right] > target) {
163+ right-- ;
164+ continue ;
165+ } else {
166+ left++ ;
167+ continue ;
168+ }
169+ }
170+ }
171+ }
172+ return res;
173+ };
174+ ```
175+
135176### ** ...**
136177
137178```
Original file line number Diff line number Diff line change @@ -125,6 +125,46 @@ class Solution {
125125 }
126126}
127127```
128+ ### ** JavaScript**
129+ ``` js
130+ /**
131+ * @param {number[]} nums
132+ * @param {number} target
133+ * @return {number[][]}
134+ */
135+ var fourSum = function (nums , target ) {
136+ let len = nums .length ;
137+ let res = [];
138+ if (len < 4 ) return [];
139+ nums .sort ((a , b ) => a - b);
140+ for (i = 0 ; i < len - 3 ; i++ ) {
141+ if (i > 0 && nums[i] === nums[i - 1 ]) continue ;
142+ if (nums[i] + nums[len - 1 ] + nums[len - 2 ] + nums[len - 3 ] < target) continue ;
143+ if (nums[i] + nums[i + 1 ] + nums[i + 2 ] + nums[i + 3 ] > target) break ;
144+ for (j = i + 1 ; j < len - 2 ; j++ ) {
145+ if (j > i + 1 && nums[j] === nums[j - 1 ]) continue ;
146+ let left = j + 1 , right = len - 1 ;
147+ while (left < right) {
148+ if (nums[i] + nums[j] + nums[left] + nums[right] === target) {
149+ res .push ([nums[i], nums[j], nums[left], nums[right]]);
150+ while (nums[left] === nums[left + 1 ]) left++ ;
151+ left++ ;
152+ while (nums[right] === nums[right - 1 ]) right-- ;
153+ right-- ;
154+ continue ;
155+ } else if (nums[i] + nums[j] + nums[left] + nums[right] > target) {
156+ right-- ;
157+ continue ;
158+ } else {
159+ left++ ;
160+ continue ;
161+ }
162+ }
163+ }
164+ }
165+ return res;
166+ };
167+ ```
128168
129169### ** ...**
130170
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+ let len = nums . length ;
8+ let res = [ ] ;
9+ if ( len < 4 ) return [ ] ;
10+ nums . sort ( ( a , b ) => a - b ) ;
11+ for ( i = 0 ; i < len - 3 ; i ++ ) {
12+ if ( i > 0 && nums [ i ] === nums [ i - 1 ] ) continue ;
13+ if ( nums [ i ] + nums [ len - 1 ] + nums [ len - 2 ] + nums [ len - 3 ] < target ) continue ;
14+ if ( nums [ i ] + nums [ i + 1 ] + nums [ i + 2 ] + nums [ i + 3 ] > target ) break ;
15+ for ( j = i + 1 ; j < len - 2 ; j ++ ) {
16+ if ( j > i + 1 && nums [ j ] === nums [ j - 1 ] ) continue ;
17+ let left = j + 1 , right = len - 1 ;
18+ while ( left < right ) {
19+ if ( nums [ i ] + nums [ j ] + nums [ left ] + nums [ right ] === target ) {
20+ res . push ( [ nums [ i ] , nums [ j ] , nums [ left ] , nums [ right ] ] ) ;
21+ while ( nums [ left ] === nums [ left + 1 ] ) left ++ ;
22+ left ++ ;
23+ while ( nums [ right ] === nums [ right - 1 ] ) right -- ;
24+ right -- ;
25+ continue ;
26+ } else if ( nums [ i ] + nums [ j ] + nums [ left ] + nums [ right ] > target ) {
27+ right -- ;
28+ continue ;
29+ } else {
30+ left ++ ;
31+ continue ;
32+ }
33+ }
34+ }
35+ }
36+ return res ;
37+ } ;
You can’t perform that action at this time.
0 commit comments