思路:用堆;两个堆 一个最大堆 一个最小堆;vector<double>min,max;
如果为奇数的时候 将往最大堆中插入;
如果为偶数的时候就往最小堆中插入;
最后的数据的总数为奇数 返回min[0];偶数返回(max[0]+min[0])/2;
代码如下:
class Solution {
private:
vector<double>max,min;
public:
void Insert(int num)
{
if(((max.size()+min.size())&1)==0)//even
{
if(max.size()>0&&num<max[0])
{
max.push_back(num);
push_heap(max.begin(),max.end(),less<double>());
num=max[0];
pop_heap(max.begin(),max.end(),less<double>());
max.pop_back();
}
min.push_back(num);
push_heap(min.begin(),min.end(),greater<double>());
}
else//odd
{
if(min.size()>0&&num>min[0])
{
min.push_back(num);
push_heap(min.begin(),min.end(),greater<double>());
num=min[0];
pop_heap(min.begin(),min.end(),greater<double>());
min.pop_back();
}
max.push_back(num);
push_heap(max.begin(),max.end(),less<double>());
}
}
double GetMedian()
{
double mid=0.0;
if(((max.size()+min.size())&1)==0)
mid=(max[0]+min[0])/2;
else
mid=min[0];
return mid;
}
};