题解 | #数据流中的中位数#

数据流中的中位数

https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1

import java.util.*;


public class Solution {
    int count = 0;
    Queue<Integer> min_heap = new PriorityQueue<>();
    Queue<Integer> max_heap = new PriorityQueue<>(Collections.reverseOrder());

    public void Insert(Integer num) {
        count++;
        if(!min_heap.isEmpty() && num > min_heap.peek()){
            //判断 是否加入的数字比小根堆里面最小的数字大 如果大则替换 
            max_heap.add(min_heap.poll());
            min_heap.add(num);
        }else{
		  	//否则直接加入大根堆
            max_heap.add(num);
        }
        
        if(max_heap.size() - min_heap.size() >1){
		  //使大小根堆保持数量不大于1 且只能大根堆比小根堆多元素
            min_heap.add(max_heap.poll());
        }

    }

    public Double GetMedian() {
        double result;
        if(count % 2 ==0 ){
		  //如果有数字个数为偶数 则取其平均数
            result = (min_heap.peek()+max_heap.peek())/2.0;
        }else{
		  //直接取大根堆堆顶的元素
            result = max_heap.peek();
        }
        return result;
    }


}

全部评论

相关推荐

头像
11-26 15:46
已编辑
中南大学 后端
字节国际 电商后端 24k-35k
点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务