题目链接:https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/
难度:困难
描述:
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
题解
from heapq import *
class MedianFinder:
def __init__(self):
self.max_heap = [] # 保存较小部分的元素,并对元素取反,因为python的堆是小根堆
self.min_heap = [] # 保存较大部分的元素
def addNum(self, num: int) -> None:
if len(self.max_heap) == len(self.min_heap):
heappush(self.max_heap, -num)
heappush(self.min_heap, -heappop(self.max_heap))
else:
heappush(self.min_heap, num)
heappush(self.max_heap, -heappop(self.min_heap))
def findMedian(self) -> float:
if len(self.max_heap) == len(self.min_heap):
return (-self.max_heap[0] + self.min_heap[0]) / 2
else:
return self.min_heap[0]