//学习代码尝试进一步理解

class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算成功举办活动需要多少名主持人
* @param n int整型 有n个活动
* @param startEnd int整型vector<vector<>> startEnd[i][0]用于表示第i个活动的开始时间,startEnd[i][1]表示第i个活动的结束时间
* @return int整型
*/
int minmumNumberOfHost(int n, vector<vector<int> >& startEnd)//二维可变长数组,&表示需要修改 {
// write code here
if(n==0) return 0;
sort(startEnd.begin(),startEnd.end(),[](const auto &u,const auto &v){//有限比较0号的开始时间,其次在开始时间相同时比较结束时间
if(u[0]!=v[0])
return u[0]<v[0];
else
return u[1]<v[1];
});//排序后前面的开始时间更早
priority_queue<int,vector<int>,greater<int> > q;//优先队列,从小到大,键int,值vector<int>
q.push(INT_MIN);//队列开始使用都是push,一般在循环外
for(int i = 0;i<n;i++){//O(n)
if(startEnd[i][0] >=q.top()){//比队列中结束时间还晚开始的
q.pop();//出队,因为这个主持也可以参加
}
q.push(startEnd[i][1]);//更早开始的结束时间进队,因为无法分身参加这个活动
}
return q.size();
}
};//知识点:1.sort()中比较器格式[](const auto &a,const auto &b){}
//2.优先队列priority_queue<int,vector<int>,greater<int>>双参数,greater<int>代表从小到大
3.队列使用总是先进队一个初始值,进队结束时间,如果下一个开始时间还比它晚,这个主持人可以再用,否则要多一个人,这样队列大小就是所求</int></int></int></int></int></int></int>