题目描述
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用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; } } }