如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。

//以前不是很理解这种题目,但是现在大概知道是怎么个操作方法,之所以提供两个函数,就是想让大家动态的获取
//比如插入之后,通过getmedian能立马获得中位数,需要动态的更新
不是很清楚这道题目的目的是什么
其实算法题刷多了会有一种感觉:还是要灵活运用一些高级的数据结构,灵活运用之后整个题目的思路会简便,容易理解很多。
这道题目也不例外,要使用到java中的优先队列,优先队列也就是我们常说的堆,在堆排序中大家应该都比较清楚了,在堆中,堆顶严肃一定是最值,要么是最大的要么是最小的。
而本题就需要使用到两个堆来帮助我们快速的完成这件事情。具体的思路可参考:链接:https://www.nowcoder.com/questionTerminal/9be0172896bd43948f8a32fb954e1be1?f=discussion
来源:牛客网

我这里只想强调一个启发:多熟悉高级数据结构并进行灵活的运用。

链接:https://www.nowcoder.com/questionTerminal/9be0172896bd43948f8a32fb954e1be1?f=discussion
来源:牛客网

import java.util.PriorityQueue;
import java.util.Comparator;
public class Solution {
    //小顶堆,用该堆记录位于中位数后面的部分
    private PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();

    //大顶堆,用该堆记录位于中位数前面的部分
    private Prior