Skip to content

Commit 50153d9

Browse files
authored
Merge pull request #200 from yolophg/week13
[Helena] Week 13 solutions
2 parents f99227d + 914f264 commit 50153d9

File tree

5 files changed

+153
-0
lines changed

5 files changed

+153
-0
lines changed

insert-interval/yolophg.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Time Complexity: O(n log n)
2+
// Space Complexity: O(n)
3+
4+
var insert = function (intervals, newInterval) {
5+
// append the newInterval to the intervals array
6+
intervals.push(newInterval);
7+
8+
// sort the intervals array by start time
9+
intervals.sort((a, b) => a[0] - b[0]);
10+
11+
// to store merged intervals
12+
let result = [];
13+
14+
// iterate through the sorted intervals array
15+
for (let i = 0; i < intervals.length; i++) {
16+
// if the result array is empty or the current interval does not overlap with the last interval
17+
if (result.length === 0 || result[result.length - 1][1] < intervals[i][0]) {
18+
result.push(intervals[i]); // Add the current interval to the result array
19+
} else {
20+
// if there is an overlap, merge the current interval with the last interval
21+
result[result.length - 1][1] = Math.max(
22+
result[result.length - 1][1],
23+
intervals[i][1]
24+
);
25+
}
26+
}
27+
28+
// return the final merged intervals
29+
return result;
30+
};

meeting-rooms-ii/yolophg.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Time Complexity: O(n log n)
2+
// Space Complexity: O(n)
3+
4+
export class Solution {
5+
minMeetingRooms(intervals) {
6+
// separate start and end times into different arrays
7+
let startTimes = intervals.map((interval) => interval[0]);
8+
let endTimes = intervals.map((interval) => interval[1]);
9+
10+
// sort the start and end times
11+
startTimes.sort((a, b) => a - b);
12+
endTimes.sort((a, b) => a - b);
13+
14+
let startPointer = 0;
15+
let endPointer = 0;
16+
let rooms = 0;
17+
let maxRooms = 0;
18+
19+
// iterate over all the start times
20+
while (startPointer < intervals.length) {
21+
// if the start time is less than the end time, a new room is needed
22+
if (startTimes[startPointer] < endTimes[endPointer]) {
23+
rooms++;
24+
startPointer++;
25+
} else {
26+
// if the start time is not less than the end time, free up a room
27+
rooms--;
28+
endPointer++;
29+
}
30+
31+
// update the maximum number of rooms needed
32+
maxRooms = Math.max(maxRooms, rooms);
33+
}
34+
35+
// return the maximum number of rooms needed
36+
return maxRooms;
37+
}
38+
}

merge-intervals/yolophg.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Time Complexity: O(n log n)
2+
// Space Complexity: O(n)
3+
4+
var merge = function (intervals) {
5+
// sort the intervals by their start time
6+
intervals.sort((a, b) => a[0] - b[0]);
7+
8+
// to manage merged intervals
9+
let stack = [];
10+
11+
// push the first interval onto the stack
12+
stack.push(intervals[0]);
13+
14+
// iterate through the sorted intervals
15+
for (let i = 1; i < intervals.length; i++) {
16+
// get the top interval from the stack
17+
let top = stack[stack.length - 1];
18+
19+
// if the current interval overlaps with the top interval
20+
if (top[1] >= intervals[i][0]) {
21+
// merge the intervals by updating the end of the top interval
22+
top[1] = Math.max(top[1], intervals[i][1]);
23+
} else {
24+
// if there is no overlap, push the current interval onto the stack
25+
stack.push(intervals[i]);
26+
}
27+
}
28+
29+
// return the final merged intervals
30+
return stack;
31+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Time Complexity: O(n log n)
2+
// Space Complexity: O(1)
3+
4+
var eraseOverlapIntervals = function (intervals) {
5+
// sort the intervals based on their end times
6+
intervals.sort((a, b) => a[1] - b[1]);
7+
8+
let end = intervals[0][1];
9+
let count = 0;
10+
11+
// iterate through the sorted intervals
12+
for (let i = 1; i < intervals.length; i++) {
13+
if (intervals[i][0] < end) {
14+
// overlapping interval found, increment the count
15+
count++;
16+
} else {
17+
// no overlap, update the end to the current interval's end
18+
end = intervals[i][1];
19+
}
20+
}
21+
22+
return count;
23+
};

rotate-image/yolophg.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Time Complexity: O(n^2)
2+
// Space Complexity: O(1)
3+
4+
var rotate = function (matrix) {
5+
const n = matrix.length;
6+
7+
// perform the rotation layer by layer
8+
for (let layer = 0; layer < Math.floor(n / 2); layer++) {
9+
let first = layer;
10+
let last = n - 1 - layer;
11+
12+
for (let i = first; i < last; i++) {
13+
let offset = i - first;
14+
15+
// save the top element
16+
let top = matrix[first][i];
17+
18+
// move left element to top
19+
matrix[first][i] = matrix[last - offset][first];
20+
21+
// move bottom element to left
22+
matrix[last - offset][first] = matrix[last][last - offset];
23+
24+
// move right element to bottom
25+
matrix[last][last - offset] = matrix[i][last];
26+
27+
// assign saved top element to right
28+
matrix[i][last] = top;
29+
}
30+
}
31+
};

0 commit comments

Comments
 (0)