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

华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/10/12

题目描述
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

解析:利用插入排序的思想,将进流中的数据排序。寻找中位数。

class Solution
{
public:
    vector<int> v;
    void Insert(int num)
    {
        v.push_back(num);
        int i=v.size()-2;
        while(i>=0&&v[i]>num)
        {
            v[i+1]=v[i];
            i--;
        }
        v[i+1]=num;
    }

    double GetMedian()
    {
        int length=v.size();
        if((length&1)==1)
            return v[length/2]*1.0;
        else
            return (v[length/2]+v[length/2-1])*1.0/2;
    }
};

你可能感兴趣的:(剑指offer—数据流中的中位数)