数据流中的中位数

来源:互联网 发布:华莱士 知乎 编辑:程序博客网 时间:2024/06/05 01:09


Description:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。


import java.util.Comparator;import java.util.PriorityQueue;public class Solution {    int count = 0;    PriorityQueue<Integer> minHeap = new PriorityQueue<>();    PriorityQueue<Integer> maxHeap = new PriorityQueue<>(15, new Comparator<Integer>() {        @Override        public int compare(Integer o1, Integer o2) {            return o2 - o1;        }    });    public void Insert(Integer num) {        if (count % 2 == 0) {            maxHeap.offer(num);            int maxNum = maxHeap.poll();            minHeap.offer(maxNum);        } else {            minHeap.offer(num);            int minNum = minHeap.poll();            maxHeap.offer(minNum);        }        count++;    }    public Double GetMedian() {        if (count % 2 == 0)            return new Double(minHeap.peek() + maxHeap.peek()) / 2;        else            return new Double(minHeap.peek());    }}


原创粉丝点击