LeetCode——队列

队列

主要是优先队列的例题,以及优先队列如何使用(堆的性质,队列的存取)

优先队列:

PriorityQueue<Integer> minHeap = new PriorityQueue<>();
minHeap.peek();  // 获取堆顶元素
minHeap.offer(num);  // 入堆
minHeap.poll();  // 弹出

本质:完全二叉树
1.数组中的第K个最大元素

// class Solution {
//     public int findKthLargest(int[] nums, int k) {
//         // 思路一:暴力解法,JDK默认使用快速排序
//         int len = nums.length;
//         Arrays.sort(nums);
//         return nums[len - k];
//     }
// }// 优先队列
class Solution {public int findKthLargest(int[] nums, int k) {// 思路二:构造一个含有k个元素的小顶堆,先拿k个元素初始化堆,接着继续遍历,判断是否要将此元素再放入堆中,最后从堆顶也就是队头拿出来的元素就是第k大的元素int len = nums.length;// 定义含k个元素的小顶堆PriorityQueue<Integer> minHeap = new PriorityQueue<>(k);for (int i = 0; i < len; i++) {if (i < k) {minHeap.offer(nums[i]);  // 入堆} else {if(nums[i] > minHeap.peek()) {minHeap.poll();minHeap.offer(nums[i]);}}}return minHeap.peek();}
}

2.前 K 个高频元素

class Solution {public int[] topKFrequent(int[] nums, int k) {// 思路:定义一个HashMap,统计每个整数出现的频次;将频次作为入堆的依据HashMap<Integer, Integer> map = new HashMap<>();// 1. 统计每个数字出现的频次int len = nums.length;for (int i = 0; i < len; i++) {// map.get(nums[i]) ++;// map.getOrDefault()如果键存在就获取键对应的值,如果不存在就使用默认值0map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);}// 2. 试着将map作为优先队列的元素// 存的时map的key,但是想要根据map的value值维护小顶堆!!!!PriorityQueue<Integer> minHeap = new PriorityQueue<>(new Comparator<Integer>(){public int compare(Integer a,Integer b){return map.get(a) - map.get(b);}});map.forEach((key, val) -> {if (minHeap.size() < k) {minHeap.offer(key);// System.out.println("初始化时插入的"+ key);} else {if(val > map.get(minHeap.peek())) {minHeap.poll();minHeap.offer(key);System.out.println(key);}}System.out.println(key + "--->" + val);});// 3. 定义接收数组int[] res = new int[k];int index = 0;while (!minHeap.isEmpty()) {res[index] = minHeap.poll();index ++;}return res;}
}

3.数据流的中位数

class MedianFinder {// 定义一个小顶堆,一个大顶堆PriorityQueue<Integer> queMin;PriorityQueue<Integer> queMax;public MedianFinder() {// 重写Comparator方法,默认构造出来的是小顶堆,queMin = new PriorityQueue<Integer>((a, b) -> (b - a));queMax = new PriorityQueue<Integer>((a, b) -> (a - b));}public void addNum(int num) {if (queMin.isEmpty() || num <= queMin.peek()) {queMin.offer(num);if (queMax.size() + 1 < queMin.size()) {queMax.offer(queMin.poll());}} else {queMax.offer(num);if (queMax.size() > queMin.size()) {queMin.offer(queMax.poll());}}}public double findMedian() {if (queMin.size() > queMax.size()) {return queMin.peek();}return (queMin.peek() + queMax.peek()) / 2.0;}
}

搞清楚现在里面存的是什么值,PriorityQueue会自动进行排序,自己实现PriorityQueue的关键是完全二叉树的调整,如果是小顶堆,插入元素,放在最后一个结点,不断比较与双亲结点的值大小,向上调整

[未完待续……]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024美赛数学建模常用数学建模模型之——层次分析法

一、层次分析法的基本原理与步骤 人们在进行社会的、经济的以及科学管理领域问题的系统分析中&#xff0c;面临的常常是 一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次 分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。 …

Kafka(七)可靠性

目录 1 可靠的数据传递1.1 Kafka的可靠性保证1.2 复制1.3 Broker配置1.3.1 复制系数1.3.2 broker的位置分布1.3.3 不彻底的首领选举1.3.4 最少同步副本1.3.5 保持副本同步1.3.6 持久化到磁盘 1.2 在可靠的系统中使用生产者1.2.1 根据需求配置恰当的acks1.2.2 配置重试参数1.2.3…

视频智能分析支持摄像头异常位移检测,监测摄像机异常位移变化,保障监控状态

我们经常在生产场景中会遇到摄像头经过风吹日晒&#xff0c;或者异常的触碰&#xff0c;导致了角度或者位置的变化&#xff0c;这种情况下&#xff0c;如果不及时做出调整&#xff0c;会导致原本的监控条件被破坏&#xff0c;发生事件需要追溯的时候&#xff0c;查不到对应位置…

找到字符串中所有字母异位词【滑动窗口】

Problem: 438. 找到字符串中所有字母异位词 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 主要需要注意s长度可能比p短 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( 26 n ) O(26n) O(26n) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( …

Camtasia2024苹果Mac电脑版(屏幕录制剪辑软件)

Camtasia Mac2024免费版是一款由TechSmith公司官方进行汉化推出的最新版本&#xff0c;借助Camtasia&#xff0c;您可以轻松记录屏幕并创建优美&#xff0c;专业的视频。记录所有内容-您的整个屏幕或只是一个窗口。或者&#xff0c;添加您已经拥有的视频&#xff0c;图像&#…

第十三章 接口测试(笔记)

一、接口测试分类 内部接口&#xff1a;测试被测系统各个子模块之间的接口&#xff0c;或者被测系统提供给内部系统使用的接口 外部接口&#xff1a; 1.被测系统调用外部的接口 2.系统对外提供的接口 接口测试重点&#xff1a;检查接口参数传递的正确性&#xff0c;接口功能的…

java数据结构与算法刷题-----LeetCode303. 区域和检索 - 数组不可变

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

Chunjun纯钧(Flinkx)同步任务开发通用配置参数详解

Chunjun纯钧(Flinkx)是一款稳定、易用、高效、批流一体的数据集成框架,目前基于实时计算引擎Flink实现多种异构数据源之间的数据同步与计算,支持JSON模版配置任务,兼容FlinkSQL语法。本文对chunjun同步任务的配置文件进行详细的介绍和总结。 文章目录 配置文件结构详解Conte…

HackTheBox - Medium - Linux - Ambassador

Ambassador Ambassador 是一台中等难度的 Linux 机器&#xff0c;用于解决硬编码的明文凭据留在旧版本代码中的问题。首先&#xff0c;“Grafana”CVE &#xff08;“CVE-2021-43798”&#xff09; 用于读取目标上的任意文件。在研究了服务的常见配置方式后&#xff0c;将在其…

2023「总结」,2024「展望」

前言 时光荏苒&#xff0c;岁月如梭&#xff0c;转眼已经进入2024年了。回想过去的2023年&#xff0c;成长了很多&#xff0c;有收获&#xff0c;有付出&#xff0c;也有一丝丝的遗憾。   其实在写这篇文章之前我思考了很久&#xff0c;一直不知如何下手&#xff0c;也许这是…

el-select显示不全

css代码&#xff1a; .el-select-dropdown__wrap.el-scrollbar__wrap {margin-bottom: 0 !important; }

nodejs 实现内部之间接口的相互调用

ChatGPT4.0国内站点&#xff1a;海鲸AI 在 Node.js 中调用服务内的接口&#xff0c;通常是指发起 HTTP 请求到某个服务的 API 端点。这可以通过 Node.js 的内置 http 模块来实现&#xff0c;或者使用第三方库如 axios、request&#xff08;已被弃用&#xff09;、node-fetch 等…

Redis 常见的几种数据结构说一下?各自的使用场景?

文章目录 Redis 常见的几种数据结构说一下&#xff1f;各自的使用场景&#xff1f;stringlisthashsorted setbitmap使用场景&#xff1a; Redis 常见的几种数据结构说一下&#xff1f;各自的使用场景&#xff1f; string 介绍&#xff1a;string 数据结构是简单的 key-value …

机器学习笔记 - 用于语义图像分割的空洞卷积DeepLabv3

一、什么是DeepLabv3&#xff1f; DeepLabv3 是用于语义分割任务的深度神经网络 (DNN) 架构。虽然不是比较新的网络模型&#xff0c;但是也是分割模型里的杰出代表之一&#xff0c;所以还是值得深入了解。 它使用Atrous&#xff08;Dilated&#xff09;卷积来控制感受野和特征图…

lucky_number.exe逆向

使用IDA打开lucky_number.exe 在IDA view中找到包含flag的信息。 点击F5进入源码 可以看到程序输入的数据会经过凯撒密码加密后进行与变量aHv1g1gM0ifTzou比较判断。 双击进入这个变量,可以找到比较的字符串Hv1g_1g_M0if_Tzou_v4v4v 知道了加密算法是凯撒加密,我们就可以…

20240106-算术切片 II - 子序列

题目要求 给定一个整数数组 nums&#xff0c;返回 nums 的所有算术子序列的个数。 如果一个数字序列至少由三个元素组成&#xff0c;且任意两个连续元素之间的差值相同&#xff0c;则该序列称为算术序列。 例如&#xff0c;[1, 3, 5, 7, 9]、[7, 7, 7]和[3, -1, -5, -9]都是…

机器学习(四) -- 模型评估(1)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 机器学习&#xff08;四&#xff09; -- 模型评估…

小家电type-c接口PD诱骗

小家电Type-C接口PD诱骗&#xff1a;未来充电的便捷与安全 随着科技的不断发展&#xff0c;Type-C接口已经成为了许多小家电产品的标配。而PD&#xff08;Power Delivery&#xff09;诱骗技术&#xff0c;作为一种新兴的充电技术&#xff0c;更是为小家电产品的充电带来了前所…

MySQL学习笔记1: 数据库的简单介绍

目录 1. 数据库是什么2. 数据库这一类软件中的一些典型代表2.1. Oracle2.2. MySQL2.3. SQL Server2.4. SQLite (lite 轻量版) 3. 数据库的类型3.1. 关系型数据库3.2. 非关系型数据库 4. 总结 1. 数据库是什么 数据库是一类软件&#xff0c;这一类软件可以用来管理数据&#xf…

Freemarker实现Html全站静态化

全站静态化 在大型网站中&#xff0c;比如主流电商商品页&#xff0c;访问者看到的页面基本上是静态页面。为什么都要把页面静态化呢&#xff1f;其实把页面静态化&#xff0c;好处有很多。例如&#xff1a;访问速度快&#xff0c;更有利于搜索引擎收录等。 目前主流的静态化…