• 54. 数据流中的中位数


    思路:AcWing 54. 数据流中的中位数

               将数组分成两半,一个大顶堆和一个小顶堆,大顶堆维护小于中位数的所有元素,小顶堆维护大于中位数的所有元素,两个堆的元素数量差不能超过2,超过2就互相匀一匀。

    代码:

    class Solution {
            priority_queue<int> maxHeap;//大顶堆维护小于中位数的所有元素
            priority_queue<int, vector<int>, greater<int>> minHeap;//小顶堆维护大于中位数的所有元素。数字越大,优先级越低
    public:
        void insert(int num){
            maxHeap.push(num);//每次直接把当前数插入到下一个堆
            /*两个堆的元素数量差不能超过2,超过2就互相匀一匀*/
            if(maxHeap.size() > minHeap.size() + 1)
            {
                int t = maxHeap.top();
                maxHeap.pop();
                minHeap.push(t);
            }
            /*如果大顶堆最大值 大于 小顶堆最小值,则交换*/
            while(minHeap.size() && maxHeap.top() > minHeap.top())//保证大顶堆有元素,同时大顶堆最大值大于小顶堆最小值
            {
                int t1 = maxHeap.top();
                int t2 = minHeap.top();
                maxHeap.pop(); maxHeap.push(t2);
                minHeap.pop(); minHeap.push(t1);
            }
        }
    
        double getMedian(){
            int n1 = minHeap.size();
            int n2 = maxHeap.size();
            if(n1 == n2) return (minHeap.top() + maxHeap.top()) / 2.0;
            else return maxHeap.top();
        }
    };
    带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    获取成本
    销售订单跟踪成本
    装机
    这就是用战术上的勤奋掩盖战略上的懒惰
    CPA-计划(参考)
    大帝名言
    BZOJ 2100: [Usaco2010 Dec]Apple Delivery spfa
    BZOJ 2834: 回家的路 Dijkstra
    BZOJ 4070: [Apio2015]雅加达的摩天楼 根号分治+spfa
    BZOJ 4152: [AMPPZ2014]The Captain Dijkstra+贪心
  • 原文地址:https://www.cnblogs.com/make-big-money/p/12321473.html
Copyright © 2020-2023  润新知