https://leetcode-cn.com/problems/find-median-from-data-stream/
题意:
给一个字节流,找出中位数
解析:
维护两个size几乎相同的堆,较大的一半数放在小顶堆,较小的一半数放在大顶堆。
中位数由两个堆顶元素决定。
代码:
class MedianFinder {
public:
MedianFinder() {}
priority_queue<int>Big;
priority_queue<int,vector<int>,greater<int> >Small;
void addNum(int num) {
if(Small.empty()&&Big.empty())
Big.push(num);
else if(Small.empty())
Big.push(num);
else if(Big.empty())
Small.push(num);
else if(num<=Small.top())
Big.push(num);
else
Small.push(num);
if(Small.size()>Big.size()){
Big.push(Small.top());
Small.pop();
}
if(Big.size()-Small.size()>1){
Small.push(Big.top());
Big.pop();
}
}
double findMedian() {
int sum=Small.size()+Big.size();
if(sum&1)
return Big.top();
else
return 1.0*(Small.top()+Big.top())/2;
}
};