Java优先队列

【Java】PriorityQueue--优先级队列 前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然不合适,比如:在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue)。 阅读详情

Java优先队列

Java优先队列默认为最小堆

PriorityQueue<Integer> p = new PriorityQueue<Integer>();
for(int i = 1; i <= 10; i ++) p.add(i);
System.out.println(p.poll());

运行结果为1

重写compare函数得到最大堆

static class cmp implements Comparator <Integer>{
		public int compare(Integer a, Integer b) {
			return b - a;
		}
		
PriorityQueue<Integer> q = new PriorityQueue<Integer>(1, new cmp());
for(int i = 1; i <= 10; i ++) q.add(i);
System.out.println(q.poll());

运行结果为10

sort排序
从小到大升序排序

static class cmp implements Comparator <Integer>{
	public int compare(Integer a, Integer b) {
		return a - b;
	}
}

从大到小降序排序

static class cmp implements Comparator <Integer>{
	public int compare(Integer a, Integer b) {
		return b - a;
	}
}

例题

http://acm.hdu.edu.cn/showproblem.php?pid=1896

Stones

Problem Description
Because of the wrong status of the bicycle, Sempr begin to walk east to west every morning and walk back every evening. Walking may cause a little tired, so Sempr always play some games this time.
There are many stones on the road, when he meet a stone, he will throw it ahead as far as possible if it is the odd stone he meet, or leave it where it was if it is the even stone. Now give you some informations about the stones on the road, you are to tell me the distance from the start point to the farthest stone after Sempr walk by. Please pay attention that if two or more stones stay at the same position, you will meet the larger one(the one with the smallest Di, as described in the Input) first.

Input
In the first line, there is an Integer T(1<=T<=10), which means the test cases in the input file. Then followed by T test cases.
For each test case, I will give you an Integer N(0<N<=100,000) in the first line, which means the number of stones on the road. Then followed by N lines and there are two integers Pi(0<=Pi<=100,000) and Di(0<=Di<=1,000) in the line, which means the position of the i-th stone and how far Sempr can throw it.

Output
Just output one line for one test case, as described in the Description.

Sample Input
2
2
1 5
2 4
2
1 5
6 6

Sample Output
11
12

Author
Sempr|CrazyBird|hust07p43

Source
HDU 2008-4 Programming Contest

Java代码

import java.util.Scanner;
import java.util.Comparator;
import java.util.PriorityQueue;

public class Main {
	
	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		int T = in.nextInt();
		while(T -- > 0) {
			PriorityQueue<Node> pq = new PriorityQueue<Node>(1, new cmp());
			int n = in.nextInt();
			int x, y;
			for(int i = 0; i < n; i ++) {
				x = in.nextInt();
				y = in.nextInt();
				pq.add(new Node(x, y));
			}
			int cnt = 1;
			Node now = new Node(0, 0);
			while(!pq.isEmpty()) {
				now = pq.poll();
				if((cnt & 1) == 1) {
					now.pos = now.pos + now.dis;
					pq.add(now);
				}
				cnt ++;
			}
			System.out.println(now.pos);
		}
		
	}
	
	static class cmp implements Comparator<Node> {
		public int compare(Node a, Node b) {
			if(a.pos == b.pos) return a.dis - b.dis;
			else return a.pos - b.pos;
		}
	}
	
	static class Node {
		int pos, dis;
		public Node(int pos, int dis) {
			this.pos = pos;
			this.dis = dis;
		}
	}

}
Java【优先级队列】详细图解 / 模拟实现 + 【PriorityQueue】常用方法介绍 优先级队列并不是像普通普通的队列那样永远遵从先进先出, 而是有优先级的, 出队时让优先级高的先出队上篇文章说过, 二叉树是一种逻辑结构, 物理结构上可以是顺序存储, 也可以是链式存储, 而堆就是在顺序存储的二叉树上做了调整PriorityQueue底层使用了堆这种数据结构堆的概念: 如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,并满足:Ki 阅读详情

相关推荐

Java优先队列及常用方法

Java优先队列及常用方法什么是优先队列常用方法最小优先队列最大优先队列注意 什么是优先队列 普通的队列都是先入先出的形式,元素在队尾加入,在队头删除。优先队列中,元素被赋予优先级,具有最高优先级的元素先出。通常采用二叉堆结构实现。 所以优先队列和堆一样,有两种形式:最大优先队列和最小优先队列。 最大优先队列是指最大值具有最高优先级。 最小优先队列是值最小值具有最高优先级。 每次的push和pop操作,队列都会动态的调整。 Java中PriorityQueue类实现优先队列。 常用方法 public boo

dycy的博客 2999

Java数据结构 之 PriorityQueue(优先队列)

