Java优先队列的使用
1. 优先队列的定义
PriorityQueue继承了Queue接口,底层默认是一个小根堆。
PriorityQueue<Integer> queue=new PriorityQueue<>();
2. 常用方法
| 方法 | 描述 |
|---|---|
boolean offer(E e) | 入队列 |
E poll() | 出队列 |
E peek() | 得到队首元素 |
|
| 返回集合中的元素个数 |
3. 自定义优先队列比较
PriorityQueue插入的元素不能是null 并且元素之间必须能够进行比较。
3.1 自定义比较器
// 定义的某个要比较类型的比较器
class IntegerComparator implements Comparator<Integer>{@Overridepublic int compare(Integer o1,Integer o2){// 如果第二个元素-第一个元素就是大根堆的实现方式,反之则为小根堆的创建方式,可以从源码去了解return o2-o1;}
}
public class TestDemo{public static void main(String[] args){PriorityQueue<Integer> maxHeap=new PriorityQueue<>(IntegerComparator);}
}
3.2 使用匿名内部类
// 定义的某个要比较类型的比较器
class IntegerComparator implements Comparator<Integer>{@Overridepublic int compare(Integer o1,Integer o2){// 如果第二个元素-第一个元素就是大根堆的实现方式,反之则为小根堆的创建方式,可以从源码去了解return o2-o1;}
}
public class TestDemo{public static void main(String[] args){PriorityQueue<Integer> maxHeap=new PriorityQueue<>(IntegerComparator);}
}
3.3 使用Lamda表达式
PriorityQueue<Integer> pq=new PriorityQueue<>((o1,o2)-> Integer.compare(o2,o1));
4. 补充堆排序的实现
class Solution {public int findKthLargest(int[] nums, int k) {int heapSize = nums.length;buildMaxHeap(nums, heapSize);for (int i = nums.length - 1; i >= nums.length - k + 1; --i) {swap(nums, 0, i);--heapSize;maxHeapify(nums, 0, heapSize);}return nums[0];}public void buildMaxHeap(int[] a, int heapSize) {for (int i = heapSize / 2; i >= 0; --i) {maxHeapify(a, i, heapSize);} }public void maxHeapify(int[] a, int i, int heapSize) {int l = i * 2 + 1, r = i * 2 + 2, largest = i;if (l < heapSize && a[l] > a[largest]) {largest = l;} if (r < heapSize && a[r] > a[largest]) {largest = r;}if (largest != i) {swap(a, i, largest);maxHeapify(a, largest, heapSize);}}public void swap(int[] a, int i, int j) {int temp = a[i];a[i] = a[j];a[j] = temp;}
}
相关文章:
Java优先队列的使用
1. 优先队列的定义 PriorityQueue继承了Queue接口,底层默认是一个小根堆。 PriorityQueue<Integer> queuenew PriorityQueue<>(); 2. 常用方法 方法描述boolean offer(E e)入队列E poll()出队列E peek()得到队首元素 int size() 返回集合中的元素个…...
20241105,LeetCode 每日一题,用 Go 实现两数之和的非暴力解法
题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 …...
mysql之命令行基础指令
一:安装好mysql后,注册好账号密码。 二:在命令行进行登录的指令如下 mysql -u用户名 -p 例如:mysql -uroot -p; 然后按下回车,进入输入密码。 三:基本指令: 1:查看当前账户的所有…...
使用Django Channels实现WebSocket实时通信
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Django Channels实现WebSocket实时通信 Django Channels 简介 环境搭建 安装 Django 和 Channels 创建 Django 项目 配置 A…...
「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用
本篇将带领你实现一个趣味十足的互动应用,用户点击按钮时猫会在一排灯之间移动,猫所在的位置灯会亮起(on),其余灯会熄灭(off)。应用会根据用户的操作动态更新灯光状态和文本提示当前亮灯的位置&…...
Spring-Day4
12.HelloSpring <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:util"http://www.springframework…...
C#-类:成员属性
数据成员 ≠ 属性 成员属性 属性可以理解为一种封装 成员属性概念:一般是用来保护成员变量的 成员属性的使用和变量一样,外部用对象点出 get中需要return内容 ; set中用value表示传入的内容 get和set语句块中可以加逻辑处理。应用&#…...
qt QDragEnterEvent详解
1、概述 QDragEnterEvent是Qt框架中用于处理拖放进入事件的一个类。当用户将一个拖拽对象(如文件、文本或其他数据)拖动到支持拖放操作的窗口部件(widget)上时,系统会触发QDragEnterEvent事件。这个类允许开发者在拖拽…...
Vue项目与IE浏览器的兼容性分析(Vue|ElementUI)
总体分析 Vue.js的兼容性在不同版本间有所差异,具体针对IE浏览器的推荐版本如下: Vue 2.x 官方支持:Vue 2.x版本官方宣布支持IE9及以上版本的IE浏览器。限制与Polyfill:虽然Vue 2.x支持IE9及以上版本,但在使用时可能…...
【C++之STL】一文学会使用 string
文章目录 1. STL导读1. 1 什么是STL1. 2 STL的版本1. 3 STL六大组件1. 4 STL的重要性1. 5 STL的学习1. 6 STL系列博客的规划 2. string2. 1 为什么学习string类?2. 2 标准库中的string2. 3 基本构造2. 4 尾插与输出运算符重载2. 5 构造函数2. 6 赋值运算符重载2. 7 容量操作2.…...
好用的办公套件--- ONLYOFFICE
目录 引言 UI界面 ONLYOFFICE 协作空间 使用协作空间三步走 一、注册与登录 二、创建房间 三、上传与编辑文档 ONLYOFFICE协作空间的安全性 ONLYOFFICE 文档 关于 ONLYOFFICE 引言 ONLYOFFICE 桌面编辑器 ONLYOFFICE是一款功能全面的办公套件,支持文档、表…...
Android View事件分发
目录 1.什么是View事件分发? 2.事件的类型 3.事件的发生 4.事件分发的方法 4.1 dispatchTouchEvent() 4.2 onTouchEvent() 4.3 onInterceptTouchEvent() 5.滑动冲突 5.1 外部拦截法 5.2内部拦截法 6.onTouch的执行高于onClick 7. onTouch()和onTouchEve…...
攻防世界GFSJ1229 Three
题目编号:GFSJ1229 解题过程 1. 附件下载是三个压缩包A.zip B.zip C.zip和一个python程序Three.py 2. A.zip可以直接解压出来,内容如下: 2022-08-27 20:16:04.246131 Func A0*X0B0 2022-08-27 20:16:05.116859 Read_Data A0.txt->A0(28829613228…...
2023 icpc杭州(M,J,D,G,H)
文章目录 [M. V-Diagram](https://codeforces.com/gym/104976/problem/M)[J. Mysterious Tree](https://codeforces.com/gym/104976/problem/J)[D.Operator Precedence](https://codeforces.com/gym/104976/problem/D)[G. Snake Move](https://codeforces.com/gym/104976/probl…...
在CentOS 7上安装Alist
在CentOS 7上安装Alist 的步骤如下: 1. 卸载旧版本 如果你之前安装过旧版本的Docker,可以先卸载它: sudo yum remove docker docker-common docker-snapshot docker-engine2. 安装依赖包 确保你的系统是最新的,并安装必要的依…...
【C/C++】memcpy函数的模拟实现
零.导言 上一篇博客我们学习了memcpy函数,不妨我们现在尝试模拟实现memcpy函数的功能。 一.实现memcpy函数的要点 memcpy函数是一种C语言内存函数,可以按字节拷贝任意类型的数组,因此我们自定义的模拟函数需要两个无类型的指针参数ÿ…...
嵌入式开发之线程互斥
目录 互斥锁初始化-pthread_mutex_init 申请锁-pthread_mutex_lock 释放锁-pthread_mutex_unlock 同步 VS 互斥 临界资源:一次只允许一个任务(进程、线程)访问的共享资源,不允许多个任务同时访问的。 临界区:访问临界区的代码 互斥机制:mutex互斥锁,任务访问临界资…...
JavaScript 变量作用域与函数调用机制:var 示例详解
JavaScript 变量作用域与函数调用机制:var 示例详解 在 JavaScript 中,作用域和闭包是理解变量生命周期和行为的核心概念。通过以下这段代码,我们将详细分析如何在不同的作用域内使用 var 关键字,并解释相关的变量访问规则 代码解…...
Linux(CentOS)安装 JDK
1、下载 JDK 官网:https://www.oracle.com/ 2、上传 JDK 文件到 CentOS,使用FinalShell远程登录工具,并且使用 root 用户登录 3、解压 JDK 创建目录 /export/server mkdir -p /export/server 解压到目录 /export/server tar -zxvf jdk-17…...
AI产品经理实战手册:策略、开发与商业化指南
通过《AI产品经理手册》,将可以了解不同类型的AI,如何将AI整合到产品或业务中,以及支持创建AI产品或将AI集成到现有产品所需的基础设施。熟悉实践管理AI产品开发流程、评估和优化AI模型,以及应对与AI产品相关的复杂伦理和法律问题…...
统信UOS 1060在龙芯3A6000上的性能初探:办公、开发、CAD软件实测,它现在能当主力机了吗?
龙芯3A6000与统信UOS 1060生产力实测:国产组合能否扛起工作大旗?当国产处理器遇上国产操作系统,会碰撞出怎样的火花?龙芯3A6000作为国产CPU的新锐力量,搭配统信UOS 1060操作系统,这套组合在技术圈引发了广泛…...
LoRA微调实战2026:从零到生产的完整工程指南
为什么2026年LoRA仍然是最重要的微调方法 大模型微调技术日新月异,但LoRA(Low-Rank Adaptation)自2021年提出以来,不仅没有被淘汰,反而在2026年成为工业界微调的主流方法之一。原因很简单:极致的参数效率。…...
物理视角下的神经网络:从表达性、统计到动力学的统一理解框架
1. 从物理视角看神经网络:为什么我们需要新的理解框架 如果你和我一样,在实验室里泡了十几年,从早期的多层感知机一路跟到现在的Transformer和扩散模型,你可能会有一个强烈的感受:我们手里的工具越来越强大,…...
高基数分类变量编码实战:均值、低秩与多项式逻辑回归方法解析
1. 项目概述:高基数分类变量的编码困局与破局思路在数据科学和机器学习的日常建模工作中,分类变量(Categorical Variables)的处理是绕不开的一环。从用户ID、邮政编码到产品SKU,这些变量往往携带了丰富的信息ÿ…...
机器学习加速格点QCD计算:流采样、轮廓变形、控制变量与代理观测量的无偏优化
1. 项目概述:当格点模拟遇见机器学习在计算物理,特别是格点量子色动力学(Lattice QCD)这个领域里,我们这些常年和超级计算机打交道的人,最常挂在嘴边的一个词可能就是“算力瓶颈”。一次完整的非微扰计算&a…...
JMeter梯度压测:精准定位系统可扩展性边界
1. 为什么“梯度式压测”不是加个线程组就完事了?很多人第一次打开JMeter,照着教程建个线程组、加个HTTP请求、跑个聚合报告,看到TPS从200涨到800就以为“压测完成了”。结果上线后流量一上来,服务直接503,监控里CPU没…...
机器学习辅助第一性原理:高精度计算电化学氧化还原电位
1. 项目概述:当机器学习遇上第一性原理,破解电化学模拟的精度瓶颈在电化学、材料科学和计算化学的交叉领域,预测一个分子或离子在溶液中的氧化还原电位,就像试图在暴风雨中测量一滴雨滴的精确落点。这个数值,直接决定了…...
高阶信息度量:总相关性与O信息在特征工程与数据压缩中的应用
1. 从信息论到机器学习:为什么我们需要更精细的“相关性”度量如果你做过机器学习项目,尤其是涉及高维数据特征工程或者模型解释性分析时,大概率会碰到一个头疼的问题:我们如何量化一组特征变量之间的“整体关系”?传统…...
社区检测技术演进与HPMOCD多目标优化实践
1. 社区检测技术演进与多目标优化挑战社区检测作为复杂网络分析的核心技术,其发展历程经历了从启发式方法到数学优化,再到多目标协同进化的三个阶段。早期的GN算法采用边介数作为分裂标准,虽然结果精确但计算复杂度高达O(n)。2008年提出的Lou…...
高能物理数据分析实战:从W玻色子截面测量到机器学习应用
1. 项目概述:从海量对撞数据到物理发现如果你对宇宙的构成充满好奇,想知道我们是如何发现希格斯玻色子,或者顶夸克的质量是如何被精确测量的,那么高能物理数据分析就是你正在寻找的钥匙。这听起来可能离日常生活很远,但…...
