1. 题目
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
2. 解题思路
直接上大佬答案。面试题41. 数据流中的中位数(优先队列 / 堆,清晰图解)
3. 代码实现
3.1 思路1
dfrom heapq import *
class MedianFinder:
def __init__(self):
self.A = [] # 小顶堆,保存较大的一半
self.B = [] # 大顶堆,保存较小的一半
def addNum(self, num: int) -> None:
if len(self.A) != len(self.B):
heappush(self.B, -heappushpop(self.A, num))
else:
heappush(self.A, -heappushpop(self.B, -num))
def findMedian(self) -> float:
return self.A[0] if len(self.A) != len(self.B) else (self.A[0] - self.B[0]) / 2.0
4. 总结
伤不起。
班主任:“袁华同学,你怎么了?”
袁华:“这道题太难了,我不会做!o(╥﹏╥)o”
5. 参考文献
[1] 剑指offer丛书
[2] 剑指Offer——名企面试官精讲典型编程题
[3] 面试题41. 数据流中的中位数(优先队列 / 堆,清晰图解)