• 面试题66:数据流之中的中位数


    这道题是用最大堆和最小堆来实现的问题。难度颇大。现在我先着重搞明白之中的代码是怎么回事。

    //test 64 数据流中的中位数
    template<typename T> class DynamicArray
    {
    public:
        void Insert(T num)
        {
            if ((min.size() + max.size()) & 1 == 0)//数据流之中的数字数目为偶数
            {
                if (max.size()>0 && num<max[0])
                {
                    max.push_back(num);//就把新接收到的数字送进最大堆之中。
                    push_heap(max.begin(), max.end(), less<T>());//经过此操作,堆排序之后,直接把最大的元素送到堆顶!
                    num = max[0];//找到最大堆之中最大的元素
                    pop_heap(max.begin(), max.end(), less<T>());//std::pop_heap将front(即第一个最大元素)移动到end的前部,同时将剩下的元素重新构造成(堆排序)一个新的heap。
                    max.pop_back();
                }
                min.push_back(num);
                push_heap(max.begin(), max.end(), less<T>());
            }
            else
            {
                if (min.size()>0 && num > min[0])
                {
                    min.push_back(num);
                    push_heap(min.begin(), min.end(), greater<T>());
    
                    num = min[0];
    
                    pop_heap(min.begin(), min.end(), greater<T>());
    
                    min.pop_back();
                }
                max.push_back(num);
                push_heap(max.begin(), max.end(), less<T>());
            }
            
            T GetMedian()
            {
                int size = min.size() + max.size();
                if (size == 0)
                    throw exception("No numbers are avaiable");
    
                T median = 0;
                if ((size0x01) == 1)
                    median = min[0];
                else
                    median = (min[0] + max[0]) / 2;
    
                return median;
            }
        }
    private:
        vector<T> min;
        vector<T> max;
    };
  • 相关阅读:
    使用webService时,gsoap数据类型注意事项
    DB:HQL
    云:政务云
    专业词汇:电子政务(政府运作模式)
    Java-框架-Dubbo:Dubbo
    架构-Java-Netty:Netty框架
    职业-企业家:企业家
    信息服务:高考填报志愿综合参考系统
    Java-Class-FC:java.time.Duration.java
    Java-Class-@I:java.annotation.Resource.java
  • 原文地址:https://www.cnblogs.com/chengxuyuanxiaowang/p/4308260.html
Copyright © 2020-2023  润新知