253. 会议室 II

描述

给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],...] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。

示例 1:
输入: [[0, 30],[5, 10],[15, 20]]
输出: 2

示例 2:
输入: [[7,10],[2,4]]
输出: 1

思路

  • 方法1:优先队列--最小堆
    1.按照会议开始时间进行排序;
    2.遍历会议建立会议结束时间的最小堆,如果当前会议开始时间大于堆顶会议结束时间,则将堆顶会议去除,更新当前会议;
class Solution {
public:
    static bool cmp(vector<int> a, vector<int> b){
        return a[0]<b[0];
    }
    int minMeetingRooms(vector<vector<int>>& intervals) {
        sort(intervals.begin(),intervals.end(),cmp);
        priority_queue<int, vector<int>, greater<int>> heap;
        for(auto iter:intervals){
            if(!heap.empty()&&heap.top()<=iter[0]){
                heap.pop();
            }
            heap.push(iter[1]);
        }
        return heap.size();
    }
};

猜你喜欢

转载自www.cnblogs.com/hunter-w/p/12681171.html