题解 | #主持人调度(二)#

主持人调度(二)

https://www.nowcoder.com/practice/4edf6e6d01554870a12f218c94e8a299

#include <queue>
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) {
        if (n == 1) return n;
        sort(startEnd.begin(),startEnd.end(), compare);
        //定义一个小顶堆来存储最快的活动结束时间
        priority_queue<int, vector<int>, greater<int>> minEndMap;

        int minHost = 0;
        int currentHostIndex = 0;
        for (const vector<int>& activity : startEnd){
            int start = activity[0];
            int end = activity[1];

            while (!minEndMap.empty() && start >= minEndMap.top()){
                //假如小顶堆有值并且当前最早结束的时间小于当前活动开始的时间
                //意味着上一个活动结束,当前活动可以开始了
                minEndMap.pop();
                //释放一个主持人
                currentHostIndex--;
            }

            minEndMap.push(end);
            currentHostIndex++;

            minHost = max(currentHostIndex, minHost);
        }

        return minHost;
    }

    static bool compare(const vector<int>& a, const vector<int>& b){
        return a[0] < b[0];
    }
};

全部评论

相关推荐

OPSL:钱确实给的多,但是追责这一点比较迷惑…3个月具体如何计算呢?出勤天数30*3吗?还是21*3呢?万一中间学校有安排怎么办呢?这个得多问一问呀
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务