File tree Expand file tree Collapse file tree 4 files changed +134
-0
lines changed
construct-binary-tree-from-preorder-and-inorder-traversal Expand file tree Collapse file tree 4 files changed +134
-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+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * 계단 오르기
3+ * 알고리즘 복잡도:
4+ * - 시간복잡도: O(n) - 입력값 크기에 비례하는 단일 반복문
5+ * - 공간복잡도: O(1) - 상수 개의 변수만 사용
6+ * @param n
7+ */
8+ function climbStairs ( n : number ) : number {
9+ // 1 - 2 - 3 - 5 - 8 ... 규칙 발생
10+ if ( n <= 3 ) return n
11+
12+ // 접근 (1) - 시간복잡도가 너무 큼
13+ // return climbStairs(n - 1) + climbStairs(n - 2) // 시간
14+
15+ // 접근 (2)
16+ // 피보나치 수열과 비슷한 앞의 두 숫자를 더해서 배열 구조를 만듬
17+ let current = 1 ; // 현재 방법
18+ let prev = 1 ; // 이전 단계의 방법
19+
20+ // n-1번 반복하여 계산
21+ for ( let i = 1 ; i < n ; i ++ ) {
22+ [ current , prev ] = [ current + prev , current ] ;
23+ }
24+
25+ return current ;
26+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for a binary tree node.
3+ * class TreeNode {
4+ * val: number
5+ * left: TreeNode | null
6+ * right: TreeNode | null
7+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+ * this.val = (val===undefined ? 0 : val)
9+ * this.left = (left===undefined ? null : left)
10+ * this.right = (right===undefined ? null : right)
11+ * }
12+ * }
13+ */
14+ /**
15+ * 이진트리 만들기
16+ * 알고리즘 복잡도:
17+ * - 시간복잡도: O(n^2)
18+ * - 공간복잡도: O(n^2)
19+ */
20+ function buildTree ( preorder : number [ ] , inorder : number [ ] ) : TreeNode | null {
21+ // 전위 순회(preorder): 최상위 노드 -> 좌측 서브트리 -> 우측 서브트리
22+ // 중위 순회(inorder): 좌측 서브트리 -> 최상위 노드 -> 우측 서브트리
23+
24+ // 재귀적으로 호출하기 위해 배열이 비었을때 null을 반환하며 종료시킴
25+ if ( preorder . length === 0 || inorder . length === 0 ) {
26+ return null
27+ }
28+
29+ let root = preorder [ 0 ]
30+ let mid = inorder . findIndex ( ( value ) => value === root )
31+
32+ let leftInorder = inorder . slice ( 0 , mid )
33+ let rightInorder = inorder . slice ( mid + 1 )
34+
35+ let leftPreorder = preorder . slice ( 1 , 1 + leftInorder . length )
36+ let rightPreorder = preorder . slice ( 1 + leftInorder . length )
37+
38+ let left = buildTree ( leftPreorder , leftInorder )
39+ let right = buildTree ( rightPreorder , rightInorder )
40+
41+ return new TreeNode ( root , left , right )
42+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * 알고리즘 복잡도:
3+ * - 시간복잡도: O(n)
4+ * - 공간복잡도: O(k)
5+ * @param s
6+ * @param t
7+ */
8+ function isAnagram ( s : string , t : string ) : boolean {
9+ if ( s . length !== t . length ) return false
10+
11+ let counter = { }
12+ for ( let sValue of s ) {
13+ if ( ! counter [ sValue ] ) { counter [ sValue ] = 1 }
14+ else { counter [ sValue ] ++ }
15+
16+ }
17+
18+ for ( let tValue of t ) {
19+ if ( ! counter [ tValue ] ) return false
20+ else counter [ tValue ] --
21+ }
22+
23+ return Object . values ( counter ) . findIndex ( value => value !== 0 ) < 0 ;
24+ }
You can’t perform that action at this time.
0 commit comments