zoukankan      html  css  js  c++  java
  • 数据流中的中位数

    构造两个堆,左大顶堆,右小顶堆。

    如果奇数,中位数就是做大顶堆的root;如果是偶数,中位数就是两个顶堆root的平均值

    class Solution {
    private:
        vector<int> min;
        vector<int> max;
    public:
        void Insert(int num)
        {
            if(((min.size()+max.size())&1)==0){
                //偶数
                //一般先都考虑左大顶堆,再考虑右小顶堆
                //若num大于右小顶堆root,那就直接放入右小顶堆,不用再考虑左大顶堆了
                if(min.size()>0 && num>min[0]){
                    //如果大于左小顶堆root,就放入左小顶堆中
                    min.push_back(num);
                    push_heap(min.begin(),min.end(),greater<int>());
                    num=min[0];
                    pop_heap(min.begin(),min.end(),greater<int>());
                    min.pop_back();
                }
                //num小于右小顶堆,所以放入左大顶堆
                max.push_back(num);
                push_heap(max.begin(),max.end(),less<int>());
            }
            else{
                //奇数
                if(max.size()>0 && num<max[0]){
                    max.push_back(num);
                    push_heap(max.begin(),max.end(),less<int>());
                    num = max[0];
                    pop_heap(max.begin(),max.end(),less<int>());
                    max.pop_back();
                }
                min.push_back(num);
                push_heap(min.begin(),min.end(),greater<int>());
            }
        }
        double GetMedian()
        {
            int len=min.size()+max.size();
            if(len<=0) return NULL;
            double middle=0;
            if((len&1)==0) middle=(double)(min[0]+max[0])/2;
            else middle=(double)max[0];
            return middle;
        }
    };
  • 相关阅读:
    auth
    django缓存机制
    图片防盗链
    用户相关
    验证码
    单个容器部署django (docker + django + uwsgi)
    MySQL性能调优的10个方法
    数据库-外键
    数据库(存储引擎、字段类型、约束条件)
    数据库
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11269553.html
Copyright © 2011-2022 走看看