描述
有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。
一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。求为了成功举办这 n 个活动,最少需要多少名主持人。
数据范围: 1≤n≤1051≤n≤105 , −232≤starti≤endi≤231−1−232≤starti≤endi≤231−1
复杂度要求:时间复杂度 O(nlogn)O(nlogn) ,空间复杂度 O(n)O(n)
示例1
输入:
2,[[1,2],[2,3]]
返回值:
1
说明:
只需要一个主持人就能成功举办这两个活动
class Solution {
public:
int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) {
// write code here
//这里传入的是startEnd.begin(),传入的是vector<int>类型,所以后面可以这么判断
sort(startEnd.begin(), startEnd.end(), [](auto &x, auto &y) {
if(x[0] == y[0]) return x[1] < y[1];
return x[0] < y[0];
});
priority_queue <int, vector <int>, greater<int> > ss;
for(auto &c : startEnd) {
if(!ss.empty() && c[0] >= ss.top()) ss.pop();
ss.push(c[1]);
}
return ss.size();
}
};
//priority_queue---优先队列,默认大堆,小堆要加greater<队列类型>参数,
总结:学会优先队列,底层是堆结构。