题目地址📐:数据流中的中位数_牛客题霸_牛客网
题目回顾📧:
解题思路📖:
首先对于中位数,我们都知道,排序后如果是数组长度是奇数,中位数就是中间的值,也就是n/2的值。如果数组长度是偶数,那么中位数就是中间两个值相加除2,也就是 a= n/2;b=n/2-1;中位数=(a+b)/2。
这样看来我们需要一个排序后的数组,由题意可知这个数组不断在变长,如果增加一个元素排序一次未免不合理,那么我们这里直接使用插入排序。
整体代码📂:
private ArrayList<Integer> val = new ArrayList<>();
public void Insert(Integer num) {
if (val.isEmpty())
val.add(num);
else {
int i = 0;
for (;i<val.size();i++){
if (num<=val.get(i))
break;
}
val.add(i,num);
}
}
public Double GetMedian() {
int n = val.size();
if (n%2 == 1)
return (double)val.get(n/2);
else {
double a = val.get(n/2);
double b = val.get(n/2-1);
return (a+b)/2;
}
}