Skip to content

Commit 3c980d6

Browse files
authored
Merge pull request #532 from HC-kang/main
[강희찬] WEEK 10 Solution
2 parents f52334c + 3dc3be4 commit 3c980d6

File tree

5 files changed

+169
-0
lines changed

5 files changed

+169
-0
lines changed

course-schedule/HC-kang.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* https://leetcode.com/problems/course-schedule/
3+
* T.C. O(V + E)
4+
* S.C. O(V + E)
5+
*/
6+
function canFinish(numCourses: number, prerequisites: number[][]): boolean {
7+
const graph: number[][] = Array.from({ length: numCourses }, () => []);
8+
for (const [course, pre] of prerequisites) {
9+
graph[pre].push(course);
10+
}
11+
12+
const visited = new Array(numCourses).fill(false);
13+
const visiting = new Array(numCourses).fill(false);
14+
15+
const dfs = (course: number): boolean => {
16+
if (visited[course]) return true;
17+
if (visiting[course]) return false;
18+
19+
visiting[course] = true;
20+
for (const neighbor of graph[course]) {
21+
if (!dfs(neighbor)) return false;
22+
}
23+
visiting[course] = false;
24+
visited[course] = true;
25+
26+
return true;
27+
};
28+
29+
for (let i = 0; i < numCourses; i++) {
30+
if (!visited[i] && !dfs(i)) return false;
31+
}
32+
33+
return true;
34+
}

invert-binary-tree/HC-kang.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// class TreeNode {
2+
// val: number;
3+
// left: TreeNode | null;
4+
// right: TreeNode | null;
5+
// constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
6+
// this.val = val === undefined ? 0 : val;
7+
// this.left = left === undefined ? null : left;
8+
// this.right = right === undefined ? null : right;
9+
// }
10+
// }
11+
12+
/**
13+
* https://leetcode.com/problems/invert-binary-tree
14+
* T.C. O(n)
15+
* S.C. O(n)
16+
*/
17+
function invertTree(root: TreeNode | null): TreeNode | null {
18+
if (root === null) {
19+
return null;
20+
}
21+
22+
[root.left, root.right] = [root.right, root.left];
23+
invertTree(root.left);
24+
invertTree(root.right);
25+
26+
return root;
27+
}
28+
29+
/**
30+
* T.C. O(n)
31+
* S.C. O(n)
32+
*/
33+
function invertTree(root: TreeNode | null): TreeNode | null {
34+
const stack: Array<TreeNode | null> = [root];
35+
36+
while (stack.length > 0) {
37+
const node = stack.pop()!;
38+
39+
if (node === null) {
40+
continue;
41+
}
42+
43+
[node.left, node.right] = [node.right, node.left];
44+
stack.push(node.left, node.right);
45+
}
46+
47+
return root;
48+
}

jump-game/HC-kang.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* https://leetcode.com/problems/jump-game/
3+
* T.C. O(n)
4+
* S.C. O(1)
5+
*/
6+
function canJump(nums: number[]): boolean {
7+
let max = 0;
8+
9+
for (let i = 0; i < nums.length; i++) {
10+
if (i > max) return false;
11+
max = Math.max(max, i + nums[i]);
12+
if (max >= nums.length - 1) return true;
13+
}
14+
15+
return false;
16+
}

merge-k-sorted-lists/HC-kang.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// class ListNode {
2+
// val: number;
3+
// next: ListNode | null;
4+
// constructor(val?: number, next?: ListNode | null) {
5+
// this.val = val === undefined ? 0 : val;
6+
// this.next = next === undefined ? null : next;
7+
// }
8+
// }
9+
10+
/**
11+
* https://leetcode.com/problems/merge-k-sorted-lists
12+
* T.C. O(n * k^2) n: average length of list, k: number of lists
13+
* S.C. O(1)
14+
*/
15+
function mergeKLists(lists: Array<ListNode | null>): ListNode | null {
16+
if (lists.length === 0) return null;
17+
if (lists.length === 1) return lists[0];
18+
return lists.reduce((acc, cur) => mergeTwoLists(acc, cur), null);
19+
20+
function mergeTwoLists(list1: ListNode | null, list2: ListNode | null): ListNode | null {
21+
const head = new ListNode();
22+
let current = head;
23+
24+
while (list1 && list2) {
25+
if (list1.val < list2.val) {
26+
current.next = list1;
27+
list1 = list1.next;
28+
} else {
29+
current.next = list2;
30+
list2 = list2.next;
31+
}
32+
current = current.next;
33+
}
34+
35+
current.next = list1 || list2;
36+
37+
return head.next;
38+
}
39+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* https://leetcode.com/problems/search-in-rotated-sorted-array
3+
* T.C. O(log n)
4+
* S.C. O(1)
5+
*/
6+
function search(nums: number[], target: number): number {
7+
let left = 0;
8+
let right = nums.length - 1;
9+
10+
while (left <= right) {
11+
let mid = left + ((right - left) >> 1);
12+
13+
if (nums[mid] === target) {
14+
return mid;
15+
}
16+
17+
if (nums[left] <= nums[mid]) {
18+
if (nums[left] <= target && target < nums[mid]) {
19+
right = mid - 1;
20+
} else {
21+
left = mid + 1;
22+
}
23+
} else {
24+
if (nums[mid] < target && target <= nums[right]) {
25+
left = mid + 1;
26+
} else {
27+
right = mid - 1;
28+
}
29+
}
30+
}
31+
return -1;
32+
}

0 commit comments

Comments
 (0)