File tree Expand file tree Collapse file tree 4 files changed +140
-0
lines changed
binary-tree-maximum-path-sum Expand file tree Collapse file tree 4 files changed +140
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * https://leetcode.com/problems/binary-tree-maximum-path-sum/
3
+ * Definition for a binary tree node.
4
+ * function TreeNode(val, left, right) {
5
+ * this.val = (val===undefined ? 0 : val)
6
+ * this.left = (left===undefined ? null : left)
7
+ * this.right = (right===undefined ? null : right)
8
+ * }
9
+ */
10
+ /**
11
+ * @param {TreeNode } root
12
+ * @return {number }
13
+ */
14
+ var maxPathSum = function ( root ) {
15
+ let maxSum = - Infinity ; // global max
16
+
17
+ function dfs ( node ) {
18
+ if ( ! node ) return 0 ;
19
+
20
+ // 왼쪽과 오른쪽 서브트리에서 최대 경로 합을 구한다
21
+ // 음수면 0으로 치환 (해당 서브트리를 포함하지 않는게 더 이득인 경우)
22
+ let leftMax = Math . max ( 0 , dfs ( node . left ) ) ;
23
+ let rightMax = Math . max ( 0 , dfs ( node . right ) ) ;
24
+
25
+ // 현재 노드를 루트로 하는 경로에서 최대값을 계산 (left + node + right)
26
+ let currentMax = leftMax + node . val + rightMax ;
27
+
28
+ // global 최대값 갱신
29
+ maxSum = Math . max ( maxSum , currentMax ) ;
30
+
31
+ // 부모 노드로 return 시: 한쪽 방향으로만 선택 가능
32
+ return node . val + Math . max ( leftMax , rightMax ) ;
33
+ }
34
+
35
+ dfs ( root ) ;
36
+ return maxSum ;
37
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * https://leetcode.com/problems/missing-number/
3
+ * @param {number[] } nums
4
+ * @return {number }
5
+ */
6
+ var missingNumber = function ( nums ) {
7
+ nums . sort ( ( a , b ) => a - b ) ;
8
+
9
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
10
+ if ( nums [ i ] !== i ) {
11
+ return i ; // 빠진 숫자를 찾으면 리턴
12
+ }
13
+ }
14
+
15
+ return nums . length ; // 모든 숫자가 다 있으면 빠진 건 n
16
+ } ;
17
+
18
+ // 수학적 합 공식 이용하기 (가장 빠름)
19
+ //시간복잡도: O(n)
20
+ // 공간복잡도: O(1) (아주 효율적)
21
+
22
+ var missingNumber = function ( nums ) {
23
+ const n = nums . length ;
24
+ const expectedSum = ( n * ( n + 1 ) ) / 2 ;
25
+ const actualSum = nums . reduce ( ( a , b ) => a + b , 0 ) ;
26
+ return expectedSum - actualSum ;
27
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ *https://leetcode.com/problems/reorder-list/
3
+ * Definition for singly-linked list.
4
+ * function ListNode(val, next) {
5
+ * this.val = (val===undefined ? 0 : val)
6
+ * this.next = (next===undefined ? null : next)
7
+ * }
8
+ */
9
+ /**
10
+ * @param {ListNode } head
11
+ * @return {void } Do not return anything, modify head in-place instead.
12
+ */
13
+ var reorderList = function ( head ) {
14
+ if ( ! head || ! head . next ) return ;
15
+
16
+ // 1. 중간 지점 찾기 (slow, fast 포인터 사용)
17
+ let slow = head ;
18
+ let fast = head ;
19
+ while ( fast . next && fast . next . next ) {
20
+ slow = slow . next ;
21
+ fast = fast . next . next ;
22
+ }
23
+
24
+ // 2. 중간 이후 리스트 뒤집기
25
+ let prev = null ;
26
+ let curr = slow . next ;
27
+ while ( curr ) {
28
+ let nextTemp = curr . next ;
29
+ curr . next = prev ;
30
+ prev = curr ;
31
+ curr = nextTemp ;
32
+ }
33
+ // 중간 지점 이후는 끊기
34
+ slow . next = null ;
35
+
36
+ // 3. 앞쪽 리스트와 뒤쪽 리스트 교차 병합
37
+ let first = head ;
38
+ let second = prev ;
39
+ while ( second ) {
40
+ let tmp1 = first . next ;
41
+ let tmp2 = second . next ;
42
+
43
+ first . next = second ;
44
+ second . next = tmp1 ;
45
+
46
+ first = tmp1 ;
47
+ second = tmp2 ;
48
+ }
49
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * https://leetcode.com/problems/same-tree/description/
3
+ * Definition for a binary tree node.
4
+ * function TreeNode(val, left, right) {
5
+ * this.val = (val===undefined ? 0 : val)
6
+ * this.left = (left===undefined ? null : left)
7
+ * this.right = (right===undefined ? null : right)
8
+ * }
9
+ */
10
+ /**
11
+ * @param {TreeNode } p
12
+ * @param {TreeNode } q
13
+ * @return {boolean }
14
+ */
15
+ var isSameTree = function ( p , q ) {
16
+ // 둘 다 null이면 같은 트리
17
+ if ( p === null && q === null ) return true ;
18
+
19
+ // 하나는 null이고 하나는 값이 있다면 다른 트리
20
+ if ( p === null || q === null ) return false ;
21
+
22
+ // 값이 다르면 다른 트리
23
+ if ( p . val !== q . val ) return false ;
24
+
25
+ // 왼쪽과 오른쪽 서브트리도 각각 재귀적으로 비교
26
+ return isSameTree ( p . left , q . left ) && isSameTree ( p . right , q . right ) ;
27
+ } ;
You can’t perform that action at this time.
0 commit comments