Meeting Rooms II

// https://leetcode.com/problems/meeting-rooms-ii/

/*
Given an array of meeting time intervals intervals where intervals[i] = [starti, endi], 
return the minimum number of conference rooms required.

Ex1:
Input: intervals = [[0,30],[5,10],[15,20]]
Output: 2

Ex2:
Input: intervals = [[7,10],[2,4]]
Output: 1

*/

// [[1, 13], [13, 15]]
#include <vector>
#include <iostream>

using namespace std;

// Time: O(nlogn), Space: O(n)
int minMeetingRooms(vector<vector<int>>& intervals) {
    if (intervals.empty()) {
        return 0;
    }

    vector<vector<int>> points;
    int n = intervals.size();
    for (int i = 0; i < n; i++) {
        points.push_back({intervals[i][0], 1});
        points.push_back({intervals[i][1], -1});
    }

    auto cmp = [](vector<int>& v1, vector<int>& v2) {
        if (v1[0] == v2[0]) {
            return v1[1] < v2[1];
        }
        return v1[0] < v2[0];
    };

    sort(points.begin(), points.end(), cmp);

    int occupiedRoom = 0;
    int res = 0;
    for (int i = 0; i < points.size(); i++) {
        occupiedRoom += points[i][1];
        res = max(res, occupiedRoom);
    }

    return res;
}

int main() {
    vector<vector<int>> intervals1 {{0, 30}, {5, 10}, {15, 20}};
    cout << minMeetingRooms(intervals1) << endl;

    vector<vector<int>> intervals2{ {7, 10}, {2, 4}};
    cout << minMeetingRooms(intervals2) << endl;

    return 0;
}```

Last updated