C ++会议室II

假设有一系列会议时间间隔。有两个开始时间和结束时间[[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