richardzrc的博客搬家了--->richardzhang.info

但偏偏,风渐渐,把距离吹得好远

数据流的median

http://www.lintcode.com/en/problem/data-stream-median/

数据流的中位数,两个优先队列,或者两个堆,题目定义是靠前的一个数为median

struct Node1{
    int val;
    bool operator<(Node1 n) const{
        return val<n.val;
    }
};
struct Node2{
    int val;
    bool operator<(Node2 n) const{
        return val>n.val;
    }
};
class Solution {
public:
    /**
     * @param nums: A list of integers.
     * @return: The median of numbers
     */
    vector<int> medianII(vector<int> &n) {
        priority_queue<Node1> pq1;//max
        priority_queue<Node2> pq2;//min
        int median=INT_MIN;
        vector<int> ans;
        for(auto e: n){
            if(pq1.size()==pq2.size()){
                if(median==INT_MIN) median=e;
                else if(median<=e) pq2.push({e});
                else {
                    pq2.push({median});
                    pq1.push({e});
                    median=pq1.top().val;
                    pq1.pop();
                }
            } else{
                if(median<=e){
                    pq1.push({median});
                    pq2.push({e});
                    median=pq2.top().val;
                    pq2.pop();
                } else pq1.push({e});
            }
            ans.push_back(median);
        }
        return ans;
    }
};


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/richardzrc/article/details/46781557
文章标签: 数据结构
上一篇woodcut
下一篇题目
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