【Hot 100】295. 数据流的中位数

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:算法专栏
  • 💥 标题:【Hot 100】295. 数据流的中位数
  • ❣️ 寄语:书到用时方恨少,事非经过不知难!

引言

中位数的题目,在吉比特面试的时候遇到过,大量的数据如何快速查找中位数,而且还有频繁的插入和删除操作。

数据流的中位数

  • 🎈 题目链接:
  • 🎈 做题状态:

我的解题

class MedianFinder {
private:
    priority_queue<int, vector<int>, less<int>> queMin;
    priority_queue<int, vector<int>, greater<int>> queMax;
    
public:
    MedianFinder() {
        
    }
    
    void addNum(int num) {
        if (queMin.empty() || num <= queMin.top())
        {
            // 如果queMin为空,或者当前数值小于queMin,则将数据插入到queMin中
            queMin.push(num);
            // 插入完数据后,还需要平衡两边的队列大小
            if (queMax.size() + 1 < queMin.size())
            {
                // 两边相差2个数据时,需要将多的转移到少的容器中
                queMax.push(queMin.top());
                queMin.pop();
            }
        } 
        else
        {
            // 当前数据大于 queMin 中的最大值,需插入 queMax 中
            queMax.push(num);
            // 插入之后需要平衡,因为 queMin 的设定是大于等于 queMax 中元素个数
            if (queMax.size() > queMin.size())
            {
                queMin.push(queMax.top());
                queMax.pop();
            }
        }


    }
    
    double findMedian() {
        // 如果 queMin 个数大于 queMax,则中位数就是 queMin 的top
        if (queMin.size() > queMax.size()) return queMin.top();
        return (queMax.top() + queMin.top()) / 2.0;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值