class MedianFinder {
public:/** initialize your data structure here. */
priority_queue<int> maxheap;
priority_queue<int, vector<int>, greater<int>> minheap;MedianFinder(){}voidaddNum(int num){
minheap.push(num);
maxheap.push(minheap.top());
minheap.pop();if(minheap.size()<maxheap.size()){
minheap.push(maxheap.top());
maxheap.pop();}}doublefindMedian(){return minheap.size()>maxheap.size()?
minheap.top():1.0*(minheap.top()+maxheap.top())/2;}};/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/
高阶玩家
默认的堆是最大堆,这时候如果插入的全是负数,取出后求绝对值,就实现了最小堆。
class MedianFinder {
priority_queue<long> small, large;
public:voidaddNum(int num){
small.push(num);
large.push(-small.top());
small.pop();if(small.size()< large.size()){
small.push(-large.top());
large.pop();}}doublefindMedian(){return small.size()> large.size()? small.top():(small.top()- large.top())/2.0;}};/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/