当前位置: 首页 > news >正文

Leetcode 优先队列详解

优先队列

优先队列(Priority Queue):一种特殊的队列。在优先队列中,元素被赋予优先级,当访问队列元素时,具有最高优先级的元素最先删除

普通队列详解Leetcode 队列详解

优先队列与普通队列最大的不同点在于出队顺序

  • 普通队列的出队顺序跟入队顺序相关,符合「先进先出(First in, First out)」的规则。
  • 优先队列的出队顺序跟入队顺序无关,优先队列是按照元素的优先级来决定出队顺序的。优先级高的元素优先出队,优先级低的元素后出队。优先队列符合 「最高级先出(First in, Largest out)」 的规则

适用场景

优先队列的应用场景非常多,比如:

  • 数据压缩:赫夫曼编码算法
  • 最短路径算法:Dijkstra 算法
  • 最小生成树算法:Prim 算法
  • 任务调度器:根据优先级执行系统任务
  • 事件驱动仿真:顾客排队算法
  • 排序问题:查找第 k 个最小元素

很多语言都提供了优先级队列的实现。比如,Java 的PriorityQueue,C++ 的priority_queue

Leetcode 真题

数组中的第K个最大元素

解题思路: 典型的优先队列/最大堆,依次入队排序后取队头的第K大的元素

public int findKthLargest(int[] nums, int k) {PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1 - o2;}});for (int num : nums) {if (queue.size() == k) {if (queue.peek() < num) {queue.poll();queue.offer(num);}} else {queue.offer(num);}}return queue.poll();
}

前 K 个高频元素

解题思路:使用优先队列记录出现次数topK
int[] 的第一个元素代表数组的值,第二个元素代表了该值出现的次数

public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> occurrences = new HashMap<Integer, Integer>();for (int num : nums) {occurrences.put(num, occurrences.getOrDefault(num, 0) + 1);}// int[] 的第一个元素代表数组的值,第二个元素代表了该值出现的次数PriorityQueue<int[]> queue = new PriorityQueue<int[]>(new Comparator<int[]>() {public int compare(int[] m, int[] n) {return m[1] < n[1] ? -1 : 1;}});for (Map.Entry<Integer, Integer> entry : occurrences.entrySet()) {int num = entry.getKey(), count = entry.getValue();if (queue.size() == k) {if (queue.peek()[1] < count) {queue.poll();queue.offer(new int[]{num, count});}} else {queue.offer(new int[]{num, count});}}int[] ret = new int[k];for (int i = 0; i < k; ++i) {ret[k - i - 1] = queue.poll()[0];}return ret;
}

滑动窗口最大值

解题思路:使用优先队列记录窗口范围内的topK大数
int[] 的第一个元素代表数组的值,第二个元素代表了该值的下标
根据数组元素从大到小进行排序,若是元素相同的话,则根据下标进行从大到小进行排序

public int[] maxSlidingWindow(int[] nums, int k) {int[] result = new int[nums.length - k + 1];PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o1[0] == o2[0] ? o2[1] - o1[1] : o2[0] - o1[0];}});for (int i = 0; i < k - 1; i++) {queue.offer(new int[]{nums[i], i});}for (int i = k - 1; i < nums.length; i++) {queue.offer(new int[]{nums[i], i});// 若是优先队列/最大堆的堆顶元素 不在滑动窗口范围内,则直接从优先队列中进行删除while(queue.peek()[1] <= i - k){queue.poll();}result[i - k + 1] = queue.peek()[0];}return result;
}

参考资料:

  1. 优先队列知识
  2. Leetcode 队列详解

相关文章:

Leetcode 优先队列详解

优先队列 优先队列&#xff08;Priority Queue&#xff09;&#xff1a;一种特殊的队列。在优先队列中&#xff0c;元素被赋予优先级&#xff0c;当访问队列元素时&#xff0c;具有最高优先级的元素最先删除 普通队列详解Leetcode 队列详解 优先队列与普通队列最大的不同点在于…...

