30min,在 python的heapq中只有最小堆,没有最大堆,可以取-值,但是有点麻烦,很容易错。可以封装一下。逻辑没错,就是最大堆的处理会麻烦
from heapq import *
class Solution:
def __init__(self):
self.cnt=0
self.maxlist=[]
self.minlist=[]
def Insert(self, num):
self.cnt+=1
if self.cnt%2==1: # 加入左边
if self.minlist and num>self.minlist[0]:
heappush(self.maxlist,-heappop(self.minlist)) #-
heappush(self.minlist,num)
else:heappush(self.maxlist,-num) #-
else: # 加入右边
if num<-self.maxlist[0]: # 这里要变成-
heappush(self.minlist,-heappop(self.maxlist)) # - 同时pop写成了push
heappush(self.maxlist,-num)
else:heappush(self.minlist,num)
def GetMedian(self,n):
if self.cnt==0:return 0
if self.cnt%2==0:return (self.minlist[0]-self.maxlist[0])/2.0
else:return -self.maxlist[0]