news 2026/4/23 18:53:23

LeetCode 2402.会议室 III:优先队列大模拟

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 2402.会议室 III:优先队列大模拟

【LetMeFly】2402.会议室 III:优先队列大模拟

力扣题目链接:https://leetcode.cn/problems/meeting-rooms-iii/

给你一个整数n,共有编号从0n - 1n个会议室。

给你一个二维整数数组meetings,其中meetings[i] = [starti, endi]表示一场会议将会在半闭时间区间[starti, endi)举办。所有starti的值互不相同

会议将会按以下方式分配给会议室:

  1. 每场会议都会在未占用且编号最小的会议室举办。
  2. 如果没有可用的会议室,会议将会延期,直到存在空闲的会议室。延期会议的持续时间和原会议持续时间相同
  3. 当会议室处于未占用状态时,将会优先提供给原开始时间更早的会议。

返回举办最多次会议的房间编号。如果存在多个房间满足此条件,则返回编号最小的房间。

半闭区间[a, b)ab之间的区间,包括a不包括b

示例 1:

输入:n = 2, meetings = [[0,10],[1,5],[2,7],[3,4]]输出:0解释:- 在时间 0 ,两个会议室都未占用,第一场会议在会议室 0 举办。 - 在时间 1 ,只有会议室 1 未占用,第二场会议在会议室 1 举办。 - 在时间 2 ,两个会议室都被占用,第三场会议延期举办。 - 在时间 3 ,两个会议室都被占用,第四场会议延期举办。 - 在时间 5 ,会议室 1 的会议结束。第三场会议在会议室 1 举办,时间周期为 [5,10) 。 - 在时间 10 ,两个会议室的会议都结束。第四场会议在会议室 0 举办,时间周期为 [10,11) 。 会议室 0 和会议室 1 都举办了 2 场会议,所以返回 0 。

示例 2:

输入:n = 3, meetings = [[1,20],[2,10],[3,5],[4,9],[6,8]]输出:1解释:- 在时间 1 ,所有三个会议室都未占用,第一场会议在会议室 0 举办。 - 在时间 2 ,会议室 1 和 2 未占用,第二场会议在会议室 1 举办。 - 在时间 3 ,只有会议室 2 未占用,第三场会议在会议室 2 举办。 - 在时间 4 ,所有三个会议室都被占用,第四场会议延期举办。 - 在时间 5 ,会议室 2 的会议结束。第四场会议在会议室 2 举办,时间周期为 [5,10) 。 - 在时间 6 ,所有三个会议室都被占用,第五场会议延期举办。 - 在时间 10 ,会议室 1 和 2 的会议结束。第五场会议在会议室 1 举办,时间周期为 [10,12) 。 会议室 1 和会议室 2 都举办了 2 场会议,所以返回 1 。

提示:

  • 1 <= n <= 100
  • 1 <= meetings.length <= 105
  • meetings[i].length == 2
  • 0 <= starti< endi<= 5 * 105
  • starti的所有值互不相同

解题方法:大模拟——两个优先队列

有没有发现这道题有严格的顺序优先级,使用优先队列再合适不过了。

先想想我们的策略,再思考具体怎么模拟:

遍历按开始时间递增的会议(因为开始时间早是安排会议的优先级依据),对于某个待安排的会议:

  1. 查看到会议开始时间为止有没有新释放的会议室

  2. 查看此刻有没有空的会议室

    1. 如果有,则使用编号最小的那个会议室
    2. 否则,等待到一个会议室释放为止并使用之(同一时间多会议室到期则优先释放编号较小的那个)

多清晰的流水线啊,只需要用代码将其表现出来就好了。

  1. 对于会议,只需要按照开始时间从小到大排个序,因为会议的安排顺序是严格按照开始时间安排的且开始时间互不相同。
  2. 对于会议室的使用(空闲会议室),优先使用编号最小的,所以可以使用一个优先队列来存放空闲会议室。
  3. 对于在使用的会议室,优先释放结束时间最早的那个,有释放时间相同则优先释放编号较小的那个,所以也可以使用一个优先队列来维护。

注意,10 5 10^51055 × 10 5 5\times10^55×105可能会超过int32

  • 时间复杂度O ( m log ⁡ m + n log ⁡ n + m log ⁡ n ) O(m\log m + n\log n + m\log n)O(mlogm+nlogn+mlogn),其中m = l e n ( m e e t i n g s ) m=len(meetings)m=len(meetings)m log ⁡ m m\log mmlogm来自会议的排序,n log ⁡ n n\log nnlogn来自n nn个会议室初始状态的入队,m log ⁡ n m\log nmlogn来自每个会议的会议室分配;
  • 空间复杂度O ( n ) O(n)O(n)

