File tree Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * @param {number[] } nums
3+ * @return {number[][] }
4+ */
5+ var threeSum = function ( nums ) {
6+
7+ // 최악의 경우 3중 for문이므로 투포인터 기법을써서 최적화 해도 for문 하나는 필요함
8+
9+ // 결과 배열
10+ const result = [ ] ;
11+
12+ // 투포인터 기법 사용을 위한 정렬
13+ nums . sort ( ( a , b ) => a - b ) ;
14+
15+ for ( let i = 0 ; i < nums . length - 2 ; i ++ ) {
16+ // 첫 번째 요소의 중복 건너뛰기
17+ if ( i > 0 && nums [ i ] === nums [ i - 1 ] ) continue ;
18+
19+ let left = i + 1 ;
20+ let right = nums . length - 1 ;
21+
22+ while ( left < right ) {
23+ const sum = nums [ i ] + nums [ left ] + nums [ right ] ;
24+
25+ if ( sum < 0 ) {
26+ left ++ ;
27+ }
28+ else if ( sum > 0 ) {
29+ right -- ;
30+ }
31+ else {
32+ // 합이 0인 경우 결과에 추가
33+ result . push ( [ nums [ i ] , nums [ left ] , nums [ right ] ] ) ;
34+
35+ // 두 번째, 세 번째 요소의 중복 건너뛰기
36+ while ( left < right && nums [ left ] === nums [ left + 1 ] ) left ++ ;
37+ while ( left < right && nums [ right ] === nums [ right - 1 ] ) right -- ;
38+
39+ left ++ ;
40+ right -- ;
41+ }
42+ }
43+ }
44+
45+ return result ;
46+ } ;
47+ // 시간복잡도: O(n^2)
48+ // 공간복잡도: O(1)
49+
You can’t perform that action at this time.
0 commit comments