剑指offer-63-数据流中位数

数据流中的中位数

http://www.nowcoder.com/questionTerminal/9be0172896bd43948f8a32fb954e1be1

思路

  • 思路 用两个堆维护中位数

代码

import java.util.*;
public class Solution {
    PriorityQueue<Integer> q1=new PriorityQueue<>((o1,o2)->Integer.compare(o2,o1));
    PriorityQueue<Integer> q2=new PriorityQueue<>();
    public void Insert(Integer num) {
        if(q1.size()==0 ||q2 .size()==0){
            if(q1.size()==0){
                q1.add(num);
            }else{
                q2.add(num);
            }
            return;
        }
        // 与q1堆 比较交换
        if(num<=q1.peek()){
            q1.add(num);
            num=q1.poll();
        }
        // 与q2堆 比较交换
        if(num>q2.peek()){
            q2.add(num);
            num=q2.poll();
        }
        //现在 num介于q1,q2之间
        if(q1.size()<=q2.size()){
            q1.add(num);
        }else{
            q2.add(num);
        }
    }

    public Double GetMedian() {
        double min=q1.size()==0?0:q1.peek();
        double max=q2.size()==0?0:q2.peek();
        if(q1.size()==q2.size()){
            return (min+max)/2;
        }else{
            return min;
        }
    }
}
剑指offer与数据结构 文章被收录于专栏

本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构

全部评论

相关推荐

勤劳的鲸鱼在okr拆解:没有别的选择就去吧,有实习和没实习找工作是天上地下
点赞 评论 收藏
分享
群星之怒:不是哥们,你就不好奇瘫痪三十年的老植物人是啥样的吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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