参考文章
http://yaronspace.cn/blog/archives/1306
利用堆来实现前k个元素已经不稀奇了。对于实现中位数的方法了?因为n的大小一直在变化,所以如果定义k=n/2,k也是不确定的。所以一个堆的方法就显得不可行了。
由此我觉得文章中的这种方法是很赞的。
两个堆,一个最大堆来实现储存比中位数m小或者相等的值,一个最小堆来储存比m大或者相等的值,当有新的数进来,根据与m的关系,大于m的值放到最小堆,小于m的值放到最大堆。当两个堆的元素个数差值大于1时,就表明,中位数变了,不是原来的m,这时候应该把m插入到元素个数小的堆中,然后从元素个数多的堆中取出最大或者最小的元素出来当做m