两个堆,类似于漏斗的形状,输出两个堆顶的值。
class Solution {
public:
priority_queue<int, vector<int>, greater<int>> min_heap;
priority_queue<int> max_heap;
void Insert(int num)
{
max_heap.push(num); //都放入大根堆中, 如果大根堆里面的数量比小根堆大2,则把大根堆的放入小根堆
if(max_heap.size() - min_heap.size() >= 2){
int t = max_heap.top();
max_heap.pop();
min_heap.push(t);
}
if(min_heap.size() && max_heap.top() > min_heap.top()){
int u = max_heap.top(), v = min_heap.top();
max_heap.pop(), min_heap.pop();
max_heap.push(v);
min_heap.push(u);
}
}
double GetMedian()
{
if(max_heap.size() == min_heap.size()) return (max_heap.top() + min_heap.top()) / 2.0;
else return max_heap.top();
}
};