https://blog.csdn.net/qq_33575542/article/details/80881015
数据需要平均分配,所以就假定count是偶数就存入大顶堆,奇数个就存入小顶堆,再根据小顶堆所有数都比大顶堆大的原则进行调节,即小堆顶堆顶比大顶堆堆顶要大。
【注意】python中heapq模块提供的是小顶堆,如果要实现大顶堆,就需要通过以下方式:
from heapq import *
heappush(self.MaxData, -num) # 将实际数取反放入
maxvalue = -heappop(self.MaxData) # 将取出的堆值取反
资料:python中的heapq
python2.7代码如下:
# -*- coding:utf-8 -*-
from heapq import *
class Solution:
def __init__(self):
self.MinData = []
self.MaxData = []
self.count = 0
def Insert(self, num):
# write code here
if self.count & 1:
heappush(self.MinData, num)
minvalue = heappop(self.MinData)
heappush(self.MaxData, -minvalue)
else:
heappush(self.MaxData, -num)
maxvalue = -heappop(self.MaxData)
heappush(self.MinData, maxvalue)
self.count = self.count + 1
def GetMedian(self,h):
if self.count & 1: #如果是奇数就返回小顶堆堆顶,因为此时小顶锥个数比大顶堆个数多1
return self.MinData[0]
return (self.MinData[0]- self.MaxData[0]) / 2.0