主持人调度

描述

有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。

一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。求为了成功举办这 n 个活动,最少需要多少名主持人。

题目链接

解题代码

https://uploadfiles.nowcoder.com/images/20210724/714760595_1627110997849/7269932FDD7F8BA760B50D8A119A60C0

问题类比于:同一时间最多重叠区间个数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算成功举办活动需要多少名主持人
     * @param n int整型 有n个活动
     * @param startEnd int整型vector<vector<>> startEnd[i][0]用于表示第i个活动的开始时间,startEnd[i][1]表示第i个活动的结束时间
     * @return int整型
     */
    static bool cmp(vector< int> const & x,  vector<int> const &y) {
        if(x[0]==y[0]) return x[1]<y[1];
        return x[0] < y[0];
    }
    int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) {
        // write code here
        sort(startEnd.begin(),startEnd.end(),cmp);
        priority_queue<int,vector<int>,greater<int> > last;
        //last.push(-1);
        for(int i=0;i<n;++i) {
            //假设 两个主持人同时结束,只能有1个去 主持,另一个等下一个活动
             if(last.size()&& last.top() <= startEnd[i][0] ) last.pop();
             last.push(startEnd[i][1]);
        }
        return last.size();
    }
};