• 剑指offer 数据流中的中位数


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

    思路分析:
    本质上都是要在插入数字后,进行排序,之后再进行判断总个数是偶数还是奇数,算出中位数。

    一.快速排序(效率不咋行,这题数据弱居然过了,23333)

    class Solution {
    public:
        vector<int> v;
        int n;
        void Insert(int num)
        {
            v.push_back(num);
            n=v.size();
            sort(v.begin(),v.end());//插入后,再排序。
        }
    
        double GetMedian()
        { 
            double result;
            if(n%2==0)
            {
                result=(v[n/2-1]+v[n/2])/2.0;
            }else
            {
                result=v[n/2]/1.0;
            }
            return result;
        }
    
    };
    

    二.大顶堆和小顶堆(用优先队列自动帮你排序,挺香的)

    class Solution {
          priority_queue<int,vector<int>,less<int>> min;
        priority_queue<int,vector<int>,greater<int>> max;
    public:
      
        void Insert(int num)
        {
            if(min.empty()||num<=min.top())
                min.push(num);
            else
                max.push(num);
            if(min.size()==max.size()+2)//偶数
            {
                max.push(min.top());
                min.pop();
            }
            if(min.size()+1==max.size())//奇数
            {
                min.push(max.top());
                max.pop();
            }
        }
    
        double GetMedian()
        { 
            return max.size()==min.size()?(min.top()+max.top())/2.0:min.top();
        }
    
    };
    
  • 相关阅读:
    css选择器(常规选择器,伪类选择器,伪元素选择器,根元素选择器)
    css文件引人的三种方式
    《软件测试》阅读笔记
    测试风险管理
    软件缺陷分析
    软件文档
    软件缺陷分析方法
    软件缺陷分析方法:ODC
    [转载]web测试方法总结
    测试报告笔记
  • 原文地址:https://www.cnblogs.com/YenKoc/p/12779958.html
Copyright © 2020-2023  润新知