Skip to content

Commit a281b90

Browse files
authored
Merge pull request #1558 from hsskey/main
[hsskey] Week 10 Solutions
2 parents 1a97d31 + 03df49b commit a281b90

File tree

5 files changed

+165
-0
lines changed

5 files changed

+165
-0
lines changed

course-schedule/hsskey.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* @param {number} numCourses
3+
* @param {number[][]} prerequisites
4+
* @return {boolean}
5+
*/
6+
var canFinish = function(numCourses, prerequisites) {
7+
const preMap = {};
8+
for (let i = 0; i < numCourses; i++) {
9+
preMap[i] = [];
10+
}
11+
for (const [crs, pre] of prerequisites) {
12+
preMap[crs].push(pre);
13+
}
14+
15+
const visitSet = new Set();
16+
17+
const dfs = (crs) => {
18+
if (visitSet.has(crs)) return false;
19+
if (preMap[crs].length === 0) return true;
20+
21+
visitSet.add(crs);
22+
for (const pre of preMap[crs]) {
23+
if (!dfs(pre)) return false;
24+
}
25+
visitSet.delete(crs);
26+
preMap[crs] = [];
27+
28+
return true;
29+
};
30+
31+
for (let crs = 0; crs < numCourses; crs++) {
32+
if (!dfs(crs)) return false;
33+
}
34+
35+
return true;
36+
};
37+

invert-binary-tree/hsskey.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val === undefined ? 0 : val)
5+
* this.left = (left === undefined ? null : left)
6+
* this.right = (right === undefined ? null : right)
7+
* }
8+
*/
9+
10+
/**
11+
* @param {TreeNode} root
12+
* @return {TreeNode}
13+
*/
14+
var invertTree = function(root) {
15+
if (!root) return null;
16+
17+
// swap the children
18+
let tmp = root.left;
19+
root.left = root.right;
20+
root.right = tmp;
21+
22+
invertTree(root.left);
23+
invertTree(root.right);
24+
25+
return root;
26+
};
27+

jump-game/hsskey.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {boolean}
4+
*/
5+
var canJump = function(nums) {
6+
let goal = nums.length - 1;
7+
8+
for (let i = nums.length - 1; i >= 0; i--) {
9+
if (i + nums[i] >= goal) {
10+
goal = i;
11+
}
12+
}
13+
14+
return goal === 0;
15+
};
16+

merge-k-sorted-lists/hsskey.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val, next) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.next = (next===undefined ? null : next)
6+
* }
7+
*/
8+
9+
/**
10+
* @param {ListNode[]} lists
11+
* @return {ListNode}
12+
*/
13+
var mergeKLists = function(lists) {
14+
if (!lists || lists.length === 0) return null;
15+
16+
const mergeList = (l1, l2) => {
17+
const dummy = new ListNode(0);
18+
let current = dummy;
19+
20+
while (l1 && l2) {
21+
if (l1.val < l2.val) {
22+
current.next = l1;
23+
l1 = l1.next;
24+
} else {
25+
current.next = l2;
26+
l2 = l2.next;
27+
}
28+
current = current.next;
29+
}
30+
31+
current.next = l1 || l2;
32+
return dummy.next;
33+
};
34+
35+
while (lists.length > 1) {
36+
const mergedLists = [];
37+
38+
for (let i = 0; i < lists.length; i += 2) {
39+
const l1 = lists[i];
40+
const l2 = (i + 1 < lists.length) ? lists[i + 1] : null;
41+
mergedLists.push(mergeList(l1, l2));
42+
}
43+
44+
lists = mergedLists;
45+
}
46+
47+
return lists[0];
48+
};
49+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number}
5+
*/
6+
var search = function(nums, target) {
7+
let l = 0, r = nums.length - 1;
8+
9+
while (l <= r) {
10+
const mid = Math.floor((l + r) / 2);
11+
12+
if (nums[mid] === target) {
13+
return mid;
14+
}
15+
16+
// left sorted portion
17+
if (nums[l] <= nums[mid]) {
18+
if (target > nums[mid] || target < nums[l]) {
19+
l = mid + 1;
20+
} else {
21+
r = mid - 1;
22+
}
23+
}
24+
// right sorted portion
25+
else {
26+
if (target < nums[mid] || target > nums[r]) {
27+
r = mid - 1;
28+
} else {
29+
l = mid + 1;
30+
}
31+
}
32+
}
33+
34+
return -1;
35+
};
36+

0 commit comments

Comments
 (0)