Skip to content

Commit 24b00d8

Browse files
authored
Merge pull request #1924 from hyer0705/main
[hyer0705] WEEK 10 solutions
2 parents 8199e18 + 00f2cd3 commit 24b00d8

File tree

5 files changed

+136
-0
lines changed

5 files changed

+136
-0
lines changed

course-schedule/hyer0705.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
function canFinish(numCourses: number, prerequisites: number[][]): boolean {
2+
const graph: number[][] = Array.from({ length: numCourses }, () => []);
3+
const inDegree: number[] = Array(numCourses).fill(0);
4+
5+
for (const [course, prerequisite] of prerequisites) {
6+
graph[prerequisite].push(course);
7+
inDegree[course]++;
8+
}
9+
10+
// 지금 당장 수강할 수 있는 과목 목록
11+
const queue: number[] = [];
12+
13+
for (let i = 0; i < numCourses; i++) {
14+
if (inDegree[i] === 0) {
15+
queue.push(i);
16+
}
17+
}
18+
19+
const result: number[] = [];
20+
while (queue.length > 0) {
21+
const course = queue.shift()!;
22+
result.push(course);
23+
24+
for (const nextCourse of graph[course]) {
25+
inDegree[nextCourse]--;
26+
if (inDegree[nextCourse] === 0) {
27+
queue.push(nextCourse);
28+
}
29+
}
30+
}
31+
32+
if (result.length !== numCourses) return false;
33+
return true;
34+
}

invert-binary-tree/hyer0705.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
function invertTree(root: TreeNode | null): TreeNode | null {
16+
if (!root) return null;
17+
18+
const temp = root.left;
19+
root.left = root.right;
20+
root.right = temp;
21+
22+
invertTree(root.left);
23+
invertTree(root.right);
24+
25+
return root;
26+
}

jump-game/hyer0705.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
function canJump(nums: number[]): boolean {
2+
const n = nums.length;
3+
4+
let maximumReach = 0;
5+
6+
for (let i = 0; i < n; i++) {
7+
if (i > maximumReach) return false;
8+
9+
maximumReach = Math.max(maximumReach, i + nums[i]);
10+
}
11+
12+
return maximumReach >= n - 1;
13+
}

merge-k-sorted-lists/hyer0705.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* class ListNode {
4+
* val: number
5+
* next: ListNode | null
6+
* constructor(val?: number, next?: ListNode | null) {
7+
* this.val = (val===undefined ? 0 : val)
8+
* this.next = (next===undefined ? null : next)
9+
* }
10+
* }
11+
*/
12+
13+
function mergeKLists(lists: Array<ListNode | null>): ListNode | null {
14+
if (!lists || lists.length === 0) return null;
15+
16+
const minHeap = new PriorityQueue((a: ListNode, b: ListNode) => a.val - b.val);
17+
18+
for (const node of lists) {
19+
if (node) minHeap.enqueue(node);
20+
}
21+
22+
const dummyHead = new ListNode();
23+
let current = dummyHead;
24+
25+
while (!minHeap.isEmpty()) {
26+
const minimumElement = minHeap.dequeue();
27+
28+
current.next = minimumElement;
29+
current = current.next;
30+
31+
if (minimumElement.next) {
32+
minHeap.enqueue(minimumElement.next);
33+
}
34+
}
35+
36+
return dummyHead.next;
37+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
function search(nums: number[], target: number): number {
2+
let left = 0;
3+
let right = nums.length - 1;
4+
5+
while (left <= right) {
6+
const mid = Math.floor((left + right) / 2);
7+
8+
if (nums[mid] === target) return mid;
9+
10+
if (nums[mid] >= nums[left]) {
11+
if (target < nums[mid] && target >= nums[left]) {
12+
right = mid - 1;
13+
} else {
14+
left = mid + 1;
15+
}
16+
} else {
17+
if (target > nums[mid] && target <= nums[right]) {
18+
left = mid + 1;
19+
} else {
20+
right = mid - 1;
21+
}
22+
}
23+
}
24+
25+
return -1;
26+
}

0 commit comments

Comments
 (0)