使用优先级队列实现大小顶堆
例题:

class MedianFinder {PriorityQueue<Integer> left;  //创建大顶堆PriorityQueue<Integer> right; //创建小顶堆/** initialize your data structure here. */public MedianFinder() {//大顶堆排序方式为降序 9、8、7、....left = new PriorityQueue<>((n1,n2)->n2-n1);//小顶堆排序方式为升序1、2、3、...right = new PriorityQueue<>();}/***每次添加时,优先加入大顶堆,然后加入小顶堆,可以理解为有A、B两个筐每次加入水果时,先加入A筐,然后将A筐里最好的那一个水果加入B筐,接着为              了不让A筐里没有水果,让相差数不为1,相当于一个临界的中位数,如果相差为1了,那么将B框里最差的那个水果还到A框中。每次加入水果时,重复这个操作。全部水果加进去后,最好两个框里水果排序(1、2、3、4、5、6、7、8):A:4、3、2、1   (顶为4)B:5、6、7、8 (顶为5)B框中最差的水果比A框中最好的水果还要好,那么临界中位值就出来了,如果B比A大1,那么中位数就是B框的顶,否则就是A框顶和B框顶的和*/public void addNum(int num) {left.add(num);right.add(left.poll());if(right.size()-left.size()>1){left.add(right.poll());}}public double findMedian() {if(right.size() > left.size()) return right.peek();return (double)(left.peek() + right.peek())/2;}
}/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder obj = new MedianFinder();* obj.addNum(num);* double param_2 = obj.findMedian();*/

原题链接
另外对于优先级队列的一些问题
当优先级队列加入元素时,如果不指定,默认为升序,否则为降序
当加入元素之后进行遍历时,优先级队列输出的结果不一定会按顺序排列,但是进行poll操作取出后的元素,都是按顺序排列的,他只会让需要的元素在队列的顶

import java.util.Comparator;
import java.util.PriorityQueue;public class Demo{public static void main(String[] args) {PriorityQueue<Integer> left  = new PriorityQueue<>(Comparator.reverseOrder());PriorityQueue<Integer> right = new PriorityQueue<>();for (int i = 0; i < 10; i++) {left.add(i);right.add(i);}System.out.println("降序序列:");for (int i : left){System.out.print(i+" ");}System.out.println();while (!left.isEmpty()){System.out.print(left.poll()+" ");}System.out.println();System.out.println("升序序列:");for (int i : right){System.out.print(i+" ");}}
}

输出结果

降序序列:
9 8 5 6 7 1 4 0 3 2
9 8 7 6 5 4 3 2 1 0
升序序列:
0 1 2 3 4 5 6 7 8 9

for循环内加入顺序反过来同理。

java大顶堆小顶堆使用案例相关推荐

  1. 剑指Offer之寻找数据流中的中位数【包含大顶堆小顶堆解释】

    数据流中的中位数 题目描述 题解 最小堆和最大堆解释 参考链接 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶 ...

  2. 大顶堆小顶堆优先队列

    特性和应用场景 大顶堆小顶堆,也叫优先队列,是一种基于数组+平衡二叉树的数据结构. 主要用于排序,增减操作的速度较快(O(logn)) 适合带有优先级的排序场景,比如处理订单的时候,VIP用户的优先级 ...

  3. 大顶堆小顶堆java_《排序算法》——堆排序(大顶堆,小顶堆,Java)

    十大算法之堆排序:堆的定义例如以下: n个元素的序列{k0,k1,...,ki,-,k(n-1)}当且仅当满足下关系时,称之为堆. " ki<=k2i,ki<=k2i+1;或ki ...

  4. Java堆排序(大顶堆小顶堆及应用实例)

    自己理解所得,如有错误欢迎随时指摘: 目录: 堆概念 堆结构 堆排序步骤 大顶堆代码.小顶堆代码 实际应用及实例代码 小顶堆删除图解代码.插入代码 小顶堆插入图解 时间复杂度分析 1.百度->概 ...

  5. leetcode 面试题 17.14. 最小K个数 大顶堆 小顶堆 快排

    leetcode 面试题 17.14. 最小K个数 [难度:中等] 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例: 输入: arr = [1,3,5,7,2,4,6,8], ...

  6. 【LeetCode笔记】347. 前K个高频元素(Java、优先队列、小顶堆、HashMap)

    文章目录 题目描述 思路 & 代码 更新版:引入 stream 流 + Lambda 题目描述 时间复杂度小于O(n*logn),否则直接sort,再遍历就很轻松. 很有学习价值的题目,第一次 ...

  7. 优先队列 -- 大顶堆,小订堆

    什么是堆(Heap) 优先队列(Priority Queue):特殊的"队列",取出元素的顺序优先权的大小,而不是元素在队列的先后顺序; 1.使用完成二叉树; 2.数组表述; 堆中 ...

  8. 《漫画算法》源码整理-4 大顶堆 小顶堆 优先队列

    堆操作 import java.util.Arrays;public class HeapOperator {/*** 上浮调整* @param array 待调整的堆*/public static ...

  9. 大顶堆和小顶堆-java

    一.大顶堆和小顶堆的原理 1.大顶堆 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大顶堆.大根堆要求根节点的关键字既大于或等于左子树的关键字值,又大于或等于右子树的关键字值. 2.小 ...

最新文章

  1. 信息安全系统设计基础第十周学习总结
  2. python双引号和单引号区别_Python中单引号,双引号,3个单引号及3个双引号的区别...
  3. Spring MVC请求处理流程
  4. z-wave问题汇总
  5. RHadoop和CDH整合实例(三)- RHive
  6. android 自定义进度条_第一百八十九回:Android中自定义ProgressBar三
  7. C/C++ realloc()函数解析
  8. 解决js动态改变dom元素属性后页面及时渲染问题
  9. 开课吧python小课学了有用吗-考研人注意了,停下手头的活,再忙也要看一下这个!...
  10. java发送短信的发送报告处理
  11. 提升网络销售转化率的10种方法
  12. 学习Java的9张思维导图
  13. 猿创征文|[CM311-1A Armbian]-烧录制作 Armbian 系统盘以及写入 CM311-1A 机顶盒的 EMMC 刷成服务器
  14. 程序员应该掌握的英语词汇
  15. 面试题,你为什么想做产品经理?
  16. 用计算机弹歌万有引力,2011秋11计算机班物理单元测试题1.doc
  17. ArcGIS教程:视域
  18. python爬虫爬取京东_python爬取京东价格
  19. 中国电子级玻纤布市场产销调研及投资前景预测报告2022-2028年
  20. 网络安全行业含金量高的证书有哪些?

热门文章

  1. 一面向对象设计动物乐园
  2. asp.net网上房屋中介系统管理
  3. 使您的软件运行起来: 防止缓冲区溢出(转)
  4. 咬文嚼字的有趣例子_咬文嚼字的古今中外的例子
  5. html让圆点闪烁,利用jQ CSS3实现圆点闪烁背景动效
  6. vue中使用js进行AES加密及解密(含密钥和iv偏移量)、以及HMAC-SHA256加密方法对于签名加密的使用
  7. Orange与中兴通讯完成欧洲首个100% 5G通话
  8. 传统行业是否使用微服务的讨论——不够痛就别微服务
  9. 【SCI】latex 各种技巧说明
  10. 免费溯源系统下载及说明----第3篇(已开源)