其他分享
首页 > 其他分享> > 剑指Offer7_大、小顶堆_数据流中的中位数

剑指Offer7_大、小顶堆_数据流中的中位数

作者:互联网

一、题目描述

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

在这里插入图片描述

二、解答

1、大、小顶堆

分析

class MedianFinder {
    PriorityQueue<Integer> left;//大顶
    PriorityQueue<Integer> right;//小顶
    public MedianFinder() {
        left=new PriorityQueue<>((n1,n2)->n2-n1);
        right=new PriorityQueue<>();
    }
    public void addNum(int num) {
    	
        left.add(num);
        // 先进去大顶堆
        right.add(left.poll());
        // 失去平衡,大顶堆数量多了,需要移到小顶堆
        if(left.size()+1<right.size())
            left.add(right.poll());
    }
    public double findMedian() {
        if(right.size()>left.size())return right.peek();
        return (double)(left.peek()+right.peek())/2;
    }
}

标签:大顶,right,中位数,PriorityQueue,Offer7,小顶,left
来源: https://blog.csdn.net/qq_24654501/article/details/120712935