当谈到数据结构时,很多人可能首先会想到列表(数组)、栈、队列等常见的数据结构。然而,在某些情况下,我们需要一种更高效的方式来处理数据,特别是在涉及到任务调度、事件处理、路径搜索等问题时。这就是优先队列(PriorityQueue)的用武之地。本文将简要介绍优先队列的概念,它的应用领域,以及通过示例演示如何使用它来解决实际问题。

吾家有猫名探花的博客 1万+

算法之Java优先队列与排序的深入探索及应用

在编程的学习过程中,掌握算法和数据结构是提升能力的关键所在。今天,我们一同深入研究Java中的优先队列和排序算法,从基础概念、实现方式到实际应用,希望能和大家共同进步,让我们在算法的世界里探索得更深更远!

wj_rdk的博客 1948

Java 优先队列(PriorityQueue)总结

PriorityQueue 实现的是 Queue 接口 ,可以使用 Queue 提供的方法,以及自带的方法。 1、PriorityQueue概述 Java PriorityQueue 实现了 Queue 接口,不允许放入 null 元素;其通过堆实现,具体说是 通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不 大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue 的底层实现, 数组初始大小为11;也可以用一棵完全二叉树表示。

qq_36511997的博客 2万+

算法之Java优先队列:深度解析与应用实践

在编程学习的道路上,算法和数据结构是提升能力的关键。今天,咱们一起深入探索Java中的优先队列,从基础概念到复杂应用,希望能和大家共同进步,让我们在算法的世界里收获更多知识和技能!

wj_rdk的博客 1764

Android 13 GMS认证避坑:手把手教你搞定RKP配置,解决GTS测试fail

本文详细解析Android 13 GMS认证中的RKP(远程密钥配置)全流程,提供GTS测试失败的深度解决方案。从RKP核心概念到实战配置技巧,帮助开发者规避常见陷阱,确保设备顺利通过Google安全认证,特别适合需要快速掌握Android13 GMS认证的工程师参考。

weixin_29796279的博客 461

【JAVA】优先级队列(堆)

1. 优先级队列:底层是堆(完全二叉树的层序遍历) 2. 优先级队列模拟实现 3. 优先级队列常用方法 4. 优先级队列应用:堆排序、topK问题等。

Xian meng在努力呐-的博客 3769

伪距单点定位算法原理以及利用最小二乘法计算实例

即该公式:建立下列代价函数满足最佳估值的条件为:即:可解得未知参数 X 的最佳估值由于每个可见卫星观测量的精度可能不一样,这时,需要对不同观测量赋予一个权重系数,称为加权。

qq_43381998的博客 1万+

Java语言的优先队列

在某些情况下,我们可能需要定义复杂对象,并根据其属性来设定优先级。这时可以实现Comparable接口或使用Comparator接口来定义优先级。

2501_91226653的博客 910

Hive数据迁移

【迁移背景】 本次需要将老集群的hive数据(共30多张表)迁移至新集群中。 老集群版本为CDH5.13,未启用kerberos; 新集群版本为CDH5.14,启用了kerberos。 由于cloudera官方文档说明,在5.x的版本不支持从未启用kerberos的集群与启用了kerberos的集群之间的数据复制。因此无法通过bdr方式进行数据同步。于是采用手工方式进行测试验证。 第一步...

wangkuangood3200的专栏 469

张量积曲面:数学原理与Python实现

Suv∑i0m∑j0nPij⋅Bipu⋅BjqvSuvi0∑m​j0∑n​Pij​⋅Bip​u⋅Bjq​v其中PijP_{i,j}Pij​是控制点网格,BipuB_i^p(u)Bip​u和BjqvB_j^q(v)Bjq​v是基函数,分别沿uuu和vvv方向定义。

T20151470的博客 1154

java优先队列_Java算法之优先队列

平时用的排序算法是事先给定一段数据,然后对数据整体进行排序。优先队列指的是,一遍收集数据,一遍给数据排序,不管数据的收集是否还在进行,最终得到一个完全二叉树,根节点是最小元素,算法将会把最小元素永远放到树顶,每次也只会取根节点的元素,也就是每取一次数据,若数据被拿出,则自动重新排序,将根节点再次变为最小的。没有拿出数据则不用再次排序。Java已经在jdk1.5为我们实现了这样的数据结构,我们只需要...

weixin_35953401的博客 378

十五、SAP-物料需求计划(MRP)

业务逻辑、功能讲解、图文解析、章节总结

m0_72403327的博客 1089

Java中的优先队列PriorityQueue

翻译自callicoder Java中的优先队列是一种特殊类型的队列,其中所有的元素在创建时都以其自然序或者提供的自定义的Comparator排序。 优先队列的队头包含最小序的元素(根据指定的排序规则),而队尾包含最大序的元素。 因此,当你从优先级队列中删除元素时,根据指定排序规则的最小元素会首先被移除。 创建一个优先队列 这里创建一个整数型的优先队列并且添加一些元素进去。添加完后,我们一个...

