File tree Expand file tree Collapse file tree 4 files changed +239
-0
lines changed
solution/0000-0099/0015.3Sum Expand file tree Collapse file tree 4 files changed +239
-0
lines changed Original file line number Diff line number Diff line change @@ -353,6 +353,89 @@ def three_sum(nums)
353
353
end
354
354
```
355
355
356
+ ### ** TypeScript**
357
+
358
+ ``` ts
359
+ function threeSum(nums : number []): number [][] {
360
+ nums .sort ((a , b ) => a - b );
361
+ const res = [];
362
+ const n = nums .length ;
363
+ for (let i = 0 ; i < n - 2 ; i ++ ) {
364
+ if (nums [i ] > 0 ) {
365
+ break ;
366
+ }
367
+ const target = 0 - nums [i ];
368
+ let l = i + 1 ;
369
+ let r = n - 1 ;
370
+ while (l < r ) {
371
+ if (nums [l ] + nums [r ] === target ) {
372
+ res .push ([nums [i ], nums [l ], nums [r ]]);
373
+ l ++ ;
374
+ r -- ;
375
+ while (nums [l ] === nums [l - 1 ]) {
376
+ l ++ ;
377
+ }
378
+ while (nums [r ] === nums [r + 1 ]) {
379
+ r -- ;
380
+ }
381
+ } else if (nums [l ] + nums [r ] < target ) {
382
+ l ++ ;
383
+ } else {
384
+ r -- ;
385
+ }
386
+ }
387
+ while (nums [i ] === nums [i + 1 ]) {
388
+ i ++ ;
389
+ }
390
+ }
391
+ return res ;
392
+ }
393
+ ```
394
+
395
+ ### ** Rust**
396
+
397
+ ``` rust
398
+ use std :: cmp :: Ordering ;
399
+
400
+ impl Solution {
401
+ pub fn three_sum (mut nums : Vec <i32 >) -> Vec <Vec <i32 >> {
402
+ nums . sort ();
403
+ let n = nums . len ();
404
+ let mut res = vec! [];
405
+ if n < 3 {
406
+ return res ;
407
+ }
408
+ let mut i = 0 ;
409
+ while i < n - 2 && nums [i ] <= 0 {
410
+ let mut l = i + 1 ;
411
+ let mut r = n - 1 ;
412
+ while l < r {
413
+ match (nums [i ] + nums [l ] + nums [r ]). cmp (& 0 ) {
414
+ Ordering :: Less => l += 1 ,
415
+ Ordering :: Greater => r -= 1 ,
416
+ Ordering :: Equal => {
417
+ res . push (vec! [nums [i ], nums [l ], nums [r ]]);
418
+ l += 1 ;
419
+ r -= 1 ;
420
+ while l < n && nums [l ] == nums [l - 1 ] {
421
+ l += 1 ;
422
+ }
423
+ while r > 0 && nums [r ] == nums [r + 1 ] {
424
+ r -= 1 ;
425
+ }
426
+ }
427
+ }
428
+ }
429
+ i += 1 ;
430
+ while i < n - 2 && nums [i ] == nums [i - 1 ] {
431
+ i += 1 ;
432
+ }
433
+ }
434
+ res
435
+ }
436
+ }
437
+ ```
438
+
356
439
### ** ...**
357
440
358
441
```
Original file line number Diff line number Diff line change @@ -330,6 +330,89 @@ def three_sum(nums)
330
330
end
331
331
```
332
332
333
+ ### ** TypeScript**
334
+
335
+ ``` ts
336
+ function threeSum(nums : number []): number [][] {
337
+ nums .sort ((a , b ) => a - b );
338
+ const res = [];
339
+ const n = nums .length ;
340
+ for (let i = 0 ; i < n - 2 ; i ++ ) {
341
+ if (nums [i ] > 0 ) {
342
+ break ;
343
+ }
344
+ const target = 0 - nums [i ];
345
+ let l = i + 1 ;
346
+ let r = n - 1 ;
347
+ while (l < r ) {
348
+ if (nums [l ] + nums [r ] === target ) {
349
+ res .push ([nums [i ], nums [l ], nums [r ]]);
350
+ l ++ ;
351
+ r -- ;
352
+ while (nums [l ] === nums [l - 1 ]) {
353
+ l ++ ;
354
+ }
355
+ while (nums [r ] === nums [r + 1 ]) {
356
+ r -- ;
357
+ }
358
+ } else if (nums [l ] + nums [r ] < target ) {
359
+ l ++ ;
360
+ } else {
361
+ r -- ;
362
+ }
363
+ }
364
+ while (nums [i ] === nums [i + 1 ]) {
365
+ i ++ ;
366
+ }
367
+ }
368
+ return res ;
369
+ }
370
+ ```
371
+
372
+ ### ** Rust**
373
+
374
+ ``` rust
375
+ use std :: cmp :: Ordering ;
376
+
377
+ impl Solution {
378
+ pub fn three_sum (mut nums : Vec <i32 >) -> Vec <Vec <i32 >> {
379
+ nums . sort ();
380
+ let n = nums . len ();
381
+ let mut res = vec! [];
382
+ if n < 3 {
383
+ return res ;
384
+ }
385
+ let mut i = 0 ;
386
+ while i < n - 2 && nums [i ] <= 0 {
387
+ let mut l = i + 1 ;
388
+ let mut r = n - 1 ;
389
+ while l < r {
390
+ match (nums [i ] + nums [l ] + nums [r ]). cmp (& 0 ) {
391
+ Ordering :: Less => l += 1 ,
392
+ Ordering :: Greater => r -= 1 ,
393
+ Ordering :: Equal => {
394
+ res . push (vec! [nums [i ], nums [l ], nums [r ]]);
395
+ l += 1 ;
396
+ r -= 1 ;
397
+ while l < n && nums [l ] == nums [l - 1 ] {
398
+ l += 1 ;
399
+ }
400
+ while r > 0 && nums [r ] == nums [r + 1 ] {
401
+ r -= 1 ;
402
+ }
403
+ }
404
+ }
405
+ }
406
+ i += 1 ;
407
+ while i < n - 2 && nums [i ] == nums [i - 1 ] {
408
+ i += 1 ;
409
+ }
410
+ }
411
+ res
412
+ }
413
+ }
414
+ ```
415
+
333
416
### ** ...**
334
417
335
418
```
Original file line number Diff line number Diff line change
1
+ use std:: cmp:: Ordering ;
2
+
3
+ impl Solution {
4
+ pub fn three_sum ( mut nums : Vec < i32 > ) -> Vec < Vec < i32 > > {
5
+ nums. sort ( ) ;
6
+ let n = nums. len ( ) ;
7
+ let mut res = vec ! [ ] ;
8
+ if n < 3 {
9
+ return res;
10
+ }
11
+ let mut i = 0 ;
12
+ while i < n - 2 && nums[ i] <= 0 {
13
+ let mut l = i + 1 ;
14
+ let mut r = n - 1 ;
15
+ while l < r {
16
+ match ( nums[ i] + nums[ l] + nums[ r] ) . cmp ( & 0 ) {
17
+ Ordering :: Less => l += 1 ,
18
+ Ordering :: Greater => r -= 1 ,
19
+ Ordering :: Equal => {
20
+ res. push ( vec ! [ nums[ i] , nums[ l] , nums[ r] ] ) ;
21
+ l += 1 ;
22
+ r -= 1 ;
23
+ while l < n && nums[ l] == nums[ l - 1 ] {
24
+ l += 1 ;
25
+ }
26
+ while r > 0 && nums[ r] == nums[ r + 1 ] {
27
+ r -= 1 ;
28
+ }
29
+ }
30
+ }
31
+ }
32
+ i += 1 ;
33
+ while i < n - 2 && nums[ i] == nums[ i - 1 ] {
34
+ i += 1 ;
35
+ }
36
+ }
37
+ res
38
+ }
39
+ }
Original file line number Diff line number Diff line change
1
+ function threeSum ( nums : number [ ] ) : number [ ] [ ] {
2
+ nums . sort ( ( a , b ) => a - b ) ;
3
+ const res = [ ] ;
4
+ const n = nums . length ;
5
+ for ( let i = 0 ; i < n - 2 ; i ++ ) {
6
+ if ( nums [ i ] > 0 ) {
7
+ break ;
8
+ }
9
+ const target = 0 - nums [ i ] ;
10
+ let l = i + 1 ;
11
+ let r = n - 1 ;
12
+ while ( l < r ) {
13
+ if ( nums [ l ] + nums [ r ] === target ) {
14
+ res . push ( [ nums [ i ] , nums [ l ] , nums [ r ] ] ) ;
15
+ l ++ ;
16
+ r -- ;
17
+ while ( nums [ l ] === nums [ l - 1 ] ) {
18
+ l ++ ;
19
+ }
20
+ while ( nums [ r ] === nums [ r + 1 ] ) {
21
+ r -- ;
22
+ }
23
+ } else if ( nums [ l ] + nums [ r ] < target ) {
24
+ l ++ ;
25
+ } else {
26
+ r -- ;
27
+ }
28
+ }
29
+ while ( nums [ i ] === nums [ i + 1 ] ) {
30
+ i ++ ;
31
+ }
32
+ }
33
+ return res ;
34
+ }
You can’t perform that action at this time.
0 commit comments