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;
}