题目
设计一个支持以下两种操作的数据结构:
void addNum(int num)- 从数据流中添加一个整数到数据结构中。double findMedian()- 返回目前所有元素的中位数。
示例:
addNum(1)addNum(2)findMedian() -> 1.5addNum(3)findMedian() -> 2
方案一(两个堆)**
class MedianFinder:def __init__(self):"""initialize your data structure here.1. lo 为大顶堆2. hi 为小顶堆每个堆各保持一半的元素,如果元素总数为奇数个,则放入大顶堆"""self.hi = []self.lo = []def addNum(self, num: int) -> None:# 注意调整堆的平衡heapq.heappush(self.lo, num)heapq.heappush(self.hi, -heapq.heappop(self.lo))if len(self.lo) < len(self.hi):heapq.heappush(self.lo, -heapq.heappop(self.hi))def findMedian(self) -> float:if (len(self.hi) + len(self.lo)) % 2 == 1:return self.lo[0]else:return (self.lo[0] - self.hi[0]) / 2
原文
https://leetcode-cn.com/explore/interview/card/2020-top-interview-questions/291/design/1303/
https://leetcode-cn.com/problems/find-median-from-data-stream/solution/shu-ju-liu-de-zhong-wei-shu-by-leetcode/
