Meeting Rooms Problem Minimum Rooms Required in DSA C - Time & Space Complexity
We want to find out how the time needed grows when we find the minimum number of meeting rooms required for given meeting times.
How does the program's work increase as the number of meetings grows?
Analyze the time complexity of the following code snippet.
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int minMeetingRooms(int* startTimes, int* endTimes, int n) {
qsort(startTimes, n, sizeof(int), compare);
qsort(endTimes, n, sizeof(int), compare);
int rooms = 0, endPtr = 0;
for (int i = 0; i < n; i++) {
if (startTimes[i] < endTimes[endPtr]) {
rooms++;
} else {
endPtr++;
}
}
return rooms;
}
int main() {
int starts[] = {0, 5, 15};
int ends[] = {30, 10, 20};
int n = 3;
printf("Minimum rooms required: %d\n", minMeetingRooms(starts, ends, n));
return 0;
}
This code finds the minimum number of meeting rooms needed by sorting start and end times and then comparing them.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Sorting the start and end time arrays.
- How many times: Each sorting runs once on n elements, and then a single loop runs n times to count rooms.
Sorting takes more time as the number of meetings grows, and the loop grows linearly with the number of meetings.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 * log 10 + 10 = 43 operations |
| 100 | About 100 * log 100 + 100 = 700 operations |
| 1000 | About 1000 * log 1000 + 1000 = 10,000 operations |
Pattern observation: The work grows a bit faster than the number of meetings because of sorting, but the counting loop grows directly with the number of meetings.
Time Complexity: O(n log n)
This means the time needed grows a little faster than the number of meetings because sorting takes more time as the list grows.
[X] Wrong: "The time complexity is just O(n) because we only loop once through the meetings."
[OK] Correct: Sorting the start and end times takes more time than just looping, so the sorting step dominates the total time.
Understanding how sorting and simple loops combine to affect time helps you explain your solution clearly and shows you know how to analyze real problems.
"What if the meeting times were already sorted? How would the time complexity change?"
Practice
Solution
Step 1: Understand the problem goal
The problem asks for the minimum number of rooms needed so that no two meetings overlap in the same room.Step 2: Clarify what is asked
We want to find how many rooms are needed to schedule all meetings without time conflicts.Final Answer:
The minimum number of meeting rooms needed to hold all meetings without overlap -> Option AQuick Check:
Minimum rooms = no overlapping meetings at the same time [OK]
- Confusing total meetings with rooms needed
- Thinking about meeting durations instead of overlaps
- Ignoring overlapping intervals
Solution
Step 1: Check array dimensions and initialization
We need a 2D array with 3 intervals, each having 2 values (start and end).Step 2: Validate each option
int intervals[3][2] = {{0, 30}, {5, 10}, {15, 20}}; correctly declares int intervals[3][2] with proper nested braces for each interval.Final Answer:
int intervals[3][2] = {{0, 30}, {5, 10}, {15, 20}}; -> Option DQuick Check:
Correct 2D array syntax for intervals [OK]
- Using 1D array for 2D interval data
- Incorrect brace nesting in initialization
- Swapping rows and columns in declaration
int intervals[3][2] = {{0, 30}, {5, 10}, {15, 20}};
// Assume a function minMeetingRooms(intervals, 3) returns minimum rooms needed
int rooms = minMeetingRooms(intervals, 3);
printf("%d\n", rooms);
Assuming minMeetingRooms correctly implements the meeting rooms logic, what is printed?Solution
Step 1: Analyze meeting intervals for overlaps
Intervals: [0,30], [5,10], [15,20]. The first and second overlap (5 < 30), so need at least 2 rooms.Step 2: Check if any three overlap simultaneously
Third interval [15,20] overlaps with first [0,30], but second ends at 10, so max overlap is 2 meetings at once.Final Answer:
2 -> Option CQuick Check:
Max overlapping meetings = 2 [OK]
- Assuming all meetings overlap simultaneously
- Counting total meetings instead of overlaps
- Ignoring partial overlaps
int minMeetingRooms(int intervals[][2], int n) {
int rooms = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (intervals[i][0] < intervals[j][1] && intervals[j][0] < intervals[i][1]) {
rooms++;
}
}
}
return rooms;
}Solution
Step 1: Understand the nested loops and condition
The code counts each overlapping pair by checking if intervals overlap and increments rooms.Step 2: Identify why counting pairs is incorrect
Counting pairs does not give the minimum rooms needed; we need the maximum number of simultaneous overlaps.Final Answer:
It counts overlapping pairs but does not track maximum overlaps for rooms -> Option AQuick Check:
Counting pairs ≠ max simultaneous overlaps [OK]
- Confusing pair counts with room count
- Not sorting intervals before processing
- Ignoring simultaneous overlaps
[[1, 4], [2, 5], [7, 9], [3, 6], [10, 11]]. Using the minimum rooms required approach, what is the minimum number of meeting rooms needed?Solution
Step 1: Sort intervals by start time
Sorted intervals: [1,4], [2,5], [3,6], [7,9], [10,11]Step 2: Find maximum overlapping meetings
Between 1-6, three meetings overlap: [1,4], [2,5], [3,6]. After 6, meetings do not overlap.Final Answer:
3 -> Option BQuick Check:
Max overlaps = 3 rooms needed [OK]
- Not sorting intervals before counting
- Counting total meetings instead of overlaps
- Missing overlapping intervals in middle
Ready to prove it?
Pass the test and this pattern moves unknown
