class MedianFinder {
private:
// 元素个数相差不超过1
priority_queue<int> larger;
priority_queue<int,vector<int>,greater<int>> small;
public:
/** initialize your data structure here. */
MedianFinder() {
}
void addNum(int num) {
// small个数比较小 最终应该往small放 但必须确认是否比larger中所有元素都小
// 因此先放到larger中 再将larger中最小的元素放到small中以保持平衡
if(small.size()<larger.size()){
larger.push(num);
small.push(larger.top());
larger.pop();
}
else{
small.push(num);
larger.push(small.top());
small.pop();
}
}
double findMedian() {
if(larger.size()==small.size())
return (larger.top()+small.top())/2.0;
return larger.size()>small.size()?larger.top():small.top();
}
};