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