通过两道一年级数学题反思自己

背景 做完这两道题我开始反思自己&#xff0c;到底是什么限制了我&#xff1f;是我自己&#xff1f;是曾经教导我的老师&#xff1f;还是我的父母&#xff1f; 是考试吗&#xff1f;还是什么&#xff1f; 提目 1、正方体个数问题 2、相碰可能性 过程 静态思维&#xff1a; …...

Pytorch :从零搭建一个神经网络

文章目录安装依赖从源码编译pytorchCXX_ABI问题数据集归一化Transforms搭建神经网络Components of a neural networknn.Flattennn.Linearnn.Sequentialnn.SoftmaxModel Parameters优化模型参数设置超参数添加优化循环添加 loss function优化过程完整实现模型的保存和加载安装 …...

【华为OD机试 2023最新 】 区块链文件转储系统(C++ 100%)

题目描述 区块链底层存储是一个链式文件系统,由顺序的N个文件组成,每个文件的大小不一,依次为F1,F2,…,Fn。随着时间的推移,所占存储会越来越大。 云平台考虑将区块链按文件转储到廉价的SATA盘,只有连续的区块链文件才能转储到SATA盘上,且转储的文件之和不能超过SATA盘…...

基于springcloud实现分布式架构网上商城演示【项目源码】分享

基于springcloud实现分布式架构网上商城演示摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包…...

【Qt】(自制类)适用于QTextCharFormat的字体选择对话框

先附上github链接&#xff1a;https://github.com/Ls-Jan/Qt_CharFormatDialog 主要是作为QFontDialog的平替/增强&#xff0c;毕竟Qt自带的字体选择器一言难尽(用过的都叹气)。 【运行界面】 【功能】 一目了然&#xff0c;可以选择字体&#xff0c;设置字号&#xff0c;设置…...

Unity即时战略/塔防项目实战(一)——构造网格建造系统

Unity即时战略/塔防项目实战&#xff08;一&#xff09;—— 构造网格建造系统 效果展示 Unity RTS游戏网格建造系统实现原理 地形和格子划分&#xff0c;建造系统BuildManager构建 地形最终需要划分成一个一个的小方格&#xff0c;首先定义一下小方格&#xff1a; private…...

【ZOJ 1095】Humble Numbers 题解(动态规划)

一个素数只有2&#xff0c;3&#xff0c;5或7的数被称为谦逊数。序列1、2、3、4、5、6、7、8、9、10、12、14、15、16、18、20、21、24、25、27。。。显示了前20个不起眼的数字。 编写一个程序来查找并打印此序列中的第n个元素。 输入规范 输入由一个或多个测试用例组成。每个…...

百科媒体背书,什么媒体的收录可以修改百科?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好 大家都知道百科在百度搜索引擎中有很高的权重&#xff0c;排名非常靠前&#xff0c;任何机构&#xff0c;个人&#xff0c;或者企业做网络宣传百科是必不可少的&#xff0c;虽然任何人都可以注册并编辑其内容。但是&#x…...

USB鼠标实现——HID 报告的返回(八)

文章目录HID 报告的返回仓库地址USB 鼠标阅读顺序报告返回HID 报告的返回 仓库地址 仓库地址 USB 鼠标阅读顺序 枚举过程USB鼠标实现——设备描述符&#xff08;一&#xff09;USB鼠标实现——设置地址&#xff08;二&#xff09;USB鼠标实现——配置描述符集合&#xff08…...

DOPE PEG Maleimide,DOPE-PEG-Mal,二油酰磷脂酰乙醇胺PEG马来酰亚胺

