C++ 会议室 II
c++server side programmingprogramming
假设有一个会议时间间隔数组。有两个时间开始和结束时间 [[s1,e1],[s2,e2],...],每对时间都满足规则 (si < ei)。我们需要找出所需的最少会议室数量。
因此,如果输入为 [[0, 30], [5, 10], [15, 20]],则输出为 2。
为了解决这个问题,我们将遵循以下步骤 −
定义一个优先级队列 pq
对间隔数组进行排序
ret := 0
初始化 i := 0,当 i < 间隔的大小,更新(将 i 加 1),执行 −
while (not pq 为空且 pq 的栈顶元素 <= intervals[i, 0]),执行 −
从 pq 中删除元素
将 intervals[i] 插入 pq
ret := ret 的最大值和 pq 的大小
返回 ret
示例
让我们看下面的实现,以便更好地理解 −
#include <bits/stdc++.h> using namespace std; struct Comparator{ bool operator()(vector <int<& a, vector <int<& b){ return !(a[1] < b[1]); } }; class Solution { public: static bool cmp(vector <int< a, vector <int< b){ return (a[1] < b[1]); } int minMeetingRooms(vector<vector<int<>& intervals) { priority_queue<vector<int<, vector<vector<int< >, Comparator> pq; sort(intervals.begin(), intervals.end()); int ret = 0; for (int i = 0; i < intervals.size(); i++) { while (!pq.empty() && pq.top()[1] <= intervals[i][0]) pq.pop(); pq.push(intervals[i]); ret = max(ret, (int)pq.size()); } return ret; } }; main(){ vector<vector<int<> v = {{0, 30}, {5, 10}, {15, 20}}; Solution ob; cout << (ob.minMeetingRooms(v)); }
输入
{{0, 30}, {5, 10}, {15, 20}}
输出
2