253. 会议室 II(贪心加priority queue)

Given an array of meeting time intervals consisting of start and
 end times [[s1,e1],[s2,e2],...] (si < ei), find the minimum 
 number of conference rooms required.
For example,
Given [[0, 30],[5, 10],[15, 20]],
return 2.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只需要用三个房间
只需要检查容器中最早结束的时间,如果新的会议<最早结束的时间,那么需要增加新的容器。
如何早到容器中最早结束的时间(最小的)?使用最小堆。最小堆中只需要存结束时间
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
struct Interval{
    int start;
    int end;
    Interval():start(0),end(0) {}
    Interval(int s,int e):start(s),end(e){}
};
 class Solution{
     public:
        int minMeetingRooms(vector<Interval>&intervals){
            sort(intervals.begin(),intervals.end(),[](const Interval &l,Interval & r){ return l.start<r.start;});
            priority_queue<int,vector<int>,greater<int>>q;
            q.push(intervals[0].end);
            for(int i=1;i<intervals.size();i++){
                if(intervals[i].start>=q.top()){
                    q.pop();
                    q.push(intervals[i].end);//extend 最早结束会议的时间为当前时间的结束时间。即用这个最早结束会议的会议室
                }
                else 
                    q.push(intervals[i].end);
            }
            return q.size();
        }
        private :
        static bool cmpIntervals(const Interval & l,const Interval & r){
            if(l.start!=r.start)
                return l.start<r.start;
            else 
                return l.end<r.end;

        }
 };
 int main(){
     Interval  a,b,c,d;
     a=Interval(0,30);
     b=Interval(5,10);
     c=Interval(15,20);
    vector<Interval>intervals{a,b,c,d};
    cout<<Solution().minMeetingRooms(intervals);


     return 0;
 }

关于优先队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值