题解 | #主持人调度#

主持人调度

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

优先队列(小根堆):用于存储每个主持人主持的最后一场活动的结束时间,堆中元素个数就是主持人的个数

  1. 将所有区间先按照开始时间从小到大排序,对于开始时间相等的按照结束时间排序

  2. 遍历所有区间

    • 每次判断当前区间的开始时间是否大于堆顶的结束时间,如果大于等于,那么这场活动可以和堆顶这场活动使用同一个主持人,所以把堆顶弹出;否则如果小于,那么两场活动不能同时主持,还需要一个主持人
    • 将当前区间的结束时间入堆
  3. 最后堆中元素个数就是需要的主持人个数。

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) {
        sort(startEnd.begin(), startEnd.end(), [](vector<int>& s1, vector<int>& s2){
            if (s1[0] == s2[0]) return s1[1] < s2[1];
            return s1[0] < s2[0];
        });
        
        priority_queue<int, vector<int>, greater<int>> heap;
        for (auto item : startEnd) {
            if (heap.size() && heap.top() <= item[0]) {
                heap.pop();
            }
            heap.push(item[1]);
        }
        
        return heap.size();
    }
};
全部评论

相关推荐

冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务