题目链接:https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/
难度:困难

描述:
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

题解

  1. from heapq import *
  2. class MedianFinder:
  3. def __init__(self):
  4. self.max_heap = [] # 保存较小部分的元素,并对元素取反,因为python的堆是小根堆
  5. self.min_heap = [] # 保存较大部分的元素
  6. def addNum(self, num: int) -> None:
  7. if len(self.max_heap) == len(self.min_heap):
  8. heappush(self.max_heap, -num)
  9. heappush(self.min_heap, -heappop(self.max_heap))
  10. else:
  11. heappush(self.min_heap, num)
  12. heappush(self.max_heap, -heappop(self.min_heap))
  13. def findMedian(self) -> float:
  14. if len(self.max_heap) == len(self.min_heap):
  15. return (-self.max_heap[0] + self.min_heap[0]) / 2
  16. else:
  17. return self.min_heap[0]