数据流中的中位数

来源:互联网 发布:mac python教程 编辑:程序博客网 时间:2024/06/07 03:54

题目:

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
class Solution{public:    void Insert( int 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<int>() );                num = max[0];                pop_heap( max.begin(), max.end(), less<int>() );                max.pop_back();            }            min.push_back( num );            push_heap( min.begin(), min.end(), greater<int>() );        }        else        {            if ( min.size() > 0 && min[0] < num )            {                min.push_back( num );                push_heap( min.begin(), min.end(), greater<int>() );                num = min[0];                pop_heap( min.begin(), min.end(), greater<int>() );                min.pop_back();            }            max.push_back( num );            push_heap( max.begin(), max.end(), less<int>() );        }    }    double GetMedian()    {        int size = min.size() + max.size();        if ( size == 0 )            return 0.0;        double median = 0.0;        if ( size & 1 == 1 )            median = min[0];        else            median = (min[0]+max[0]) / 2.0;        return median;    }private:    vector<int> min;    vector<int> max;};
原创粉丝点击