题解 | 数据流中的中位数

数据流中的中位数

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

#include <functional>
#include <queue>
#include <vector>
class Solution {
private:
    priority_queue<int, vector<int>, greater<int>> minHeap;
    priority_queue<int, vector<int>, less<int>> maxHeap;
public:
    void Insert(int num) {
        if (maxHeap.size() == minHeap.size()) {
            minHeap.push(num);
            int x = minHeap.top();
            minHeap.pop();

            maxHeap.push(x);
        }
        if (maxHeap.size() > minHeap.size()) {
            maxHeap.push(num);
            int x = maxHeap.top();
            maxHeap.pop();
            
            minHeap.push(x);
        }
    }

    double GetMedian() { 
        double ans0 = 0.0, ans1 = 0.0;
        if (maxHeap.size() == minHeap.size()) {
            ans0 = maxHeap.top();
            ans1 = minHeap.top();
        }
        else {
            ans0 = maxHeap.top();
        }

        return ans1 == 0 ? ans0 : (ans0 + ans1) / 2.0;
    }

};

使用大根堆记录数据中较小的一半数据,使用小根堆记录数据中较大的一半数据,始终保持二者内部元素数量差 <= 1

  • 若二者元素相同,则返回两个堆堆顶元素的均值
  • 若大根堆数量比小根堆多1,则返回大根堆堆顶元素值

Day4

全部评论

相关推荐

08-29 17:17
已编辑
门头沟学院
嗨害嗨我来了:张总:你们这些年轻人,这不是把我的爱好暴露了吗?
工作时那些社死瞬间
点赞 评论 收藏
分享
09-18 20:41
门头沟学院 Java
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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