news 2026/5/16 1:52:05

千问 LeetCode 2402.会议室 III public int mostBooked(int n, int[][] meetings)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
千问 LeetCode 2402.会议室 III public int mostBooked(int n, int[][] meetings)

这道题是经典的会议室 III,核心是双堆模拟,一个堆管空闲会议室(按编号排序),一个堆管正在使用的会议室(按结束时间排序)。

解题思路

1. 排序:按会议开始时间升序排列。
2. 双堆初始化:
- free:小根堆,存空闲会议室编号(0 ~ n-1)。
- busy:小根堆,存 [结束时间, 会议室编号],按结束时间排序,相同时按编号排序。
3. 遍历会议:
- 先把 busy 中所有结束时间 ≤ 当前会议开始时间的会议室释放回 free。
- 如果 free 不为空 → 取编号最小的空闲会议室。
- 如果 free 为空 → 从 busy 中弹出最早结束的会议室(会议延期),结束时间 = 该会议室的空闲时间 + 当前会议时长。
4. 计数:每次分配会议室时,对应计数 +1。
5. 结果:遍历计数数组,返回举办会议次数最多且编号最小的会议室。

Java 代码实现

import java.util.*;

class Solution {
public int mostBooked(int n, int[][] meetings) {
// 1. 按开始时间排序
Arrays.sort(meetings, (a, b) -> a[0] - b[0]);

// 2. 空闲会议室堆(按编号)
PriorityQueue<Integer> free = new PriorityQueue<>();
for (int i = 0; i < n; i++) free.offer(i);

// 3. 忙碌会议室堆(按结束时间,相同时按编号)
PriorityQueue<long[]> busy = new PriorityQueue<>(
(a, b) -> a[0] != b[0] ? Long.compare(a[0], b[0]) : Long.compare(a[1], b[1])
);

int[] count = new int[n];

// 4. 模拟
for (int[] meeting : meetings) {
long start = meeting[0];
long end = meeting[1];
long duration = end - start;

// 释放已结束的会议室
while (!busy.isEmpty() && busy.peek()[0] <= start) {
free.offer((int) busy.poll()[1]);
}

int room;
if (!free.isEmpty()) {
// 有空闲会议室 → 取编号最小的
room = free.poll();
busy.offer(new long[]{end, room});
} else {
// 无空闲 → 取最早结束的会议室,延期
long[] earliest = busy.poll();
room = (int) earliest[1];
long newEnd = earliest[0] + duration;
busy.offer(new long[]{newEnd, room});
}
count[room]++;
}

// 5. 找结果
int maxCount = 0, ans = 0;
for (int i = 0; i < n; i++) {
if (count[i] > maxCount) {
maxCount = count[i];
ans = i;
}
}
return ans;
}
}

复杂度分析
维度 值
时间复杂度 O(m log m + m log n) —— 排序 O(m log m),每次堆操作 O(log n)
空间复杂度 O(n + m) —— 两个堆 + 计数数组 + 排序后的会议数组

关键点总结

- 双堆分工明确:free 管编号优先级,busy 管时间优先级。
- 释放逻辑:在每场会议开始前,先释放所有已结束的会议室,保证 free 中的会议室都是真正可用的。
- 延期处理:没有空闲时,直接从 busy 取最早结束的会议室,结束时间 = 原结束时间 + 当前会议时长。
- 注意数据类型:结束时间可能很大,用 long 避免溢出。

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

前端带uniapp熊猫电竞赏金电竞系统源码

前端带uniapp熊猫电竞赏金电竞系统源码 搭建教程&#xff1a; 修改后端和前端的api接口换成你的域名即可&#xff01; 源码下载&#xff1a; https://download.csdn.net/download/m0_61505785/92872704?spm1001.2014.3001.5503 更多同类源码分享&#xff0c;欢迎关注。

作者头像 李华
网站建设 2026/5/16 1:43:13

降AI率要花几百元吗?实测降AI率软件的效果,一键去除AI痕迹!

知网是国内高校 AIGC 检测覆盖面最广的平台。99% 的毕业论文要过知网这一关&#xff0c;所以"降知网 AI 率"成了 2026 毕业季最大的需求市场。市场大了套路就多。这篇文章把降知网赛道最常见的 5 大套路盘点清楚&#xff0c;到底什么样的降AI率技巧有用&#xff0c;到…

作者头像 李华
网站建设 2026/5/16 1:37:20

OBS高级计时器:终极免费工具,让直播时间管理变得简单高效

OBS高级计时器&#xff1a;终极免费工具&#xff0c;让直播时间管理变得简单高效 【免费下载链接】obs-advanced-timer 项目地址: https://gitcode.com/gh_mirrors/ob/obs-advanced-timer 你是否在直播或录制视频时&#xff0c;总是为时间管理而烦恼&#xff1f;手动计…

作者头像 李华
网站建设 2026/5/16 1:37:15

中文开发者规范工具包:从代码规范到工程化实践

1. 项目概述&#xff1a;一个为中文开发者设计的规范工具包最近在整理团队内部的技术文档和代码规范时&#xff0c;我一直在寻找一个能统一标准、提升协作效率的工具集。市面上优秀的规范工具不少&#xff0c;但要么是英文主导&#xff0c;对中文团队不够友好&#xff1b;要么就…

作者头像 李华
网站建设 2026/5/16 1:34:28

8051 单片机开发环境搭建:从 Keil 到第一个点亮 LED 程序

引言欢迎来到 8051 单片机开发世界&#xff01;本教程将带你从零开始&#xff0c;搭建完整的开发环境&#xff0c;并编写第一个点亮 LED 的程序。无论你是电子爱好者、嵌入式初学者&#xff0c;还是想重温经典的 8051 架构&#xff0c;这里都是最佳起点。学习目标完成本教程后&…

作者头像 李华