/*
有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。
一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。求为了成功举办这 n 个活动,最少需要多少名主持人。
大顶堆是priority_queue<int,vector<int>,greater<int>> pq;堆顶是最小值!!!堆顶为最大值greater改为less,如果是自定义的比较,参考下面代码;
定义:priority_queue<Type, Container, Functional>
Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆
sort排序 自定义cmp前需要加static
*/
static bool cmp(vector<int> &a,vector<int> &b)
{ if(a[0] == b[0]) {
return a[1] < b[1];
}
return a[0] < b[0];
}
int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) {
// write code here
sort(startEnd.begin(),startEnd.end(),
[](vector<int>& a,vector<int>& b){return a[0]==b[0]?a[1]<b[1]:a[0]<b[0];});
priority_queue<int, vector<int>, greater<int> >pq;///用来控制调度的结束时间
pq.push(startEnd[0][1]);
for(int i = 1;i < n;i ++){
///如果当前活动的开始时间比前一个任务的结束时间长,那么不需要添加新的主持人
if(startEnd[i][0] >= pq.top()) pq.pop();
///添加新活动的结束时间
pq.push(startEnd[i][1]);
}
return pq.size();
// sort(startEnd.begin(),startEnd.end(),cmp);
// int ans = 0;
// while(startEnd.size()) {
// int begin,end;
// ans++;
// begin = startEnd[0][0],end = startEnd[0][1];
// startEnd[0][1] = -1;
// for(int i = 1; i < startEnd.size(); i++) {
// if(startEnd[i][0] >= end ) {
// begin = startEnd[i][0];
// end = startEnd[i][1];
// startEnd[i][1] = -1;
// }
// }
// }
}
BM96 主持人调度(二)(需用到大顶堆的题目
最新推荐文章于 2024-08-16 18:32:56 发布