题意:有n个活动,每个活动都有开始时间和结束时间,且都需要一个主持人来主持。每个主持人同一时间只能主持一个活动,问最少需要多少主持人才能把所有活动圆满举办。
题解:这个解法算是比较好理解的做法了,但理解起来还是有点麻烦。
- class Solution {
- public:
- int minmumNumberOfHost(int n, vector
int > >& startEnd) { - sort(startEnd.begin(), startEnd.end(), [](const vector<int> &s1, const vector<int> &s2){
- if(s1[0] != s2[0]) return s1[0] < s2[0];
- else return s1[1] < s2[1];
- });//活动时间排序
- priority_queue<int, vector<int>, greater<int> > que;//小根堆,存入正在举行活动的结束时间
- que.push(INT_MAX);//先存入最大值,保证第一个活动进来时需要新增一个主持人
- int num = 0;
- for(auto S : startEnd) {//遍历各个活动
- if(S[0] >= que.top()) {//比较
- que.pop();
- } else {
- num++;
- }
- que.push(S[1]);
- }
- return num;
- }
- };