File tree Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * 시간복잡도: O(n²)
3
+ * 공간복잡도: O(1) (결과 배열 제외)
4
+ * 풀이 방법: 정렬 후 투 포인터 방식
5
+ * @param {number[] } nums
6
+ * @return {number[][] }
7
+ */
8
+ const threeSum = function ( nums ) {
9
+ const sortedNums = nums . sort ( ( a , b ) => a - b ) ;
10
+ const result = [ ] ;
11
+
12
+ for ( let i = 0 ; i < sortedNums . length ; i += 1 ) {
13
+ // 첫 번째 요소의 중복 제거
14
+ if ( i > 0 && sortedNums [ i ] === sortedNums [ i - 1 ] ) {
15
+ continue ;
16
+ }
17
+
18
+ let left = i + 1 ;
19
+ let right = sortedNums . length - 1 ;
20
+
21
+ while ( left < right ) {
22
+ const threeSum = sortedNums [ i ] + sortedNums [ left ] + sortedNums [ right ] ;
23
+
24
+ if ( threeSum > 0 ) {
25
+ right -= 1 ;
26
+ } else if ( threeSum < 0 ) {
27
+ left += 1 ;
28
+ } else {
29
+ result . push ( [ sortedNums [ i ] , sortedNums [ left ] , sortedNums [ right ] ] ) ;
30
+
31
+ // 중복 제거
32
+ while ( left < right && sortedNums [ left ] === sortedNums [ left + 1 ] ) {
33
+ left += 1 ;
34
+ }
35
+ while ( left < right && sortedNums [ right ] === sortedNums [ right - 1 ] ) {
36
+ right -= 1 ;
37
+ }
38
+
39
+ left += 1 ;
40
+ right -= 1 ;
41
+ }
42
+ }
43
+ }
44
+
45
+ return result ;
46
+ } ;
You can’t perform that action at this time.
0 commit comments