当前位置: 首页 > news >正文

双堆法求数据流的中位数

在这里插入图片描述

代码逻辑

这道题的关键在于如何在动态添加元素的过程中,快速找到中位数。

我们可以用一个大顶堆(maxHeap)存储较小的一半元素,堆顶是这部分的最大值和一个小顶堆(minHeap)存储较大的一半元素,堆顶是这部分的最小值,这样的话,中位数就在两个堆的堆顶附近!

1.添加元素

添加新元素时, 如果大顶堆为空,或新元素 ≤ 大顶堆堆顶 → 放入大顶堆,否则 → 放入小顶堆。
如果两个堆的大小差为 2,就从元素多的堆中取出堆顶,放入另一个堆。

2.查找中位数

如果两个堆大小相等 → 中位数 = (大顶堆堆顶 + 小顶堆堆顶) / 2;

如果大小不等 → 中位数 = 元素多的那个堆的堆顶。

代码实现

class MedianFinder {private PriorityQueue<Integer> maxHeap;  // 大顶堆,存储较小的一半private PriorityQueue<Integer> minHeap;  // 小顶堆,存储较大的一半public MedianFinder() {// Java的PriorityQueue默认是小顶堆,需要自定义比较器实现大顶堆maxHeap = new PriorityQueue<>((a, b) -> b - a);minHeap = new PriorityQueue<>((a, b) -> a - b);}public void addNum(int num) {// 决定新元素放入哪个堆if (maxHeap.isEmpty() || maxHeap.peek() >= num) {maxHeap.add(num);} else {minHeap.add(num);}// 调整两个堆的平衡balance();}public double findMedian() {if (maxHeap.size() == minHeap.size()) {// 偶数个元素,返回两个堆顶的平均值return (double) (maxHeap.peek() + minHeap.peek()) / 2;} else {// 奇数个元素,返回元素多的那个堆的堆顶return maxHeap.size() > minHeap.size() ? maxHeap.peek() : minHeap.peek();}}private void balance() {// 如果两个堆的大小差为2,需要调整if (Math.abs(maxHeap.size() - minHeap.size()) == 2) {if (maxHeap.size() > minHeap.size()) {minHeap.add(maxHeap.poll());} else {maxHeap.add(minHeap.poll());}}}
}
http://www.dtcms.com/a/525229.html

相关文章:

  • 平面设计师灵感网站开发三味
  • 使用Requests和正则表达式实现起点中文网小说爬取
  • 擅自使用他人产品做网站宣传网站后台编辑器上传不了图片
  • argocd发布实现预检和后检能力
  • 受欢迎的免费网站建设游戏开发和网站开发哪个好玩
  • 网站建设 软件开发的公司办公网站模板
  • 内蒙古知名网站建设wordpress 摄影博客
  • 掌握 Gemini CLI:自定义命令 (Slash Commands)
  • 平面设计师常用网站铁岭网站建设公司
  • 个人网站做推广wordpress增加论坛
  • oracle存储过程详解
  • 多线程六脉神剑第三剑:信号量 (Semaphore)
  • 网站外链怎么购买网站建设方案计划书
  • 在C#中详细介绍一下Visual Studio中如何使用数据可视化工具
  • TDengine 数据函数 ROUND 用户手册
  • 网上做网站怎么做下拉菜单广告设计软件下载
  • LeetCode 406 - 根据身高重建队列
  • ELK运维之路(异常日志告警)
  • 从零开始的C++学习生活 14:map/set的使用和封装
  • 只做同城交易的网站wordpress自定义文章类型分类模板
  • 做外贸要看哪些网站阿里云做网站怎么样
  • 常州市经开区建设局网站东莞h5网站建设
  • 个人做网站需要多少钱seo网址大全
  • Python进阶(11-2):Python游戏编程-FlappyBird
  • 网站制作怎么做网站建设平台多少钱
  • [OP-Agent] 可扩展架构 | 插件管理器plugins.go
  • ps做图游戏下载网站有哪些保定百度关键词优化
  • Python 快速提取扫描件 PDF 中的文本:OCR 实操教程
  • 做外贸需要什么网站大连网站排名网络推广公司
  • JP4-8-MyLesson前台前端(三)