【错题集-编程题】主持人调度(二)(贪心 + 优先级队列)

简介: 【错题集-编程题】主持人调度(二)(贪心 + 优先级队列)

f47889f806c04e128e51ba36c038f42a.png

一、分析题目

把区间按照左端点排序,然后搞个堆:

  1. 先把第⼀个区间的右端点加⼊到堆中。
  2. 遍历后⾯的区间,分情况讨论:(1)如果左端点大于等于堆顶元素,能接在后面,干掉堆顶,然后把这个区间的右端点加⼊堆。(2)否则,只能再来⼀个人,只把这个区间的右端点加⼊堆。
  3. 最后堆的大小就是需要的⼈数

二、代码

//O(NlogN)
class Solution
{
public:
    int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) 
    {
        sort(startEnd.begin(), startEnd.end());
        priority_queue<int, vector<int>, greater<int>> heap; // 创建⼀个⼩根堆
        heap.push(startEnd[0][1]); // 先把第⼀个区间放进去
 
        for(int i = 1; i < n; i++) // 处理剩下的区间
        {
            int a = startEnd[i][0], b = startEnd[i][1];
            if(a >= heap.top()) // 没有重叠
            {
                heap.pop();
                heap.push(b);
            }
            else // 有重叠
            {
                heap.push(b); // 重新安排⼀个⼈
            }
        }
        return heap.size();
    }
};

三、反思与改进

对优先级队列掌握的还不够熟悉,导致想不起可以用这个容器来解决问题。因为主持人可以主持多场活动,所以不能直接遍历比较。


相关文章
|
10月前
|
算法 测试技术 C#
【贪心算法】LeetCode2071:你可以安排的最多任务数目
【贪心算法】LeetCode2071:你可以安排的最多任务数目
|
1月前
|
数据采集 Java Linux
面试大神教你:如何巧妙回答线程优先级这个经典考题?
大家好,我是小米。本文通过故事讲解Java面试中常见的线程优先级问题。小明和小华的故事帮助理解线程优先级:高优先级线程更可能被调度执行,但并非越高越好。实际开发需权衡业务需求,合理设置优先级。掌握线程优先级不仅能写出高效代码,还能在面试中脱颖而出。最后,小张因深入分析成功拿下Offer。希望这篇文章能助你在面试中游刃有余!
45 4
面试大神教你:如何巧妙回答线程优先级这个经典考题?
|
10月前
|
调度
【错题集-编程题】主持人调度(一)(排序)
【错题集-编程题】主持人调度(一)(排序)
|
10月前
【错题集-编程题】活动安排(贪心 - 区间)
【错题集-编程题】活动安排(贪心 - 区间)
|
10月前
|
算法 测试技术 C#
【图论】【基环内向树】【广度优先】【深度优先】2127. 参加会议的最多员工数
【图论】【基环内向树】【广度优先】【深度优先】2127. 参加会议的最多员工数
|
10月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 数列排序(四种语言对照)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 数列排序(四种语言对照)
67 0
|
10月前
|
算法 测试技术 C#
C++动态规划算法:最多可以参加的会议数目
C++动态规划算法:最多可以参加的会议数目
|
算法 网络架构
代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
73 0
|
前端开发
前端学习案例2-寻找节点德后继2
前端学习案例2-寻找节点德后继2
53 0
前端学习案例2-寻找节点德后继2
|
前端开发
前端学习案例1-寻找节点德后继1
前端学习案例1-寻找节点德后继1
71 0
前端学习案例1-寻找节点德后继1