解法一:有序列表保存数据流
addNum 查找元素插入位置o(logn)(二分查找)+ 插入元素o(n)
findNum o(logn)
解法二:建立一个大根堆和小根堆,空间复杂度o(n)
addNum o(logn)
findNum o(1)
from heapq import *
class MedianFinder:
def __init__(self):
self.A=[]
self.B=[]
def addNum(self, num: int) -> None:
if len(self.A) == len(self.B):
heappush(self.B,-num)
heappush(self.A,-heappop(self.B))
else:
heappush(self.A,num)
heappush(self.B,-heappop(self.A))
def findMedian(self) -> float:
return self.A[0] if len(self.A) != len(self.B) else (self.A[0]-self.B[0])/2
# Your MedianFinder object will be instantiated and called as such:
# obj = MedianFinder()
# obj.addNum(num)
# param_2 = obj.findMedian()