文章关键词&#xff1a;高分子PEG&#xff0c;DOPE&#xff0c;聚乙二醇化修饰试剂基团反应特点&#xff1a; DOPE PEG Maleimide是一种由 DOPE 和马来酰亚胺基团组成的 PEG 化合物。基础产品数据&#xff1a; CAS号&#xff1a;N/A 中文名&#xff1a;1,2-二油酰-SN-甘油-3-磷…...

python-课后作业-2

1.Python 3.x的range()函数返回一个&#xff1a;可迭代的序列对象 注意&#xff1a; Python 3.x的range()函数返回一个可迭代的序列对象&#xff0c;其中包含指定范围内的整数。range()函数的语法如下&#xff1a; range([start], stop[, step]) 其中&#xff0c;start表示序…...

redis 六. list应用场景及底层分析

List 类型一. 简单命令示例二. java 操作示例三. 使用场景四. 底层分析一. 简单命令示例 1.首先简单说明: List是一个双端链表的结构,内容是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈,队列,消息队列等场景 2.简单命令 //1.向列表左边添加元素 LPUSH ke…...

成语填字接龙隐私政策

1. 适用范围 (a) 在您注册本应用帐号时&#xff0c;您根据本应用要求提供的个人注册信息&#xff1b; (b) 在您使用本应用网络服务&#xff0c;或访问本应用平台网页时&#xff0c;本应用自动接收并记录的您的浏览器和计算机上的信息&#xff0c;包括但不限于您的IP地址、浏览…...

导出LKD3588开发板的根文件系统

序:将RK3588上的整个根文件系统的文件通过ssh拷贝到PC系统(虚拟机) 工具:RK3588上的ubuntu系统需要安装:ssh, rsync。 PC电脑(虚拟机)上安装:ssh, rsync。 安装ssh 和rsync不做介绍,百度里面全是,也很简单需要设置开发板root权限的密码,因为后面同步文件的时候会用到…...

【统计模型】某地区土壤所含可给态磷回归分析

目录 某地区土壤所含可给态磷回归分析 一、研究目的 二、数据来源和相关说明 三、描述性分析 3.1 样本描述 3.2 数据可视化 四、数据建模 4.1 回归模型A 4.2 回归模型B 4.3 回归模型B模型诊断 4.4 回归模型C 五、结论及建议 5.1 结论 5.2 建议 六、代码 某地区土…...

redis 十. 线程基础

目录一. redis 基础复习与了解redis6二. redis 线程问题总结一. redis 基础复习与了解redis6 redis官网, redis中文网站, redis命令参考网站此处以redis6.0.8或以上版本为例(查看自己redis版本命令"redis- server -v")按照redis6以上版本测试使用时,redis.conf下需要…...

NQA简介

NQA简介定义目的NQA原理描述使用DHCP进行测试DNS测试NQA的联动机制NQA的应用场景定义 网络质量分析NQA&#xff08;Network Quality Analysis&#xff09;是一种实时的网络性能侦探和统计技术&#xff0c;可以对响应时间、网络抖动、丢包率等网络信息进行统计。NQA能够实时监视…...

[python]上下文管理contextlib模块与with语句

文章目录with语句自定义对象支持withcontextlib模块closing自动关闭suppress回避错误ExitStack清理Python 中的 with 语句用于清理工作&#xff0c;封装了 try…except…finally编码范式&#xff0c;提高了易用性。with语句 with语句有助于简化资源管理&#xff1a; # 离开作…...

STM32之TIM编码器接口

编码器简介&#xff1a; 例子讲解&#xff1a;正交编码器有两个输出&#xff0c;一个A相&#xff0c;一个B相&#xff0c;AB接口输出正交信号。然后接入STM32的定时器的编码器接口&#xff0c;编码器接口自动控制定时器时基单元中的CNT计数器进行自增或自减&#xff0c;比如初始…...

Ganache 快速启动与 Truffle 项目集成实战

