假设有一系列会议时间间隔。有两个开始时间和结束时间[[s1,e1],[s2,e2],...],每对都满足规则(si <ei),我们必须找到所需的最小会议室数目。
因此,如果输入类似于[[0,30],[5,10],[15,20]],则输出将为2。
为了解决这个问题,我们将遵循以下步骤-
定义一个优先级队列pq
对时间间隔数组进行排序
ret:= 0
对于初始化i:= 0,当i <间隔大小时,更新(将i增加1),执行-
从pq中删除元素
while(不是pq为空,且pq的顶部元素<= interval [i,0]),请执行-
在pq中插入interval [i]
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