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

思路:
1.暴力破解法,每次插入的时候,都for循环遍历找到num位置该存放的位置,然后插入
2.堆。用大根堆存放中位数左边的数,小根堆存放右边的数。大根堆的最大数小于小根堆的最小数
3.第一个数,先放入大根堆,然后再取出最大的数放在小根堆里。第二个数,先放入小根堆里,然后取出最小的数,放在大根堆里。第三个数,先放入大根堆,再取出最大的数,放入到小根堆。这种奇数位的数据,直接取小根堆的堆顶就可以了。偶数位那就两者平均。
4.每次存放数据时,做到将数据平均,所以有第1个数放到大根堆,取出来放到小根堆。第二个反之。每次先放再取,主要是取最小值和最大值

import java.util.*;

public class Solution {

    PriorityQueue<Integer> minHeap = new PriorityQueue<>();
    PriorityQueue<Integer> maxHeap = new PriorityQueue<>(new Comparator<Integer>(){
        @Override
        public int compare(Integer o1,Integer o2){
            return o2 - o1;
        }
    });
    int count = 0;
    
    public void Insert(Integer num) {
        
        if(count % 2 == 0){
            //已经偶数个 放到
            maxHeap.offer(num);
            int temp = maxHeap.poll();
            minHeap.offer(temp);
        }else{
            minHeap.offer(num);
            int temp = minHeap.poll();
            maxHeap.offer(temp);
        }
        count ++;
    }

    public Double GetMedian() {

        if(count % 2 == 0){
            return  new Double(minHeap.peek() + maxHeap.peek() ) / 2;
        }else{
            return new Double(minHeap.peek());
        }
    }


}
全部评论

相关推荐

11-22 16:49
已编辑
北京邮电大学 Java
美团 质效,测开 n*15.5
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务