AC代码

C++
/* * @LastEditTime: 2025-12-27 23:36:34 */typedeflonglongll;// 10^5个5*10^5可能会超int32!classSolution{public:intmostBooked(intn,vector<vector<int>>&meetings){sort(meetings.begin(),meetings.end());priority_queue<int,vector<int>,greater<>>canuse;for(inti=0;i<n;i++){canuse.push(i);}priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<>>inuse;vector<int>times(n);for(vector<int>&meeting:meetings){// 先看有没有新释放的while(!inuse.empty()&&inuse.top().first<=meeting[0]){auto[_,thisRoom]=inuse.top();canuse.push(thisRoom);inuse.pop();}intthisRoom;ll endTime;// 看看有没有空的if(!canuse.empty()){thisRoom=canuse.top();endTime=meeting[1];canuse.pop();}else{// 等到第一个释放auto[freeTime,room]=inuse.top();thisRoom=room;endTime=freeTime+meeting[1]-meeting[0];inuse.pop();}times[thisRoom]++;inuse.push({endTime,thisRoom});}returnmax_element(times.begin(),times.end())-times.begin();}};#ifdefined(_WIN32)||defined(__APPLE__)/* 2 [[0,10],[1,5],[2,7],[3,4]] 0 */intmain(){intn;string s;while(cin>>n>>s){Solution sol;vector<vector<int>>v=stringToVectorVector(s);cout<<sol.mostBooked(n,v)<<endl;}return0;}#endif

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:26:58

智能家居天气集成终极指南:5步搞定Home Assistant天气插件配置

智能家居天气集成终极指南&#xff1a;5步搞定Home Assistant天气插件配置 【免费下载链接】qweather 和风天气 Home Assistant 插件 项目地址: https://gitcode.com/gh_mirrors/qw/qweather 您是否曾经遇到过这样的困扰&#xff1a;清晨起床时突然发现外面下着大雨&…

作者头像 李华
网站建设 2026/4/23 14:36:11

GmSSL国密算法实战指南:从入门到深度应用的7个关键步骤

在信息安全日益重要的今天&#xff0c;国产密码算法库GmSSL为开发者提供了完整的技术解决方案。本文将带你系统掌握GmSSL的核心应用技巧&#xff0c;构建安全可靠的国密应用系统。 【免费下载链接】GmSSL 支持国密SM2/SM3/SM4/SM9/SSL的密码工具箱 项目地址: https://gitcode…

作者头像 李华
网站建设 2026/4/23 16:10:50

医院导诊机器人:科室推荐+路线指引AI

医院导诊机器人&#xff1a;科室推荐与路线指引的AI实践 在大型三甲医院的门诊大厅里&#xff0c;一位中年患者站在导诊台前犹豫不决&#xff1a;“我最近总是头晕&#xff0c;还恶心&#xff0c;该挂哪个科&#xff1f;”这样的场景每天都在重复上演。面对复杂的科室划分和动辄…

作者头像 李华
网站建设 2026/4/23 14:47:18

B站缓存视频解锁指南:3步实现m4s到MP4的永久保存

你是否遇到过这样的情况&#xff1a;B站上精心收藏的视频突然下架&#xff0c;那些缓存文件在客户端里变得无法播放&#xff1f;别担心&#xff0c;今天我将为你展示如何用最简单的方法&#xff0c;让这些被"封印"的视频重获新生&#xff01; 【免费下载链接】m4s-co…

作者头像 李华
网站建设 2026/4/23 14:31:32

GmSSL终极指南:从零到精通的国密算法完整教程

在信息安全日益重要的今天&#xff0c;GmSSL作为一款全面支持国密SM2/SM3/SM4/SM9/SSL的开源密码工具箱&#xff0c;为开发者提供了构建安全通信系统的完整解决方案。本文将带你从基础部署到高级应用&#xff0c;全面掌握GmSSL的核心技术。 【免费下载链接】GmSSL 支持国密SM2/…

作者头像 李华
网站建设 2026/4/23 13:12:50

B站漫画下载器终极指南:打造个人数字漫画图书馆

B站漫画下载器终极指南&#xff1a;打造个人数字漫画图书馆 【免费下载链接】BiliBili-Manga-Downloader 一个好用的哔哩哔哩漫画下载器&#xff0c;拥有图形界面&#xff0c;支持关键词搜索漫画和二维码登入&#xff0c;黑科技下载未解锁章节&#xff0c;多线程下载&#xff0…

作者头像 李华