Skip to content

[Sehwan] Week13 solution with JavaScript #202

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions insert-interval/nhistory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
var insert = function (intervals, newInterval) {
let result = [];
let i = 0;

// 1. Add all intervals before the new interval
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
result.push(intervals[i]);
i++;
}

// 2. Merge all overlapping intervals with new interval
while (i < intervals.length && intervals[i][0] <= newInterval[1]) {
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
i++;
}
result.push(newInterval);

// 3. Add all intervals after the new interval
while (i < intervals.length && intervals[i][1] >= newInterval[0]) {
result.push(intervals[i]);
i++;
}

return result;
};

// TC = O(n)
// SC = O(n)
29 changes: 29 additions & 0 deletions meeting-rooms-ii/nhistory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
class Solution {
/**
* @param {Interval[]} intervals
* @returns {number}
*/
minMeetingRooms(intervals) {
// Edge case
if (intervals.length === 0) return 0;

let startTimes = intervals.map((interval) => interval.start);
let endTimes = intervals.map((interval) => interval.end);

startTimes.sort((a, b) => a - b);
endTimes.sort((a, b) => a - b);

let roomNeeded = 0;
let endIndex = 0;

for (let i = 0; i < intervals.length; i++) {
if (startTimes[i] < endTimes[endIndex]) roomNeeded++;
else endIndex++;
}

return roomNeeded;
}
}

// TC: O(nlogn)
// SC: O(n)
22 changes: 22 additions & 0 deletions merge-intervals/nhistory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
var merge = function (intervals) {
// Sort intervals with first start number
intervals.sort((a, b) => a[0] - b[0]);
let result = [];
let currentInterval = intervals[0];

for (let i = 1; i < intervals.length; i++) {
if (currentInterval[1] >= intervals[i][0]) {
currentInterval[1] = Math.max(currentInterval[1], intervals[i][1]);
} else {
result.push(currentInterval);
currentInterval = intervals[i];
}
}

result.push(currentInterval);

return result;
};

// TC: O(nlogn)
// SC: O(n)
18 changes: 18 additions & 0 deletions non-overlapping-intervals/nhistory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
var eraseOverlapIntervals = function (intervals) {
let count = 0;
intervals.sort((a, b) => a[1] - b[1]);
let currentEnd = intervals[0][1];

for (let i = 1; i < intervals.length; i++) {
if (currentEnd > intervals[i][0]) {
count++;
} else {
currentEnd = intervals[i][1];
}
}

return count;
};

// TC: O(nlogn)
// SC: O(1)
23 changes: 23 additions & 0 deletions rotate-image/nhistory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
var rotate = function (matrix) {
let top = 0,
bottom = matrix.length - 1;
let left, right;

while (top < bottom) {
(left = top), (right = bottom);

for (let i = 0; i < bottom - top; i++) {
const topLeft = matrix[top][left + i];
matrix[top][left + i] = matrix[bottom - i][left];
matrix[bottom - i][left] = matrix[bottom][right - i];
matrix[bottom][right - i] = matrix[top + i][right];
matrix[top + i][right] = topLeft;
}

top++;
bottom--;
}
};

// TC: O(n^2)
// SC: O(1)