LeetCode 3885.设计事件管理器
给你一组初始事件列表其中每个事件有一个唯一的 eventId 和一个 priority优先级。实现 EventManager 类EventManager(int[][] events) 使用给定事件初始化管理器其中 events[i] [eventIdi, priorityi]。void updatePriority(int eventId, int newPriority) 更新具有 id 为 eventId 的 活跃 事件的优先级为 newPriority。int pollHighest() 移除并返回具有 最高优先级 的 活跃事件 的 eventId。如果有多个活动事件具有相同的优先级则返回 eventId 最小的事件。如果没有活跃事件则返回 -1。如果一个事件没有被 pollHighest() 移除则称其为 活跃事件。示例 1输入[“EventManager”, “pollHighest”, “updatePriority”, “pollHighest”, “pollHighest”][[[[5, 7], [2, 7], [9, 4]]], [], [9, 7], [], []]输出[null, 2, null, 5, 9]解释EventManager eventManager new EventManager([[5,7], [2,7], [9,4]]); // 使用三个事件初始化管理器eventManager.pollHighest(); // 两个事件 5 和 2 的优先级均为 7因此返回 id 最小的事件 2eventManager.updatePriority(9, 7); // 将事件 9 的优先级更新为 7eventManager.pollHighest(); // 剩下的优先级最高的事件是 5 和 9返回 5eventManager.pollHighest(); // 返回 9示例 2输入[“EventManager”, “pollHighest”, “pollHighest”, “pollHighest”][[[[4, 1], [7, 2]]], [], [], []]输出[null, 7, 4, -1]解释EventManager eventManager new EventManager([[4,1], [7,2]]); // 使用两个事件初始化管理器eventManager.pollHighest(); // 返回 7eventManager.pollHighest(); // 返回 4eventManager.pollHighest(); // 没有剩余事件返回 -1提示1 events.length 105^55events[i] [eventId, priority]1 eventId 109^991 priority 109^99events 中的所有 eventId 值都是 唯一的 。1 newPriority 109^99对每次调用 updatePriorityeventId 都指向一个 活跃事件。对 updatePriority 和 pollHighest 的总调用次数最多为 105^55次。懒删除堆我们可以维护一个优先级和事件id的最大堆以及一个事件Id到优先级的哈希表。每次updatePriority时先修改哈希表然后不删除堆中当前事件id的优先级而是插入一个新的正确节点进堆每次pollHighest时检查当前堆顶事件id的优先级是否是哈希表中存放的优先级如果是就找到了优先级最高的事件否则堆顶就是失效的事件classEventManager{public:EventManager(vectorvectorintevents){for(vectorintevent:events){eventToPriority[event[0]]event[1];heap.push_back({event[1],-event[0]});}make_heap(heap.begin(),heap.end());}voidupdatePriority(inteventId,intnewPriority){eventToPriority[eventId]newPriority;heap.push_back({newPriority,-eventId});push_heap(heap.begin(),heap.end());}intpollHighest(){while(!heap.empty()(eventToPriority.find(-heap[0][1])eventToPriority.end()||heap[0][0]!eventToPriority[-heap[0][1]])){pop_heap(heap.begin(),heap.end());heap.pop_back();}if(heap.empty()){return-1;}intans-heap[0][1];pop_heap(heap.begin(),heap.end());heap.pop_back();eventToPriority.erase(ans);returnans;}private:unordered_mapint,inteventToPriority;vectorvectorintheap;};/** * Your EventManager object will be instantiated and called as such: * EventManager* obj new EventManager(events); * obj-updatePriority(eventId,newPriority); * int param_2 obj-pollHighest(); */时间复杂度初始化O(n)其中 n 是 events 的长度。updatePriorityO(log(nq))其中 q 是 updatePriority 的调用次数。pollHighest均摊 O(log(nq))。每个元素至多入堆出堆各一次。空间复杂度O(nq)。

相关新闻

每天认识一种投资品类:牛熊证

每天认识一种投资品类:牛熊证

文章目录1.先从一个情景开始2.牛熊证是什么?2.1 简介2.2 合约条款2.3 发行商信用风险3.牛熊证与窝轮的相似之处4.牛熊证与窝轮的核心区别5.打靶:强制收回机制6.牛熊证的杠杆效应7.牛熊证的类型8.牛熊证适合什么样的人?9.投资牛熊证的关键原则…

