Find Median from Data Stream
一个最大堆和一个最小堆,头对头顶着的数就是中位数了,这道题虽然难,但是可以写的非常简单
class MedianFinder(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.minHeap = []
self.maxHeap = []
def addNum(self, num):
"""
:type num: int
:rtype: void
"""
heapq.heappush(self.maxHeap, -num)
heapq.heappush(self.minHeap, -heapq.heappop(self.maxHeap))
if len(self.maxHeap) < len(self.minHeap):
heapq.heappush(self.maxHeap, -heapq.heappop(self.minHeap))
def findMedian(self):
"""
:rtype: float
"""
if len(self.minHeap) == len(self.maxHeap):
return (self.minHeap[0] - self.maxHeap[0]) * 1.0 / 2
return -self.maxHeap[0]