function minMeetingRooms(intervals) {
if (!intervals.length) return 0;
intervals.sort((a, b) => a[0] - b[0]);
const heap = [];
heap.push(intervals[0][1]);
for (let i = 1; i < intervals.length; i++) {
if (intervals[i][0] >= heap[0]) {
heap.shift();
}
heap.push(intervals[i][1]);
heap.sort((a, b) => a - b);
}
return heap.length;
}
console.log(minMeetingRooms([[0, 30], [5, 10], [15, 20]]));The function sorts intervals by start time and uses a min-heap (simulated by sorting an array) to track end times. It removes the earliest ending meeting if the current meeting starts after or when it ends. The heap size at the end is the minimum number of rooms needed.
For the input, two meetings overlap, so 2 rooms are needed.
function minMeetingRooms(intervals) {
if (!intervals.length) return 0;
intervals.sort((a, b) => a[0] - b[0]);
const heap = [];
heap.push(intervals[0][1]);
for (let i = 1; i < intervals.length; i++) {
if (intervals[i][0] >= heap[0]) {
heap.shift();
}
heap.push(intervals[i][1]);
heap.sort((a, b) => a - b);
}
return heap.length;
}
console.log(minMeetingRooms([[7, 10], [2, 4]]));The meetings do not overlap because one ends before the other starts. So only one room is needed.
function minMeetingRooms(intervals) {
if (!intervals.length) return 0;
intervals.sort((a, b) => a[0] - b[0]);
const heap = [];
heap.push(intervals[0][1]);
for (let i = 1; i < intervals.length; i++) {
if (intervals[i][0] >= heap[0]) {
heap.pop();
}
heap.push(intervals[i][1]);
heap.sort((a, b) => a - b);
}
return heap.length;
}
console.log(minMeetingRooms([[1, 5], [2, 6], [8, 10]]));The code uses heap.pop() to remove the earliest ending meeting, but pop() removes the last element, not the first. This causes the heap to grow incorrectly, resulting in returning 3 instead of 2.
Sorting by start time lets us check each meeting in the order they begin. This helps us decide if a room is free or if we need a new one.
The maximum number of overlapping meetings at any time is 3, so 3 rooms are needed.
