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

2025年- H67-Lc175--295.数据流中的中位数(小根堆,大根堆)--Java版

1.题目描述

在这里插入图片描述

2.思路

假设当前加入了:[1, 2, 3, 4, 5, 6],要分成两半:

queMin 存:[3, 2, 1] → 最大堆 → 堆顶是 3

queMax 存:[4, 5, 6] → 最小堆 → 堆顶是 4

中位数 = (3 + 4) / 2 = 3.5
在这里插入图片描述

3.代码实现

class MedianFinder {PriorityQueue<Integer> queMax;// 大根堆,保存较小一半(保存数组中的较小的数,但是堆顶是最大元素。)[3,2,1]PriorityQueue<Integer> queMin; // 小根堆,保存较大一半(保存数组中的较大的数,但是堆顶是最小元素。)[4,5,6]public MedianFinder() {queMax=new PriorityQueue<Integer>((a,b)->(b-a));queMin=new PriorityQueue<Integer>();//小根堆的排序按默认就是升序排序,(a,b)->(a-b)}public void addNum(int num) {if(queMax.isEmpty()||num<=queMax.peek()){//大根堆为空,当前的元素小于等于大根堆的堆顶元素queMax.offer(num);//当前元素入大根堆的队列if(queMin.size()+1<queMax.size()){//大根堆比小根堆多两个元素及以上//将大根堆的堆顶元素入小根堆的队列//大根堆[5,4,3,2,1],小根堆[6,7,8]//更新:大根堆[4,3,2,1],小根堆[5,6,7,8]queMin.offer(queMax.poll());}}else{queMin.offer(num);//大根堆[3,2,1],小根堆[6,7,8,9]//入队之后:大根堆[6,3,2,1],小根堆[7,8,9]if(queMin.size()>queMax.size()){queMax.offer(queMin.poll());}}}public double findMedian() {if(queMax.size()>queMin.size()){//看入队之后的值,也就是更新后的值return  queMax.peek();}else{return (queMax.peek()+queMin.peek())/2.0; }}
}/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder obj = new MedianFinder();* obj.addNum(num);* double param_2 = obj.findMedian();*/

相关文章:

  • Mermaid 绘图--以企业权限视图为例
  • fastadmin+workman环境搭建
  • 光量子计算芯片改变了黄仁勋成见?英伟达拟与PsiQuantum联手颠覆未来算力
  • python第42天打卡
  • linux扫描所有私有网段shell脚本
  • UART协议调试遇到的一个问题
  • 《高等数学》(同济大学·第7版)第一章第五节《极限运算法则》
  • AReaL-boba²:开源异步强化学习训练系统的革命性突破
  • mysq进化
  • 数据结构与算法:动态规划中根据数据量猜解法
  • 如何应对敏捷转型中的团队阻力
  • 题海拾贝:P2347 [NOIP 1996 提高组] 砝码称重
  • CSP is what?
  • 电路设计基础-2
  • unix/linux,sudo,其基本概念、定义、性质、定理
  • UCRT 和 MSVC 的区别(Windows 平台上 C/C++ 开发相关)
  • WES7系统深度定制全流程详解(从界面剥离到工业部署)
  • Java 2D 图形变换方法
  • Cocos creator游戏开发面试题
  • 分享一颗PD协议芯片(取电sink芯片),ECP5701输入电压3V-28V
  • 做网站投注员挣钱吗/上海seo外包公司
  • 上海央企排名前十名/武汉seo工作室
  • 政府网站建设的国际/武汉最新消息今天
  • 对网站的赏析/电子商务网店运营推广
  • 如何让网站不被收录/好口碑的关键词优化
  • 建设网站需要注意什么问题/长春百度推广公司