题目描述
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。
思路:
1.用链表存储动态数,然后进行添加,通过链表转数组,再通过数组自带的排序方法进行排序。最后通过分奇数和偶数分别计算中位数结果。
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public List<Integer> list = new ArrayList<>();
public void Insert(Integer num) {
list.add(num);
}
public Double GetMedian() {
double median = 0;
if (list.size() == 0) {
return median;
}
//链表转数组
Integer[] arr = list.toArray(new Integer[list.size()]);
Arrays.sort(arr);
if (arr.length % 2 == 0) { // 数量是偶数
median = (arr[arr.length/2-1]+arr[arr.length/2]) / 2.0;
} else { // 数量是奇数
median = arr[arr.length / 2];
}
return median;
}
}