1. 为什么选择Ganache作为开发起点 刚接触区块链开发时&#xff0c;最头疼的就是如何在本地快速搭建测试环境。以太坊主网不仅需要真实ETH&#xff0c;每笔交易还要等待区块确认&#xff0c;完全不适合开发调试。这时候Ganache就像个贴心的开发助手&#xff0c;它能在本地一键生…...

macOS开发环境标准化实践:基于Homebrew的CUR环境构建

1. 项目概述与核心价值最近在折腾macOS开发环境&#xff0c;尤其是涉及到一些需要特定编译工具链的项目时&#xff0c;经常被各种依赖和版本问题搞得焦头烂额。相信很多从Linux或Windows转过来的开发者都有同感&#xff0c;macOS虽然优雅&#xff0c;但在某些底层开发工具的生态…...

如何快速掌握Diablo Edit2:暗黑破坏神2终极角色编辑器使用指南

如何快速掌握Diablo Edit2&#xff1a;暗黑破坏神2终极角色编辑器使用指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit Diablo Edit2是一款功能强大的暗黑破坏神2角色存档编辑器&#xff0c;支…...

【信息科学与工程学】【通信工程】第四十四篇 城域网络设计10 城域网中涉及的数学物理、数学化学及数学地理01

城域网中涉及的数学、数学物理、数学化学及数学地理方法,并按照您要求的表格格式进行呈现。 编号 领域 类型 城域网领域 子领域 城域网架构 城域网中的数学/数学物理/数学化学方法/算法/现象 现象描述/算法/函数逐步推理思考的数学方程式(完整的参数列表、常数、变量、…...

Cerebras即将IPO,246亿美元订单加身,能否挑战英伟达?

市值5.5万亿美元英伟达迎来强劲对手市值5.5万亿美元的英伟达&#xff0c;迎来了强劲对手。马上&#xff0c;芯片公司Cerebras就要在纳斯达克IPO。它的IPO价格定为189美元&#xff0c;募资55.5亿美元&#xff0c;估值达到564亿美元&#xff08;约合人民币3800亿元&#xff09;。…...

网盘直链下载助手终极指南:3分钟解锁9大网盘满速下载

网盘直链下载助手终极指南&#xff1a;3分钟解锁9大网盘满速下载 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

Claude Code 模型特定调优与 A/B 测试全解析:Feature Flag、灰度发布、Undercover、安全门控、Prompt 调优与 AI Agent 工程化实战

一、先说结论&#xff1a;AI Agent 真正难的不是“会调用模型”&#xff0c;而是“能持续驾驭模型”很多人做 AI 编码助手、企业智能体、研发提效工具时&#xff0c;第一反应是接入一个更强的大模型&#xff1a;换成更大的参数、更新的版本、更长的上下文&#xff0c;似乎问题就…...

Overture开源框架:快速部署生产级大语言模型API服务

1. 项目概述&#xff1a;一个开箱即用的开源AI应用框架最近在折腾AI应用开发的朋友&#xff0c;估计都绕不开一个核心问题&#xff1a;如何快速、稳定地把一个大语言模型&#xff08;LLM&#xff09;的能力&#xff0c;封装成一个能对外提供服务的API&#xff0c;并且这个服务还…...

Lancet Digit Health(IF=24.1)广东省人民医院刘再毅amp;南方医科大学南方医院梁莉等团队:基于可解释深度学习模型预测胶质瘤分子改变

01文献学习今天分享的文献是由广东省人民医院放射科刘再毅、南方医科大学南方医院梁莉等团队于2026年5月11日在柳叶刀旗下数字健康领域顶刊《The Lancet Digital Health》&#xff08;中科院1区top&#xff0c;IF24.1&#xff09;上发表的研究“Molecular alterations predicti…...

飞书文档批量导出终极指南:3步实现自动化文档迁移

飞书文档批量导出终极指南&#xff1a;3步实现自动化文档迁移 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 还在为飞书文档迁移而烦恼吗&#xff1f;飞书文档批量导出工具让你彻底告别手动下载…...