算法:数据流中的中位数
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
例如,
- [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),主要为优先队列的开销。
END
骐骥一跃,不能十步;驽马十驾,功在不舍;锲而舍之,朽木不折;锲而不舍,金石可镂,赠友人。
好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。
算法:数据流中的中位数相关推荐
- 数据结构与算法之字符凭拼接最低字典序和数据流中取中位数
数据结构与算法之字符凭拼接最低字典序和数据流中取中位数 目录 字符凭拼接最低字典序 数据流中取中位数 1. 字符凭拼接最低字典序 题目描述 思路: 创建一个比较器,比较的内容是(o1+o2).comp ...
- Leetcode295 数据流中的中位数-最小堆和最大堆
题目 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如,[2,3,4] 的中位数是 3:[2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两 ...
- 数据流中的中位数,我轻敌了
前言 大家好,我是bigsai.最近轻敌了一个高频问题,分享给大家. 最近面试时候遇到一个非常有意思的hard题,面试官没让写代码让说思路,但放在正常应届生招聘那可能就要手撕了,在剑指offer的第4 ...
- [剑指Offer] 数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 对 ...
- 从数据流中获取中位数
从数据流中获取中位数 需求描述 需求分析 C++代码如下 python代码 需求描述 有一个动态的数据流,如何比较快的获得数据流的中位数.这个过程中,数据流可能会有新的数据加入.中位数定义为元素个 ...
- 剑指offer:面试题41. 数据流中的中位数
题目:数据流中的中位数 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数 ...
- 《剑指offer》-- 序列化二叉树、二叉搜索树的第k个节点、数据流中的中位数、滑动窗口的最大值
一.序列化二叉树: 1.题目: 请实现两个函数,分别用来序列化和反序列化二叉树. 2.解题思路: (1)根据前序遍历规则完成序列化与反序列化.所谓序列化指的是遍历二叉树为字符串:所谓反序列化指的是依据 ...
- 《剑指offer》数据流中的中位数
题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 解析: ...
- 牛客网 在线编程 数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值.我们 ...
最新文章
- 题解 UVA10328 【Coin Toss】
- mac os 录屏快捷键_Mac跨平台自动同步记事本
- 使用Runnable配合Thread创建线程
- 【bfs】Replication G(P7151)
- vue新版router.addRoute基础用法
- 2018-2019-2 实验四 Android程序设计
- Java JavaBean
- HDOJ---1267 下沙的沙子2[DP或卡特兰数]
- wifi驱动总结(2)
- Rad Software Regular Expression Designer 正则表达式工具软件
- java毕业设计古典舞在线交流平台mybatis+源码+调试部署+系统+数据库+lw
- Microsoft Office XP 智能标记的安装和安全性
- odoo rest api 服务接口
- LSF - 集群概览
- 鼠标光标变成方块怎么办
- HCIA网络基础7-VRP和命令行基础
- 【HCNP-OSPF】LSA
- 【STM32】RTC实时时钟概述、寄存器、库函数(RTC一般步骤)
- 智能照明新的低成本解决方案?涂鸦 Beacon 智能灯泡初体验
- 删除字符串中的数字字符
热门文章
- 全球及中国左旋肉碱富马酸盐行业发展趋势与需求形势预测报告(2022-2027年)
- 【基础入门题072】转置矩阵
- python安装osgeo及shapefile库、is not a supported wheel on this platform 的问题
- 关于GPS坐标转换(一)
- visio使用小知识
- 天猫精灵 python 控制_天猫精灵的高阶玩法-控制我的电脑
- PHP检查端口是否可以被绑定
- MySQL 完全备份 + 增量备份+完全恢复
- colorAccent,colorPrimary,colorPrimaryDark做什么的?
- vue中this.$router.params接收传值为空咋办