题目链接: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]) / 2else:return self.min_heap[0]
