zoukankan      html  css  js  c++  java
  • 剑指offer——43数据流中的中位数

    题目描述

    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。
     
    题解:
      目前想不出更好的方法,待续更新。。。
     
      
     1 class Solution {
     2 private:
     3     vector<int> min;
     4     vector<int> max;
     5 public:
     6         void Insert(int num)
     7         {
     8            int size=min.size()+max.size();
     9            if((size&1)==0)
    10            {
    11               if(max.size()>0 && num<max[0])
    12               {
    13                  max.push_back(num);
    14                  push_heap(max.begin(),max.end(),less<int>());
    15                  num=max[0];
    16                  pop_heap(max.begin(),max.end(),less<int>());
    17                  max.pop_back();
    18               }
    19               min.push_back(num);
    20               push_heap(min.begin(),min.end(),greater<int>());
    21            }
    22            else
    23            {
    24               if(min.size()>0 && num>min[0])
    25               {
    26                 min.push_back(num);
    27                  push_heap(min.begin(),min.end(),greater<int>());
    28                  num=min[0];
    29                  pop_heap(min.begin(),min.end(),greater<int>());
    30                  min.pop_back();
    31               }
    32               max.push_back(num);
    33               push_heap(max.begin(),max.end(),less<int>());
    34            }   
    35         }
    36          
    37         double GetMedian()
    38         {
    39             int size=min.size()+max.size();
    40             if(size<=0)
    41                 return 0;
    42             if((size&1)==0)
    43                 return (max[0]+min[0])/2.0;
    44             else
    45                 return min[0];
    46         }
    47  
    48   
    49 };
  • 相关阅读:
    N个数求和
    求整数段和
    连续因子
    L1-005 考试座位号
    PTA Java tips(转载)
    个位数统计
    flink编译支持CDH6.2.0(hadoop3.0.0)
    hdfs/hbase 程序利用Kerberos认证超过ticket_lifetime期限后异常
    spring boot通过@Bean注解定义一个Controller
    【TypeScript】TypeScript 学习 2——接口
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11689380.html
Copyright © 2011-2022 走看看