题解 | 数据流中的中位数

数据流中的中位数

https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1

class Solution {
public:
    priority_queue<int> maxHeap;                             // 左半:最大堆,左半掌管小的
    priority_queue<int, vector<int>, greater<int>> minHeap; // 右半:最小堆,右半掌管大的
    void Insert(int num) {
        if(maxHeap.size()==0)
        {
            maxHeap.push(num);
            return;
        }
        if(!maxHeap.empty()&&num>maxHeap.top())
        {
             minHeap.push(num);
        }
        else 
        { 
             maxHeap.push(num);
        }
        if(!maxHeap.empty() && !minHeap.empty()&&maxHeap.top()>minHeap.top())
        {
            double templeft=maxHeap.top();
            maxHeap.pop();
            double tempright=minHeap.top();
            minHeap.pop();
            maxHeap.push(tempright);
            minHeap.push(templeft);
        }
        if(maxHeap.size()>minHeap.size()+1)//数目不平衡,要保证左半的数目小于等于右半的数目+1
        {
            minHeap.push(maxHeap.top());
            maxHeap.pop();
        }
        if(maxHeap.size()<minHeap.size())
        {
            maxHeap.push(minHeap.top());
            minHeap.pop();
        }
    }

    double GetMedian() { 
     if(maxHeap.size()==minHeap.size()&&maxHeap.size()!=0)
     {
        return (maxHeap.top()+minHeap.top())/2.0;
     }
     else 
     {
        return maxHeap.top();
     }
     return 0;
    }

};

全部评论

相关推荐

给🐭🐭个面试机会...:我擦seed✌🏻
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务