数据流中的中位数
数据流中的中位数
http://www.nowcoder.com/questionTerminal/9be0172896bd43948f8a32fb954e1be1
题目描述
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数
思路:treeset可以实现插入的时候排序(不知道是不是想简单了)
代码:
import java.util.Set;
import java.util.TreeSet;
public class Solution {
Set<Integer> set=new TreeSet<>();
public void Insert(Integer num) {
set.add(num);
}
public Double GetMedian() {
if(set.size()%2==0) {//偶数2,3
int count=1;
double sum=0;
for (Integer integer : set) {
if(count==set.size()/2||count==set.size()/2+1) {
sum+=integer;
}
count++;
}
return sum/2;
}else {//2,3,4
int count=1;
double sum=0;
for (Integer integer : set) {
if(count==set.size()/2+1) {
sum=integer;
break;
}
count++;
}
return sum;
}
}}
查看18道真题和解析