关闭

数据流的median

标签: 数据结构
377人阅读 评论(0) 收藏 举报
分类:

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;
    }
};


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:80114次
    • 积分:1837
    • 等级:
    • 排名:千里之外
    • 原创:99篇
    • 转载:3篇
    • 译文:0篇
    • 评论:14条
    最新评论