Bird
0
0
DSA Cprogramming~20 mins

Meeting Rooms Problem Minimum Rooms Required in DSA C - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Meeting Rooms Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of minimum meeting rooms required for given intervals
What is the output of the following C code that calculates the minimum number of meeting rooms required for the given intervals?
DSA C
#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int minMeetingRooms(int** intervals, int intervalsSize, int* intervalsColSize) {
    int* start = (int*)malloc(intervalsSize * sizeof(int));
    int* end = (int*)malloc(intervalsSize * sizeof(int));
    for (int i = 0; i < intervalsSize; i++) {
        start[i] = intervals[i][0];
        end[i] = intervals[i][1];
    }
    qsort(start, intervalsSize, sizeof(int), compare);
    qsort(end, intervalsSize, sizeof(int), compare);

    int rooms = 0, endPtr = 0;
    for (int i = 0; i < intervalsSize; i++) {
        if (start[i] < end[endPtr]) {
            rooms++;
        } else {
            endPtr++;
        }
    }
    free(start);
    free(end);
    return rooms;
}

int main() {
    int interval1[] = {0, 30};
    int interval2[] = {5, 10};
    int interval3[] = {15, 20};
    int* intervals[] = {interval1, interval2, interval3};
    int intervalsColSize[] = {2, 2, 2};
    int result = minMeetingRooms(intervals, 3, intervalsColSize);
    printf("%d\n", result);
    return 0;
}
A2
B3
C1
D0
Attempts:
2 left
💡 Hint
Think about how many meetings overlap at the same time.
Predict Output
intermediate
2:00remaining
Minimum rooms required for non-overlapping intervals
What is the output of the following code when intervals do not overlap?
DSA C
#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int minMeetingRooms(int** intervals, int intervalsSize, int* intervalsColSize) {
    int* start = (int*)malloc(intervalsSize * sizeof(int));
    int* end = (int*)malloc(intervalsSize * sizeof(int));
    for (int i = 0; i < intervalsSize; i++) {
        start[i] = intervals[i][0];
        end[i] = intervals[i][1];
    }
    qsort(start, intervalsSize, sizeof(int), compare);
    qsort(end, intervalsSize, sizeof(int), compare);

    int rooms = 0, endPtr = 0;
    for (int i = 0; i < intervalsSize; i++) {
        if (start[i] < end[endPtr]) {
            rooms++;
        } else {
            endPtr++;
        }
    }
    free(start);
    free(end);
    return rooms;
}

int main() {
    int interval1[] = {1, 2};
    int interval2[] = {3, 4};
    int interval3[] = {5, 6};
    int* intervals[] = {interval1, interval2, interval3};
    int intervalsColSize[] = {2, 2, 2};
    int result = minMeetingRooms(intervals, 3, intervalsColSize);
    printf("%d\n", result);
    return 0;
}
A3
B0
C1
D2
Attempts:
2 left
💡 Hint
No meetings overlap, so only one room is needed.
🔧 Debug
advanced
2:00remaining
Identify the error in the meeting rooms code
What error will this code produce when run, and why?
DSA C
#include <stdio.h>
#include <stdlib.h>

int minMeetingRooms(int** intervals, int intervalsSize) {
    int* start = (int*)malloc(intervalsSize * sizeof(int));
    int* end = (int*)malloc(intervalsSize * sizeof(int));
    for (int i = 0; i < intervalsSize; i++) {
        start[i] = intervals[i][0];
        end[i] = intervals[i][1];
    }
    qsort(start, intervalsSize, sizeof(int), (int(*)(const void*, const void*))strcmp);
    qsort(end, intervalsSize, sizeof(int), (int(*)(const void*, const void*))strcmp);

    int rooms = 0, endPtr = 0;
    for (int i = 0; i < intervalsSize; i++) {
        if (start[i] < end[endPtr]) {
            rooms++;
        } else {
            endPtr++;
        }
    }
    free(start);
    free(end);
    return rooms;
}

int main() {
    int interval1[] = {0, 30};
    int interval2[] = {5, 10};
    int interval3[] = {15, 20};
    int* intervals[] = {interval1, interval2, interval3};
    int result = minMeetingRooms(intervals, 3);
    printf("%d\n", result);
    return 0;
}
ARuntime error due to invalid comparison function in qsort
BCompilation error due to missing intervalsColSize parameter
COutput is 2 as expected
DMemory leak error due to missing free calls
Attempts:
2 left
💡 Hint
Check the comparison function used in qsort.
🧠 Conceptual
advanced
1:30remaining
Understanding the logic behind minimum meeting rooms calculation
Why does sorting start and end times separately help in calculating the minimum number of meeting rooms required?
AIt helps to merge intervals to reduce the number of rooms needed.
BIt sorts the meetings by duration to allocate rooms accordingly.
CIt groups meetings by their start times to assign rooms in batches.
DIt allows us to track when meetings start and end independently to find overlaps efficiently.
Attempts:
2 left
💡 Hint
Think about how overlaps are detected by comparing start and end times.
🚀 Application
expert
3:00remaining
Calculate minimum meeting rooms for complex intervals
Given the intervals below, what is the minimum number of meeting rooms required?
DSA C
Intervals: [[1, 10], [2, 7], [3, 19], [8, 12], [10, 20], [11, 30]]
A5
B4
C3
D6
Attempts:
2 left
💡 Hint
Count the maximum number of overlapping intervals at any time.