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

    原文地址:https://www.jianshu.com/p/7d7ef2a018b2

    时间限制:1秒 空间限制:32768K

    题目描述

    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。

    我的代码

    class Solution {
        priority_queue<int,vector<int>,greater<int>> minHeap;
        priority_queue<int,vector<int>,less<int>> maxHeap;
    public:
        void Insert(int num)
        {
            if(maxHeap.empty() || num<maxHeap.top())
                maxHeap.push(num);
            else
                minHeap.push(num);
            if(maxHeap.size()==minHeap.size()+2){
                minHeap.push(maxHeap.top());
                maxHeap.pop();
            }
            if(maxHeap.size()+1==minHeap.size()){
                maxHeap.push(minHeap.top());
                minHeap.pop();
            }
        }
    
        double GetMedian()
        { 
            if(maxHeap.size()==minHeap.size()+1)
                return maxHeap.top();
            else
                return (maxHeap.top()+minHeap.top())/2.0;
        }
    };
    

    运行时间:3ms
    占用内存:476k

  • 相关阅读:
    8.13 Java自学
    8.12 Java自学
    8.11 Java自学
    JAVA学习日报 8.18
    JAVA学习日报 8.17
    JAVA学习日报 8.16
    JAVA学习日报 8.15
    JAVA学习日报 8.14
    JAVA学习日报 8.13
    JAVA学习日报 8.12
  • 原文地址:https://www.cnblogs.com/cherrychenlee/p/10824865.html
Copyright © 2011-2022 走看看