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

数据流中的中位数

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

import java.util.*;


public class Solution {

    PriorityQueue<Integer> larger, smaller;

    public Solution() {
        // smaller 保留较小的元素, 保证 larger.size() >= smaller.size()
        smaller = new PriorityQueue<>((a, b) -> b.compareTo(a));
        larger = new PriorityQueue<>();
    }

    public void Insert(Integer num) {
        if(larger.size() == smaller.size()) {
            // 向 larger 中添加元素
            if(larger.isEmpty() || smaller.peek() <= num) {
                larger.offer(num);
            } else {
                // smaller.peek() > num
                larger.offer(smaller.poll());
                smaller.offer(num);
            }
        } else {
            // 向 smaller 中添加元素
            if(larger.peek() >= num) {
                smaller.offer(num);
            } else {
                // larger.peek() < num
                smaller.offer(larger.poll());
                larger.offer(num);
            }
        }
    }

    public Double GetMedian() {
        return larger.size() == smaller.size() ? Double.valueOf((larger.peek() + smaller.peek()) / 2.0) : Double.valueOf(larger.peek());
    }


}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务