算法:数据流中的中位数
创作时间:
作者:
@小白创作中心
算法:数据流中的中位数
引用
CSDN
1.
https://blog.csdn.net/en_joker/article/details/127423628
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
例如,
- [2,3,4] 的中位数是 3
- [2,3] 的中位数是 (2 + 3) / 2 = 2.5
设计一个支持以下两种操作的数据结构:
- void addNum(int num) - 从数据流中添加一个整数到数据结构中。
- double findMedian() - 返回目前所有元素的中位数。
示例1
输入:
["MedianFinder","addNum","addNum","findMedian","addNum","findMedian"]
[[],[1],[2],[],[3],[]]输出:
[null,null,null,1.50000,null,2.00000]
限制
- 最多会对 addNum、findMedian 进行 50000 次调用。
方法:优先队列
MedianFinder:
我们创建两个优先队列,分别保存列表的一半:
小顶堆,保存值较大的一半;
大顶堆,保存值较小的一半;
addNum:
为偶数时,向大顶堆中加入当前值,再将大顶堆的堆顶元素插入到小顶堆;
为奇数时,向小顶堆中加入当前值,再将小顶堆的堆顶元素插入到大顶堆;
findMedian:
为偶数时,中位数取两个堆顶元素之和除以2;
为奇数时,中位数取小顶堆的堆顶元素。
代码如下:
复杂度分析
时间复杂度:
addNum: O(logn),其中 n 为累计添加的数的数量。
findMedian: O(1)。
空间复杂度:O(n),主要为优先队列的开销。
本文原文来自CSDN
热门推荐
终于知道XX指南和XX指北的区别了
属虎与属龙的婚配解析:性格互补、事业协同与家庭和谐
Windows 11电脑缺少DLL文件的解决方案,系统缺少DLL修复七大指南!
实现海鲜自由!青岛海鲜市场深度攻略及选购指南
药食同源:中国人的生命调和智慧
镜子放什么位置好,家居布局中的艺术与风水
小米SU7自动泊车“惊魂一刻”,技术漏洞何时休?
煮鸡蛋防止蛋壳破裂小妙招
设置多个浏览器测试
咖啡豆涨价,谁是产业链上受益者?
农村信用社贷款利息逾期了几天该如何处理
流日紫微斗数(紫微斗数流日盘怎么看)
如何用人工智能设计网页
一文详解华为员工职业发展体系
山西临汾十大旅游景点攻略
全球十大汽车品牌及其影响力解析
“开学第一课”开讲丨重温钱学森航天岁月,感受老一辈科学家精神
从古典到现代,法式风情的多元探索——法式风格效果精选
管涛:人民币汇率波动的影响分析及前瞻
三步教狗狗定点大小便,让家干净整洁
探秘凤仙花叶子形状及其颜色与特点
甲流高发!医生提醒:孩子出现高热惊厥,这 7 个动作千万别做!
四大名楼是蓬莱阁还是鹳雀楼,是蓬莱阁(附四大名楼排名)
1985年,我国正式融入国际知识产权保护体系的历史起点
替吉奥仿制药pk原研药:“实战”效果不分伯仲!
红酒品鉴会活动策划方案
国内含金量最高的30个景区,去过18个这一生值了,你去过几个?
从主播到民宿主:00后女性探索职场新赛道
和夫子庙并列在南京旅游清单的网红打卡点,竟是一座商场的厕所
探秘古代后宫:面首文化及其影响