题目描述
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
class Solution {
public:
vector<int> left; // 大顶堆
vector<int> right; // 小顶堆
void Insert(int num)
{
int n1 = left.size();
int n2 = right.size();
if((n1 + n2) % 2 == 1) // 插入right
{
if(left.size() > 0 && num > left[0])
{
left.push_back(num);
push_heap(left.begin(), left.end(), greater<int>());
num = left[0];
pop_heap(left.begin(), left.end(), greater<int>());
left.pop_back();
}
right.push_back(num);
push_heap(right.begin(), right.end(), less<int>());
}
else // 插入left
{
if(right.size() > 0 && num < right[0])
{
right.push_back(num);
push_heap(right.begin(), right.end(), less<int>());
num = right[0];
pop_heap(right.begin(), right.end(), less<int>());
right.pop_back();
}
left.push_back(num);
push_heap(left.begin(), left.end(), greater<int>());
}
}
double GetMedian()
{
int n = left.size() + right.size();
if(n % 2 == 1)
return left[0];
else
return (left[0] + right[0]) / 2.0;
}
};