解法一
左手一个大顶堆 + 右手一个小顶堆。
class MedianFinder {
public:
/** initialize your data structure here. */
priority_queue<int,vector<int>,greater<int>> qleft;//大顶堆
priority_queue<int,vector<int>,less<int>> qright;//小顶堆
MedianFinder() {
}
void addNum(int num) {
if(qleft.size()==qright.size()){
qright.push(num);
qleft.push(qright.top());
qright.pop();
}
else{
qleft.push(num);
qright.push(qleft.top());
qleft.pop();
}
}
double findMedian() {
int ls=qleft.size(),lr=qright.size();
int ml=qleft.top(), mr=qright.top();
return ls==lr? 0.5*(ml+mr):ml;
}
};
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/