C++ 中的会议室 II


假设有一个会议时间间隔数组。有两个起始和结束时间 [[s1,e1],[s2,e2],...],并且每对都满足规则 (si < ei),我们必须找到所需的最小会议室数量。

因此,如果输入如下 [[0, 30], [5, 10], [15, 20]],则输出将为 2。

要解决这个问题,我们将按照以下步骤进行 −

  • 定义一个优先级队列 pq

  • 对 intervals 数组进行排序

  • ret := 0

  • 对初始化 i := 0,当 i < intervals 的大小,更新 (i 增加 1),执行 −

    • while (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

更新时间:18-11-2020

903 次查看

开启你的 职业生涯

完成课程获取证书

开始
广告