题目描述

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。
 
 
 
题目链接:
 
 
 
 
分析:
将数按大小均分成大数组和小数组两组,并记录下每组的数量,取中位数时较多的那组的最大或这最小值。
这两个组的实现可以为堆,也可为平衡树。
 
todo 
 
 
 
简单实现:
在取中位数时,对数组内元素排序,找到中位数。
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
    private ArrayList<Integer> arr = new ArrayList<>();
    public void Insert(Integer num) {
        arr.add(num);
    }

    public Double GetMedian() {
        Collections.sort(arr);
        if(arr.size()%2==1){
            return arr.get(arr.size()/2)+0.0;
        }else{
            return (arr.get(arr.size()/2-1) + arr.get(arr.size()/2))/2.0;
        }
    }
}

 

 
 
posted on 2020-06-13 23:34  MoonBeautiful  阅读(149)  评论(0编辑  收藏  举报