题解 | #数据流中的中位数#

数据流中的中位数

https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1

#include <algorithm>
class Solution {
// 官解三
// 使用堆
public:
    #define SCD static_cast<double>
    priority_queue<int> min_q; // 大顶堆 存储前面的部分  此处规定长度大于等于后面的部分 相差1
    priority_queue<int, vector<int>, greater<int>> max_q; // 小顶堆

    void Insert(int num) {

        //先加入前半部分
        min_q.push(num);
        max_q.push(min_q.top()); // 自动排序后 把前面的最大值 插入到后半部分
        min_q.pop();

        // 刷新两者的数量 按照规定前面的要不小于后面
        if(min_q.size()<max_q.size())
        {   //否则就平衡下
            min_q.push(max_q.top());
            max_q.pop();
        }
        
    }

    double GetMedian() { 
        double ans;
        if(min_q.size() == max_q.size())
        {
            ans = (min_q.top() + max_q.top())/2.;
        }
        else
        {
            ans = double(min_q.top());
            
        }
        return ans;
    
    }

};

使用两个堆 还是挺巧妙地

全部评论

相关推荐

生命诚可贵:先不说内容怎么样 排版就已经太差劲了 第一眼看不到重点,第二眼已经没有再看的耐心了, 篇幅占的太满了 字体不要用灰色 观感不好 想重点突出的黑色加粗就可以了 多列要点 少些大段的句子 项目经历把项目用的技术要点列出来,光写个python plc什么的太宽泛了 自我评价也有点偏多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务