如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
一刷:完全没思路,看讨论说是用大顶堆和小顶堆。感觉这个题可以扩展一下,自己写一个堆。
写的时候问题主要两个,一个是对push的条件判断不清楚,比如num应该<=,还把else写成if(num > big.top())
另一个是在相除的时候把2.0写成了2
class Solution {
public:
priority_queue<int, vector<int>, less<int>> small;
priority_queue<int, vector<int>, greater<int>> big;
void Insert(int num)
{
if(small.empty() || num <= small.top()) small.push(num);
else big.push(num);
if(small.size() == big.size() + 2){
big.push(small.top());
small.pop();
}
if(small.size() + 1 == big.size()){
small.push(big.top());
big.pop();
}
}
double GetMedian()
{
if(small.size() == big.size()) return (small.top() + big.top())/2.0;
else return small.top();
}
};