FlowingRiver 1112

Open Dynamics Engine(ODE)物理引擎基础教程(I)——特点介绍

下一教程 Open Dynamics Engine(ODE)物理引擎基础教程(II)——相关概念 (在这一教程中将学习刚体、关节、碰撞的概念在ODE中的特点) 本文结构引言介绍特点使用ODE总结 引言 本文翻译自ODE官方教程英文版,有些地方增加了自己的理解。这一节介绍ODE的相关概念。 基础教程英文原版链接【http://ode.org/wiki/index.php?title=Manua...

腿足机器人领域 1676

OpenClaw插件配置错误修复完全指南

插件文件名是插件目录结构正确package.json配置正确OpenClaw的插件系统还在快速迭代,偶尔会遇到这种配置问题。看错误信息检查配置文件检查实际文件对比差异修复问题大部分问题都能解决。查看官方文档:https://openclaw.ai/docs提Issue:https://github.com/openclaw/openclaw/issues加入Discord社区求助快速修复命令汇总。

Maynor的博客 4092

java优先队列

title: java优先队列 date: 2018-12-16 15:54:20 updated: 2020-03-07 13:39:312020-03-07 13:42:15 categories: java tags: - java 此文档为java优先队列的学习总结 java中优先队列和堆的详细使用 来源:java中优先队列和堆的详细使用 优先队列实现 大小根堆 解决top k 问题...

Pop_Rain的博客 621

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

简单光学 1万+

java优先队列出队,如何实现优先队列?Java使用数组实现最小堆和优先队列

一、什么是优先队列?和普通队列有什么区别?优先队列就是一个元素带有权值(priority)的队列,这个权值又叫做优先级,入队和普通队列一样入队,出队按照权值的大小进行优先出队。权值最小的元素先出队的叫做最小优先队列,权值最大的元素先出队的叫做最大优先队列。二、优先队列和堆有什么关系?优先队列就是堆吗?优先队列和堆是不一样的数据结构,但是它们的概念相似,堆主要就是用来实现优先队列的,相近的分类有最小...

weixin_42526415的博客 620

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java优先队列PriorityQueue

文章目录前言PriorityQueue优先队列java中优先队列的声明按优先级排序常见方法private void grow(int minCapacity)public boolean offer(E e)public E poll()public int size()public void clear()public E peek()public boolean isEmpty()总结 前言 今天复习算法时,发现优先队列有些忘记了,就去研究了下优先队列的源码,写个小笔记,加深下理解。 PriorityQ

zly03的博客 1442

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java的优先队列PriorityQueue

一、优先队列概述   优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序,可以放基本数据类型的包装类(如:Integer,Long等)或自定义的类,对于基本数据类型的包装器类,优先队列中元素默认排列顺序是升序排,但对于自己定义的类来说,需要自己定义比较器 二、常用方法 peek()//返回队首元素 poll()//返回队首元素,队首元素出队列 add()//添加元素 size()//返回队列元素个数 isEmpty()//判断队列是否为空,为空返回true,不空返回false

qq_44312950的博客 277

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java优先队列自定义排序

Java优先队列操作

姚军 4668

Java数据结构--优先队列

Java数据结构--树一、平衡树1.1 2-3 查找树1.1.1 2-3查找树的定义1.1.2 查找1.1.3 插入1.1.3.1 向2-结点中插入新键1.1.3.2 向一棵只含有一个3-结点的树中插入新键1.1.3.3 向一个父结点为2-结点的3-结点中插入新键1.3.1.4 向一个父结点为3-结点的3-结点中插入新键1.3.1.5 分解根结点1.3.4 2-3 树的性质1.3.5 2-3树的实现1.2 红黑树1.2.1 红黑树的定义1.2.2 红黑树结点API1.2.3 平衡化1.2.3.1 左旋1.2

placid2的博客 254

Java 优先队列 PriorityQueue

java 优先队列默认是小顶堆,小的先出队。

N1S1O1S1N的博客 1057

浅谈堆以及java优先队列的详细使用

最近在学习集合框架整理下感觉有用的东西。我们知道优先队列其实内部实现就是一个堆的数据结构,java默认的是一个小跟堆,每次取出最小的元素,因为堆的性质他可以做到O(logn)级别的插入和删除操作。我们知道堆的性质是有: 1.堆中某个结点的值总是不大于(或不小于)其父结点的值; 2.堆总是一棵完全二叉树。将根结点最大的堆叫做大根堆,根结点最小的堆叫做小根堆。常见的堆有二叉堆、斐波那契堆等插入:向堆

cquzhengdayday的博客 1万+
上一篇: 最长上升子序列
下一篇: 第十一届蓝桥杯大赛软件类省赛Java大学B组(第一场)
剑气扬名
博客等级 码龄7年 24粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值