题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
解析:由于数据是动态的添加的,不用移除,所以用list存储添加进去的数值。关键点是在获取数据流中的中位数。
注意:需要先给list排序
判断list里面的数值的个数的奇偶性。如果是list的大小是奇数,例如里面存储的是1 2 3 4 5,那么中位数就是3,直接list.size()/2后得到的就是中位数的下角标了。如果list的大小是偶数,例如里面存储的是1 2 3 4。显然中位数就是 (2 + 3)/2,那么如何求得2、3?就是list.size()-1后再除以2就得到数值2的下角标了,然后list.size()/2得到3的角标了。然后你就可以干你想干的了。
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class Solution {
List<Integer> list = new ArrayList<>();
public void Insert(Integer num) {
list.add(num);
}
public Double GetMedian() {
Collections.sort(list);
Double result=null;
if(list.size()%2!=0){//奇数个数字 1 2 3 4 5
result= Double.valueOf(list.get(list.size()/2));
}else {//偶数个数字 1 2 3 4
result=(Double.valueOf(list.get((list.size()-1)/2))+Double.valueOf(list.get(list.size()/2)))/2;
}
return result;
}
}