Skip to content

Commit 89a9fc3

Browse files
committed
Add Week 3 solutions
1 parent 4180ac1 commit 89a9fc3

File tree

5 files changed

+131
-0
lines changed

5 files changed

+131
-0
lines changed

climbing-stairs/yolophg.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Time complexity : O(n)
2+
// Space complexity : O(n)
3+
4+
var climbStairs = function(n) {
5+
// create a memoization object to store results.
6+
const memo = {};
7+
8+
// recursive function to calculate the number of ways to climb n steps.
9+
function climb(n) {
10+
// if n is 1 or 2, there's only one way to climb or two ways.
11+
if (n <= 2) return n;
12+
13+
// if the result for n is already computed, return it from memo.
14+
if (memo[n]) return memo[n];
15+
16+
// otherwise, compute the result recursively.
17+
memo[n] = climb(n - 1) + climb(n - 2);
18+
return memo[n];
19+
}
20+
21+
return climb(n);
22+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Time complexity : O(n)
2+
// Space complexity : O(n)
3+
4+
var maxDepth = function (root) {
5+
// if the root is null, the depth is 0.
6+
if (root === null) {
7+
return 0;
8+
}
9+
10+
// initialize the stack with the root node and its depth, which is 1.
11+
const stack = [{ node: root, depth: 1 }];
12+
let maxDepth = 0;
13+
14+
// process the stack till it is empty.
15+
while (stack.length > 0) {
16+
// pop the top element from the stack.
17+
const { node, depth } = stack.pop();
18+
19+
if (node !== null) {
20+
// update the maximum depth.
21+
maxDepth = Math.max(maxDepth, depth);
22+
23+
// push the left and right children with their respective depths.
24+
if (node.left !== null) {
25+
stack.push({ node: node.left, depth: depth + 1 });
26+
}
27+
if (node.right !== null) {
28+
stack.push({ node: node.right, depth: depth + 1 });
29+
}
30+
}
31+
}
32+
33+
return maxDepth;
34+
};

meeting-rooms/yolophg.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Time Complexity: O(n log n)
2+
// Space Complexity: O(1)
3+
4+
class Solution {
5+
canAttendMeetings(intervals) {
6+
intervals.sort((a, b) => a.start - b.start);
7+
8+
// check for overlaps.
9+
for (let i = 1; i < intervals.length; i++) {
10+
// check if there is an overlap between the current interval and the previous one.
11+
if (intervals[i].start < intervals[i - 1].end) {
12+
return false;
13+
}
14+
}
15+
16+
return true;
17+
}
18+
}

same-tree/yolophg.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Time complexity : O(n)
2+
// Space complexity : O(n)
3+
4+
var isSameTree = function(p, q) {
5+
// initialize two queues for BFS.
6+
let queue1 = [p];
7+
let queue2 = [q];
8+
9+
while (queue1.length > 0 && queue2.length > 0) {
10+
let node1 = queue1.shift();
11+
let node2 = queue2.shift();
12+
13+
// if both nodes are null, continue to the next pair of nodes.
14+
if (node1 === null && node2 === null) {
15+
continue;
16+
}
17+
18+
// if one of the nodes is null or their values are different, return false.
19+
if (node1 === null || node2 === null || node1.val !== node2.val) {
20+
return false;
21+
}
22+
23+
// enqueue the left and right children of both nodes.
24+
queue1.push(node1.left);
25+
queue1.push(node1.right);
26+
queue2.push(node2.left);
27+
queue2.push(node2.right);
28+
}
29+
30+
// if both queues are empty, the trees are the same
31+
return queue1.length === 0 && queue2.length === 0;
32+
};

subtree-of-another-tree/yolophg.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Time complexity : O(m * n)
2+
// Space complexity : O(h)
3+
4+
// fuunction to check if two trees are identical.
5+
var isIdentical = function(root1, root2) {
6+
// if they are both empty, return true.
7+
if (!root1 && !root2) return true;
8+
// if either one of them is null and the other is not, return false.
9+
if (!root1 || !root2) return false;
10+
11+
// if the right subtrees are identical, return true only if all conditions are met.
12+
return root1.val === root2.val &&
13+
isIdentical(root1.left, root2.left) &&
14+
isIdentical(root1.right, root2.right);
15+
}
16+
17+
var isSubtree = function(root, subRoot) {
18+
// if the root is empty, return false
19+
if (!root) return false;
20+
// if the subtree rooted at subRoot is identical, return true.
21+
if (isIdentical(root, subRoot)) return true;
22+
23+
// if find the subtree in either the left or right subtree, return true. otherwise, return false.
24+
return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot);
25+
};

0 commit comments

Comments
 (0)