Meeting Rooms II
Problem (restated)
Given meeting time intervals, find the minimum number of conference rooms required.
Intuition
Sort starts and ends; sweep: start increments rooms, end frees; track peak.
Approaches
Sweep line
UnverifiedTime O(n log n)Space O(n)
Idea. Two pointers on sorted starts/ends.
Walkthrough. [[0,30],[5,10],[15,20]] → 2 rooms.
Trade-offs. Sweep vs min-heap of end times.
Solution
export function minMeetingRooms(intervals: number[][]): number {
const starts = intervals.map((x) => x[0]!).sort((a, b) => a - b);
const ends = intervals.map((x) => x[1]!).sort((a, b) => a - b);
let i = 0, j = 0, cur = 0, peak = 0;
while (i < starts.length) {
if (starts[i]! < ends[j]!) {
cur++;
peak = Math.max(peak, cur);
i++;
} else {
cur--;
j++;
}
}
return peak;
}
export function minMeetingRooms(intervals: number[][]): number {
const starts = intervals.map((x) => x[0]!).sort((a, b) => a - b);
const ends = intervals.map((x) => x[1]!).sort((a, b) => a - b);
let i = 0, j = 0, cur = 0, peak = 0;
while (i < starts.length) {
if (starts[i]! < ends[j]!) {
cur++;
peak = Math.max(peak, cur);
i++;
} else {
cur--;
j++;
}
}
return peak;
}
Template connection
Intervals sweep / rooms.
Reflection
- A start is +1 and an end is −1. At the same time, processing the start before the end counts an extra room.
- The answer is the highest counter on the sweep. Three nested meetings need 3 rooms.
- An empty list is 0. Meetings that only touch share a room.