295. 数据流的中位数

class MedianFinder {
public:
    /** initialize your data structure here. */
    MedianFinder() {
        
    }
    
    void addNum(int num) {
        if(a.empty()){
            a.push(num);
            return;
        }
        if(a.size()==b.size()){
            if (num<b.top()){
                b.push(num);
            }else{
                a.push(num);
            }
            
        }else if(a.size()>b.size()){
                if (b.size()>0&&num<b.top()){
                    b.push(num);
                }else{
                     if (a.size()>0&&num<=a.top()){
                         b.push(num);
                     }else{
                         b.push(a.top());
                         a.pop();
                         a.push(num);
                     }
                }
                
            }else{
            if (num>a.top()){
                a.push(num);
                
            }else{
                if (num>=b.top()){
                    a.push(num);
                }else {
                    a.push(b.top());
                    b.pop();
                    b.push(num);
                }
            }
        }
            
    }
    
    double findMedian() {
        if (b.size()>a.size()){
            return b.top();
        }else if (b.size()<a.size()){
            return a.top();
        }else{
            return (a.top()+b.top())/2.0;
        }
        
    }
    private:  
    priority_queue<int ,vector<int >,greater<int>> a;
    priority_queue<int ,vector<int >,less<int>> b;
};

/**
 * Your MedianFinder object will be instantiated and called as such:
 * MedianFinder obj = new MedianFinder();
 * obj.addNum(num);
 * double param_2 = obj.findMedian();
 */

建两个堆,在addnum()函数中应满足,1.大堆的堆顶小于小堆的堆顶。

                                                                        2.大堆和小堆的元素个数差一;

                    在findmedian()函数中赢满足,1.当两堆的大小相等时,取两堆的堆顶的平均数。

                                                                         2.当两堆的大小不相等时,取元素较多的堆的堆顶。

猜你喜欢

转载自blog.csdn.net/a15929748502/article/details/88539321
今日推荐