File tree Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Original file line number Diff line number Diff line change 1+ function threeSum ( nums : number [ ] ) : number [ ] [ ] {
2+ if ( nums . length < 3 ) return [ ] ;
3+ const result : number [ ] [ ] = [ ] ;
4+ const checked = new Set < string > ( ) ;
5+ const numMap = new Map < number , number > ( ) ;
6+
7+ // 중복 결과 방지
8+ nums . sort ( ( a , b ) => a - b ) ;
9+ // Map에 모든 값과 인덱스 저장
10+ nums . forEach ( ( num , index ) => numMap . set ( num , index ) ) ;
11+
12+ for ( let i = 0 ; i < nums . length - 2 ; i ++ ) {
13+ if ( nums [ i ] > 0 ) break ; // 양수면 존재 X
14+ // 중복된 첫 번째 수 건너뛰기
15+ if ( i > 0 && nums [ i ] === nums [ i - 1 ] ) continue ;
16+
17+ for ( let j = i + 1 ; j < nums . length - 1 ; j ++ ) {
18+ // 중복된 두 번째 수 건너뛰기
19+ if ( j > i + 1 && nums [ j ] === nums [ j - 1 ] ) continue ;
20+ // 세 번째 수 계산
21+ const target = - ( nums [ i ] + nums [ j ] ) ;
22+
23+ // Map을 사용하여 세 번째 수 검색
24+ if ( numMap . has ( target ) ) {
25+ const k = numMap . get ( target ) ! ;
26+ if ( k > j ) {
27+ // k가 j보다 커야 중복 방지
28+ const triplet = [ nums [ i ] , nums [ j ] , nums [ k ] ] ;
29+ const key = triplet . join ( "," ) ;
30+
31+ // Set을 사용하여 중복 결과 방지
32+ if ( ! checked . has ( key ) ) {
33+ checked . add ( key ) ;
34+ result . push ( triplet ) ;
35+ }
36+ }
37+ }
38+ }
39+ }
40+
41+ return result ;
42+ }
You can’t perform that action at this time.
0 commit comments