Skip to content

Commit f99227d

Browse files
authored
Merge pull request #202 from nhistory/Week13
[Sehwan] Week13 solution with JavaScript
2 parents 3ca64ba + 35deba1 commit f99227d

File tree

5 files changed

+121
-0
lines changed

5 files changed

+121
-0
lines changed

insert-interval/nhistory.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var insert = function (intervals, newInterval) {
2+
let result = [];
3+
let i = 0;
4+
5+
// 1. Add all intervals before the new interval
6+
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
7+
result.push(intervals[i]);
8+
i++;
9+
}
10+
11+
// 2. Merge all overlapping intervals with new interval
12+
while (i < intervals.length && intervals[i][0] <= newInterval[1]) {
13+
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
14+
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
15+
i++;
16+
}
17+
result.push(newInterval);
18+
19+
// 3. Add all intervals after the new interval
20+
while (i < intervals.length && intervals[i][1] >= newInterval[0]) {
21+
result.push(intervals[i]);
22+
i++;
23+
}
24+
25+
return result;
26+
};
27+
28+
// TC = O(n)
29+
// SC = O(n)

meeting-rooms-ii/nhistory.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
/**
3+
* @param {Interval[]} intervals
4+
* @returns {number}
5+
*/
6+
minMeetingRooms(intervals) {
7+
// Edge case
8+
if (intervals.length === 0) return 0;
9+
10+
let startTimes = intervals.map((interval) => interval.start);
11+
let endTimes = intervals.map((interval) => interval.end);
12+
13+
startTimes.sort((a, b) => a - b);
14+
endTimes.sort((a, b) => a - b);
15+
16+
let roomNeeded = 0;
17+
let endIndex = 0;
18+
19+
for (let i = 0; i < intervals.length; i++) {
20+
if (startTimes[i] < endTimes[endIndex]) roomNeeded++;
21+
else endIndex++;
22+
}
23+
24+
return roomNeeded;
25+
}
26+
}
27+
28+
// TC: O(nlogn)
29+
// SC: O(n)

merge-intervals/nhistory.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
var merge = function (intervals) {
2+
// Sort intervals with first start number
3+
intervals.sort((a, b) => a[0] - b[0]);
4+
let result = [];
5+
let currentInterval = intervals[0];
6+
7+
for (let i = 1; i < intervals.length; i++) {
8+
if (currentInterval[1] >= intervals[i][0]) {
9+
currentInterval[1] = Math.max(currentInterval[1], intervals[i][1]);
10+
} else {
11+
result.push(currentInterval);
12+
currentInterval = intervals[i];
13+
}
14+
}
15+
16+
result.push(currentInterval);
17+
18+
return result;
19+
};
20+
21+
// TC: O(nlogn)
22+
// SC: O(n)

non-overlapping-intervals/nhistory.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var eraseOverlapIntervals = function (intervals) {
2+
let count = 0;
3+
intervals.sort((a, b) => a[1] - b[1]);
4+
let currentEnd = intervals[0][1];
5+
6+
for (let i = 1; i < intervals.length; i++) {
7+
if (currentEnd > intervals[i][0]) {
8+
count++;
9+
} else {
10+
currentEnd = intervals[i][1];
11+
}
12+
}
13+
14+
return count;
15+
};
16+
17+
// TC: O(nlogn)
18+
// SC: O(1)

rotate-image/nhistory.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var rotate = function (matrix) {
2+
let top = 0,
3+
bottom = matrix.length - 1;
4+
let left, right;
5+
6+
while (top < bottom) {
7+
(left = top), (right = bottom);
8+
9+
for (let i = 0; i < bottom - top; i++) {
10+
const topLeft = matrix[top][left + i];
11+
matrix[top][left + i] = matrix[bottom - i][left];
12+
matrix[bottom - i][left] = matrix[bottom][right - i];
13+
matrix[bottom][right - i] = matrix[top + i][right];
14+
matrix[top + i][right] = topLeft;
15+
}
16+
17+
top++;
18+
bottom--;
19+
}
20+
};
21+
22+
// TC: O(n^2)
23+
// SC: O(1)

0 commit comments

Comments
 (0)