leetcode 295. 数据流的中位数(优先队列 想法)

https://leetcode-cn.com/problems/find-median-from-data-stream/

题意:

给一个字节流,找出中位数

解析:

维护两个size几乎相同的堆,较大的一半数放在小顶堆,较小的一半数放在大顶堆。

中位数由两个堆顶元素决定。

代码:

class MedianFinder {
public:
    MedianFinder() {}
    priority_queue<int>Big;
    priority_queue<int,vector<int>,greater<int> >Small;

    void addNum(int num) {
        if(Small.empty()&&Big.empty())
            Big.push(num);
        else if(Small.empty())
            Big.push(num);
        else if(Big.empty())
            Small.push(num);
        else if(num<=Small.top())
            Big.push(num);
        else
            Small.push(num);

        if(Small.size()>Big.size()){
            Big.push(Small.top());
            Small.pop();
        }
        if(Big.size()-Small.size()>1){
            Small.push(Big.top());
            Big.pop();
        }
    }

    double findMedian() {
        int sum=Small.size()+Big.size();
        if(sum&1)
            return Big.top();
        else
            return 1.0*(Small.top()+Big.top())/2;
    }
};
发布了790 篇原创文章 · 获赞 348 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/jk_chen_acmer/article/details/105468507
今日推荐