642 · 数据流滑动窗口平均值
描述
给出一串整数流和窗口大小,计算滑动窗口中所有整数的平均值。
样例
样例1 :
MovingAverage m = new MovingAverage(3);
m.next(1) = 1 // 返回 1.00000
m.next(10) = (1 + 10) / 2 // 返回 5.50000
m.next(3) = (1 + 10 + 3) / 3 // 返回 4.66667
m.next(5) = (10 + 3 + 5) / 3 // 返回 6.00000
public class MovingAverage {
/*
* @param size: An integer
*/
int s , id ;
double[] sum ;
public MovingAverage(int size) {
// do intialization if necessary
id = 0 ;
s = size ;
sum = new double[s + 1] ;
}
int mod(int x){
return x % (s + 1) ;
}
/*
* @param val: An integer
* @return:
*/
public double next(int val) {
// write your code here
id++ ;
sum[mod(id)] = sum[mod(id-1)] + val ;
if(id - s >= 0){
return (sum[mod(id)] - sum[mod(id - s)]) / s ;
}else{
return sum[id] / id ;
}
}
}