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
+ /**
2
+ * 세 숫자의 합이 0이 되는 조합 찾기
3
+ * 알고리즘 복잡도:
4
+ * - 시간복잡도: O(n^2)
5
+ * - 공간복잡도: O(1)
6
+ * @param nums
7
+ */
8
+ function threeSum ( nums : number [ ] ) : number [ ] [ ] {
9
+ // 정렬
10
+ nums . sort ( ( a , b ) => a - b )
11
+ let result : number [ ] [ ] = [ ]
12
+
13
+ // 투포인터
14
+ for ( let i = 0 ; i < nums . length - 2 ; i ++ ) {
15
+ if ( i > 0 && nums [ i ] === nums [ i - 1 ] ) continue ;
16
+
17
+ let start = i + 1
18
+ let end = nums . length - 1
19
+ const target = - nums [ i ] // 고정 숫자를 이용
20
+ // start + end + target === 0 이므로, start + end === -target
21
+
22
+ while ( start < end ) {
23
+ const sum = nums [ start ] + nums [ end ]
24
+ if ( sum === target ) {
25
+ result . push ( [ nums [ i ] , nums [ start ] , nums [ end ] ] )
26
+
27
+ // 배열 중복 값 건너뛰기
28
+ while ( start < end && nums [ start ] === nums [ start + 1 ] ) start ++
29
+ while ( start < end && nums [ start ] === nums [ end - 1 ] ) end --
30
+
31
+ // 포인터 이동
32
+ start ++
33
+ end --
34
+ } else if ( sum < target ) {
35
+ start ++
36
+ } else {
37
+ end --
38
+ }
39
+ }
40
+ }
41
+ return result
42
+ }
You can’t perform that action at this time.
0 commit comments