编程练习
题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
思路:insert用来模拟输入数字流,我们得采用一个容器来接收这些输入数据,之后才能对其进行排序和计算操作。这里我们采用了ArrayList来盛装输入流,通过它自带的sort方法进行排序,之后再根据list.size()的大小为奇数和偶数的不同情况计算不同的中位数并返回结果。
java代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24import java.util.ArrayList;
public class GetMedian {
ArrayList<Integer> list=new ArrayList<Integer>();
public void Insert(Integer num) {
list.add(num);
}
public Double GetMedian() {
int len=list.size();
if(list.size()==0 || list.isEmpty()) {
return null;
}
list.sort(null);
if(len%2==0) {
double a=list.get(len/2);
double b=list.get((len/2)-1);
return (a+b)/2;
}else {
return (double)list.get(len/2);
}
}
}