Leetcode 253. 会议室 II

文章目录

  • 问题描述
  • 解题报告
  • 实现代码

问题描述

给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [ [ s 1 , e 1 ] , [ s 2 , e 2 ] ⋯   ] ( s i < e i ) [[s1,e1],[s2,e2]\cdots](s_i [[s1,e1],[s2,e2]](si<ei) ,为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排
输 入 : [ [ 0 , 30 ] , [ 5 , 10 ] , [ 15 , 20 ] ] 输入:[[0, 30],[5, 10],[15, 20]] [[0,30],[5,10],[15,20]]
输 出 : 2 输出:2 2

解题报告

当一个会议室使用结束后,可以用于其他会议。
建一个最小堆,堆中保存每个会议的结束时间,每次从堆中取出一个元素:

  • 当该元素小于当前会议的起始时间时,表示目前有一个空会议室。将堆中元素弹出,并将当前会议的结束时间压入。
  • 当该元素大于当前会议的起始时间时,表示最早结束的会议室目前都不是空的,所以需要重新启用一个会议室。

最后看堆中有几个元素,则表示需要多少个会议室。

实现代码

class Solution {
     
public:
    int minMeetingRooms(vector<vector<int>>& intervals) {
     
        sort(intervals.begin(),intervals.end());
        priority_queue<int, vector<int>, greater<int>> pq;
        int s,e;
        for(int i=0;i<intervals.size();i++){
     
            s=intervals[i][0];
            e=intervals[i][1];
            if(pq.size()==0){
     
                pq.push(e);
                continue;
            }
            if(pq.top()<=s){
     
                pq.pop();
            }
             pq.push(e);
        }
        return pq.size();
    }
};

你可能感兴趣的:(leetcode,数据结构,区间交集)