From e1707330ec136025a831a5121d6abe9c86487ddb Mon Sep 17 00:00:00 2001 From: hoyeongkwak Date: Fri, 13 Jun 2025 22:41:20 +0900 Subject: [PATCH] Week 11 Solutions --- binary-tree-maximum-path-sum/hoyeongkwak.ts | 33 ++++++++++++++ merge-intervals/hoyeongkwak.ts | 17 ++++++++ missing-number/hoyeongkwak.ts | 15 +++++++ reorder-list/hoyeongkwak.ts | 48 +++++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 binary-tree-maximum-path-sum/hoyeongkwak.ts create mode 100644 merge-intervals/hoyeongkwak.ts create mode 100644 missing-number/hoyeongkwak.ts create mode 100644 reorder-list/hoyeongkwak.ts diff --git a/binary-tree-maximum-path-sum/hoyeongkwak.ts b/binary-tree-maximum-path-sum/hoyeongkwak.ts new file mode 100644 index 000000000..6a6a563ec --- /dev/null +++ b/binary-tree-maximum-path-sum/hoyeongkwak.ts @@ -0,0 +1,33 @@ +/** + * Definition for a binary tree node. + * class TreeNode { + * val: number + * left: TreeNode | null + * right: TreeNode | null + * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + * } + */ + +/* +Time complexity: O(N) +Space complexity: O(N) h: 트리의 높이 +*/ +function maxPathSum(root: TreeNode | null): number { + let maxSum = -Infinity + const dfs = (node: TreeNode): number => { + if (node == null) return 0 + + const leftMax = Math.max(0, dfs(node.left)) + const rightMax = Math.max(0, dfs(node.right)) + const currentMax = node.val + leftMax + rightMax + + maxSum = Math.max(maxSum, currentMax) + return node.val + Math.max(leftMax, rightMax) + } + dfs(root) + return maxSum +}; diff --git a/merge-intervals/hoyeongkwak.ts b/merge-intervals/hoyeongkwak.ts new file mode 100644 index 000000000..ba4d388a3 --- /dev/null +++ b/merge-intervals/hoyeongkwak.ts @@ -0,0 +1,17 @@ +/* +Time complexity: O(NlogN) +Space complexity: O(N) +*/ +function merge(intervals: number[][]): number[][] { + if (intervals.length === 0) return intervals + intervals.sort((a, b) => a[0] - b[0]) + const result = [] + for (const interval of intervals) { + if (result.length === 0 || result[result.length - 1][1] < interval[0]) { + result.push(interval) + } else { + result[result.length - 1][1] = Math.max(result[result.length -1][1], interval[1]) + } + } + return result +}; diff --git a/missing-number/hoyeongkwak.ts b/missing-number/hoyeongkwak.ts new file mode 100644 index 000000000..c95f36450 --- /dev/null +++ b/missing-number/hoyeongkwak.ts @@ -0,0 +1,15 @@ +/* +Time complexity: O(N) +Space complexity: O(N) +*/ +function missingNumber(nums: number[]): number { + const numSet = new Set(nums) + let missNum = 0 + for (let i = 0; i <= nums.length; i++) { + if (!numSet.has(i)) { + missNum = i + break + } + } + return missNum +}; diff --git a/reorder-list/hoyeongkwak.ts b/reorder-list/hoyeongkwak.ts new file mode 100644 index 000000000..7538e7256 --- /dev/null +++ b/reorder-list/hoyeongkwak.ts @@ -0,0 +1,48 @@ +/** + * Definition for singly-linked list. + * class ListNode { + * val: number + * next: ListNode | null + * constructor(val?: number, next?: ListNode | null) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + * } + */ + +/** + Do not return anything, modify head in-place instead. + */ + /* +Time complexity: O(N) +Space complexity: O(1) +*/ +function reorderList(head: ListNode | null): void { + let slow = head + let fast = head + while (fast && fast.next) { + slow = slow.next + fast = fast.next.next + } + let curr = slow.next + slow.next = null + let prev = null + + while (curr) { + let temp = curr.next + curr.next = prev + prev = curr + curr = temp + } + let first = head + let second = prev + + while (second) { + let firstNext = first.next + let secondNext = second.next + first.next = second + second.next = firstNext + first = firstNext + second = secondNext + } +};