leetcode295 Find Median from Data Stream 思路

1.维持两个堆,一个大顶堆A,一个小顶堆B,大顶堆存储着小的数,小顶堆存储着大的数

2.每次插入,先插入A,再把A的最大数插进B,如果发现A比B的数字个数小,把B的顶部插进A

class MedianFinder {
    priority_queue<long> small, large;
public:

    void addNum(int num) {
        small.push(num);
        large.push(-small.top());
        small.pop();
        if (small.size() < large.size()) {
            small.push(-large.top());
            large.pop();
        }
    }

    double findMedian() {
        return small.size() > large.size()
               ? small.top()
               : (small.top() - large.top()) / 2.0;
    }
};
发布了81 篇原创文章 · 获赞 4 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/m0_37313888/article/details/105158870