2026/9/22 1:57:25 阅读更多 →
Obsidian LaTeX公式高效输入:插件配置与实战技巧

Obsidian LaTeX公式高效输入:插件配置与实战技巧

1. 项目概述:为什么说Obsidian写LaTeX公式能比手写快?如果你经常需要处理数学、物理、计算机科学或者任何涉及复杂公式的笔记,那你一定对LaTeX不陌生。它排版出来的公式确实漂亮、专业,但传统的编写流程——打开一个专门的LaTeX编…

2026/9/21 1:12:23 阅读更多 →
VAM雕刻变形全攻略:从基础操作到高级技巧

VAM雕刻变形全攻略:从基础操作到高级技巧

1. 先搞清楚“雕刻变形”在VAM里到底能做什么如果你在VAM(Virt-A-Mate)里捏人或者调整场景时,觉得默认的滑块调节不够精细,或者想做出一些夸张、独特的角色形态,那“雕刻变形”这个功能就是你绕不开的工具。它解决的核…

2026/9/17 4:09:12 阅读更多 →

最新新闻

5个视频在线压缩方案图解原理与选型避坑

5个视频在线压缩方案图解原理与选型避坑

5个视频在线压缩方案图解原理与选型避坑 昨天帮一个做跨境电商的朋友排查故障,他发来的代码是从某技术论坛复制的“视频在线压缩”片段,本地跑报错,服务器部署直接502超时。这种 复制来的代码跑不通不知道怎么调…

2026/9/22 2:08:09 阅读更多 →
雷柏机械键盘源码揭秘:性能优化实战与面试避坑指南

雷柏机械键盘源码揭秘:性能优化实战与面试避坑指南

雷柏机械键盘源码揭秘:性能优化实战与面试避坑指南 面试时被问“机械键盘的触发原理与驱动优化”,你答得上来吗?很多后端或嵌入式开发者,平时只关注业务逻辑,对底层硬件交互一知半解。一旦面试官深挖 性能优化…

2026/9/22 2:08:09 阅读更多 →
心经讲解避坑指南:新手必读的3个致命错误与修复方案

心经讲解避坑指南:新手必读的3个致命错误与修复方案

心经讲解避坑指南:新手必读的3个致命错误与修复方案 复制来的代码跑不通,报错信息像天书一样看不懂,这是很多刚接触“心经讲解”相关项目或数据处理的开发者最头疼的事。别急,这种问题往往不是你的逻辑错了,而是环境配置或依赖库版本出了岔子。这份避坑…

2026/9/22 2:08:09 阅读更多 →
新浪图床从入门到精通:5步打通前端资源托管底层逻辑

新浪图床从入门到精通:5步打通前端资源托管底层逻辑

新浪图床从入门到精通:5步打通前端资源托管底层逻辑 学会语法却不知怎么搭项目,这是很多转行前端或后端开发的伙伴最头疼的事。你背熟了 HTTP 协议,写得了复杂的正则,但一遇到图片上传、CDN…

2026/9/22 2:08:09 阅读更多 →
搞定微信地区自定义,告别环境卡壳,3步实现性能优化

搞定微信地区自定义,告别环境卡壳,3步实现性能优化

搞定微信地区自定义,告别环境卡壳,3步实现性能优化 配置环境就卡半天,是不是你的常态?别慌,这真不是你的错。很多后端开发者在接入【微信地区自定义】时,往往死磕在SDK依赖冲突和API调用延迟上,不仅浪费了大量调试时间,更导致接口响应慢,直接…

2026/9/22 2:08:09 阅读更多 →
3个核心模块搞定录屏软件手机版,面试必问的底层逻辑

3个核心模块搞定录屏软件手机版,面试必问的底层逻辑

3个核心模块搞定录屏软件手机版,面试必问的底层逻辑 官方文档里全是晦涩的 API 定义和回调机制,读完脑子还是空的,根本抓不住重点。 别慌,今天不讲虚的,直接拆解一个能跑的 录屏软件手机版 核心实现。 这不仅是项目实战,更是 面试必问…

2026/9/22 2:07:09 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →