算法题解:数据流中的中位数

题目描述


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

代码实现

import java.util.*;
public class Solution {
     //按照题目中描述,是要所有数值排序后的取位于中间的数值,所有采用优先队列,因为优先队列内部会自动排序
    Queue<Integer> q =  new PriorityQueue<Integer>();
    
    public void Insert(Integer num) {
        q.add(num);
    }

    public Double GetMedian() {
        Integer [] array = q.toArray(new Integer[0]);
        Arrays.sort(array);
        int length = array.length;
        if(length == 1){
            return array[0]+0.0;
        }
        if(length % 2 == 1){
            return array[(length/2)]+0.0;
        }else{
            
            return (array[length/2]+array[(length/2)-1]+0.0)/2;
        }
    }

}

解题思路

猜你喜欢

转载自blog.csdn.net/qq_22596931/article/details/110427022