美文网首页
2019-08-24 剑指 数据流中的中位数

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

作者: mztkenan | 来源:发表于2019-08-24 13:27 被阅读0次

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 剑指 数据流中的中位数

      本文链接:https://www.haomeiwen.com/subject/jobfectx.html