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]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Heap in python Heap,即堆,也就是优先队列。我们可以在这里找到[]维基百科](https://e...
    英武阅读 7,743评论 0 51
  • 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值...
    Max_7阅读 4,628评论 0 0
  • 人生中,我们都会遇到很多选择的机会,小到交通工具,大到人生伴侣,事业投资……等等 去某个地方,是选择飞机还是火车?...
    爱一茶江泳阅读 832评论 0 0
  • - 我是个“网瘾少女”,所以我在网上看到的故事、信息比同龄人要多的多。 因为我“来者不拒”,所以看到故事里面既有男...
    DIPPER星阅读 1,215评论 0 1
  • 早睡早起: 7/7(6:00~23:00) 健康饮食: 7/7(蒸杂粮蔬菜饭,鸡蛋,虾,鱼) 运动: 2/7(45...
    马润芳阅读 548评论 0 0