0295: Find Median from Data Stream

import heapq

class MedianFinder:
    def __init__(self):
        self.minheap = []
        self.maxheap = []
        
    def addNum(self, num):
        if (not self.maxheap) or (-self.maxheap[0] >= num):
            heapq.heappush(self.maxheap, -num)
        else:
            heapq.heappush(self.minheap, num)
        
        if len(self.maxheap) < len(self.minheap):
            heapq.heappush(self.maxheap, -heapq.heappop(self.minheap))
        if len(self.maxheap) - 1 > len(self.minheap):
            heapq.heappush(self.minheap, -heapq.heappop(self.maxheap))
                
    def findMedian(self):
        if len(self.minheap) == len(self.maxheap):
            return (self.minheap[0] - self.maxheap[0]) / 2
        return -self.maxheap[0]