题目描述[原题链接][https://leetcode-cn.com/problems/find-median-from-data-stream/]
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。
例如,
[2,3,4] 的中位数是 3
[2,3] 的中位数是 (2 + 3) / 2 = 2.5
设计一个支持以下两种操作的数据结构:
- void addNum(int num) - 从数据流中添加一个整数到数据结构中。
- double findMedian() - 返回目前所有元素的中位数。
示例:
1 | addNum(1) |
进阶:
- 如果数据流中所有整数都在 0 到 100 范围内,你将如何优化你的算法?
- 如果数据流中 99% 的整数都在 0 到 100 范围内,你将如何优化你的算法?
算法描述
创建一个向量,每进来一个元素,先判断当前向量是否为空,向量为空,直接添加元素至向量中,不为空,找到比当前元素小的第一个元素,通过lower_bound()
函数即可,将当前元素插入,使每次进入后,向量中的元素仍然有序,当要找中位数时,分奇偶,分别返回结果;
C++代码
1 | class MedianFinder { |
Java代码
1 | class MedianFinder { |