当前位置: 首页 > 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;比如初始…...

b站第一,Python自动化测试实战详细教学,3天教你学会自动化测试

目录 简介 Python自动化测试概述 Python自动化测试目标 Python自动化测试流程 1. 测试计划和设计 2. 测试脚本开发 3. 测试执行和管理 4. 测试维护和优化 Python自动化测试最佳实践 Python自动化测试工具和框架 结论 简介 自动化测试是软件开发过程中一个必不可少的…...

刷题记录:P8804 [蓝桥杯 2022 国 B] 故障 条件概率

传送门:洛谷 题目描述: 题目较长,此处省略 输入: 3 5 30 20 50 0 50 33 25 0 30 0 35 0 0 0 0 0 25 60 1 3 输出: 2 56.89 1 43.11 3 0.00读完题目,我们会发现其实题目给了我们两个事件,并且这两个事件是相互关联的.因此不难想到使用条件概率 我们将故障原因看做事件AAA,结合…...

【算法】常用的基础数论

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;或许会很慢&#xff0c;但是不可以停下&#x1f43e; 文章目录1.GCD&LCM2.判断素数(质数)3.分解质因子1.GCD&LCM 最大公约数&最小共倍数 欧几里得算法——高效 //最大公约数 int gcd(int x,i…...

云原生场景下的容器网络隔离技术

云原生场景下的容器网络隔离技术 一、研究背景 随着云计算时代的到来&#xff0c;尤其是容器化技术的飞速发展&#xff0c;云原生作为云计算的未来阶段&#xff0c;其安全势必成为云安全的主要战场。从目前的云原生环境来看&#xff0c;云原生网络安全问题层出不穷&#xff0…...

用python绘制有向图

目录 添加边权重的有向图思路介绍代码实现效果图设置不同的样式节点和边的有向图思路介绍代码实现效果图下面的Python代码用于绘制有向图,其中使用了 networkx和 matplotlib.pyplot等库。 添加边权重的有向图 思路介绍 首先,创建了一个空的有向图像对象G,并添加了4个节点…...

Spring MongoDB 开发教程(一)—官方原版

MongoDB支持包含一系列功能&#xff1a;Spring配置支持基于Java的configuration类或Mongo驱动程序实例和副本集的XML命名空间。MongoTemplate帮助类&#xff0c;在执行常见的Mongo操作时提高生产力。包括文档和POJO之间的集成对象映射。将异常转换为Spring的可移植数据访问异常…...

数据结构——二叉搜索树

一、二叉搜索树概念 二叉搜索树又叫二叉排序树&#xff0c;它或是空树&#xff0c;或是具有以下性质的二叉树&#xff1a; &#xff08;1&#xff09;若它的左子树不为空&#xff0c;则左子树上的所有节点的值都小于根节点的值&#xff1b; &#xff08;2&#xff09;若它的…...

23年5月高项学习笔记3---项目管理概述

项目是创造独特的产品、服务或成果而进行的临时性的工作 独特&#xff1a;每个项目都不一样 可交付成果&#xff1a;某一过程&#xff0c;阶段或项目完成时形成的独特的并且可验证的产品、服务或成果。 临时的&#xff1a;明确的起点和终点、 -------- 项目集&#xff1a; 相…...

【组织架构】中国铁路成都局集团有限公司

0 参考 中国铁路成都局集团有限公司 1 公司介绍 中国铁路成都局集团有限公司&#xff0c;是中国国家铁路集团有限公司管理的18个铁路局集团有限公司之一&#xff0c;简称“成局”&#xff0c;地处中国西南&#xff0c;管辖范围辐射四川、贵州、重庆地区。管内地形复杂&#x…...

剧前爆米花--爪哇岛寻宝】java多线程案例——单例模式、阻塞队列及生产者消费者模型、定时器、线程池

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是关于java多线程案例的文章&#xff0c;进行了对单例模式、阻塞队列及生产者消费者模型、定时器和线程池的讲解&#xff0c;希望对你有所帮助&#xff01; 目录 单例模式 懒汉模式实现 饿…...

嘉兴南湖区建设局网站/产品推广方案范例

1 介绍 hive数据存储基于HDFS&#xff0c;没有专门的数据存储格式。 数据结构主要包括&#xff1a; 数据库文件表视图 可以直接加载文本文件&#xff0c;创建表时可以指定hive数据的列分隔符与行分隔符。 2 表 2.1 内部表 table 1&#xff09;介绍 与数据库中的table在…...

不需要网站备案的空间/上海公布最新情况

端口映射 默认情况下&#xff0c;宿主机是无法访问容器内部网络的&#xff0c;但是可以使用端口映射来解决这个问题&#xff0c;在之前文章中已经提到过Docker的端口映射。主要通过docker run 跟 -P&#xff08;大写&#xff09; 或 -p&#xff08;小写&#xff09;参数来实现…...

班级网站建设毕业设计开题报告/线上营销渠道有哪些

2019独角兽企业重金招聘Python工程师标准>>> 用的是sql server2014要然后现在要将2014数据库的数据放到2012中操作如&#xff1a; 一&#xff0c;先用2014的数据库导出表结构和数据&#xff1a; 选择需要导出的数据 右键---任务---生成脚本 ---根据下面截图进行操作…...

中小型企业网站建设/微信scrm系统

&#xff08;一&#xff09;ICollectionView的作用 允许集合具有当前记录管理、自定义排序、筛选和分组这些功能。 &#xff08;二&#xff09;如果在MVVM中不用ICollectonView的后果 我们这里以ListBox为例&#xff0c;看看我前面介绍的ListBox制作工具栏 如果我们不用ICollec…...

青海西宁网站开发公司/装修公司网络推广方案

前言5-6年前经常会遇到CentOS服务器配置了超过65535的端口&#xff0c;服务也能正常启动&#xff0c;那超过65535端口之后&#xff0c;实际服务器又是占用哪个端口呢&#xff1f;这里拿我以前的笔记&#xff0c;与伙伴们分享下转换的公式。说明Windows 的 telnet&#xff0c;可…...

湖北武汉网站建设/国际新闻最新消息2022

放眼整个人类历史&#xff0c;互联网对人类文明的影响怎么评价也不为过的&#xff0c;而其发端不过是实验室的产物。所以&#xff0c;一开始根本没有考虑运营的问题&#xff0c;如与质量相关的带宽、时延等QOS技术根本没有考虑&#xff0c;由于设计的理念和先天不足&#xff0c…...