LCR 160. 数据流中的中位数 - 力扣(LeetCode)
总结:这题自己最开始的想法是直接使用vector容器,每次取中位数的时候就进行一次排序,超时。题解很巧妙的利用大根堆和小根堆来解决问题,大根堆和小根堆各存一半的数,其中需要注意的是,小根堆里面存的是较大的数,然后堆顶就是这些数里面最小的数,大根堆里面存的是较小的数,堆顶就是这些数里面最大的数。这样就可以整体形成一个排好序的序列。
代码:
class MedianFinder {
public:/** initialize your data structure here. */priority_queue<int,vector<int>,greater<int>> A;priority_queue<int,vector<int>,less<int>> B;MedianFinder() {}void addNum(int num) {if(A.size() != B.size()){A.push(num);B.push(A.top());A.pop();}else{B.push(num);A.push(B.top());B.pop();}}double findMedian() {return A.size() != B.size() ? A.top() : (A.top() + B.top()) / 2.0;}};