2019-08-24 剑指 数据流中的中位数

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]

你可能感兴趣的:(2019-08-24 剑指 数据流中的中位数)