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

数据流中的中位数

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

import java.util.*;

public class Solution {

    private PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1,o2)->o2.compareTo(o1));//这是大根堆 用于存小的数
    private PriorityQueue<Integer> minHeap = new
    PriorityQueue(); //这是小根堆 用于存大的数
    public void
    modifyHeap() { //谁元素多 则谁出堆然后把元素加入到元素少的堆里面
        if (this.maxHeap.size() - this.minHeap.size() > 1) {
            this.minHeap.offer(this.maxHeap.poll());
        }
        if (this.minHeap.size() - this.maxHeap.size() > 1) {
            this.maxHeap.offer(this.minHeap.poll());
        }
    }
    public void Insert(Integer num) {
        //小元素进入大根堆
        if (!maxHeap.isEmpty() && num <= maxHeap.peek()) {
            maxHeap.offer(num);
        }
        //大元素进入小根堆
        else {
            minHeap.offer(num);
        }
        //然后进行调整 如果一个堆比另一个堆的长度超过两个及以上 则调整
        modifyHeap();
    }

    public Double GetMedian() {
        double mid = 0;
        if (this.maxHeap.size() > this.minHeap.size()) {
            mid = (double)this.maxHeap.peek();
        } else if (this.maxHeap.size() < this.minHeap.size()) {
            mid = (double)this.minHeap.peek();
        } else {
            mid = (double)(this.minHeap.peek() + this.maxHeap.peek()) / 2;
        }
        //System.out.print(mid+" ");
        return mid;
    }


}

全部评论

相关推荐

10-13 16:58
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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