数据流中的中位数

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。

public class Solution {
    public PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();
    public PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(new Comparator<Integer>(){
        public int compare(Integer a, Integer b){
            return b-a;
        }
    });
    int len=0;
    
    public void Insert(Integer num) {
        if(len%2==0){
            minHeap.offer(num);
            maxHeap.offer(minHeap.poll());
        }else{
            maxHeap.offer(num);
            minHeap.offer(maxHeap.poll());
        }
        len++;
    }

    public Double GetMedian() {
        if(len%2==0){
            return Double.valueOf((minHeap.peek()+maxHeap.peek())/2.0);
        }else{
            return Double.valueOf(maxHeap.peek());
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文首发于我的个人博客:尾尾部落 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数...
    繁著阅读 608评论 0 1
  • 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数...
    稀饭粥95阅读 335评论 0 0
  • 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数...
    万事屋FIN阅读 864评论 0 0
  • 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值...
    Gxxx_xx阅读 2,534评论 2 2
  • 题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。...
    NoFacePeace阅读 170评论 0 0