题目描述
给定一个整数流和一个窗口,根据该窗口大小计算滑动的平均值;
例如:
输入:size=3;整数流:1,10,3,5
输出:1.0, 5.5, 4.66667, 6.0
解释:1.0 = 1 / 1 , 5.5 = (1+10)/2, 4.66667=(1+10+3)/3, 6.0=(10+3+5)/3
解题思路
常见解法可以使用队列来解决,当长度超过窗口时则从队列里面把数据删除。
这里我通过改变下标模拟一个环形数组来解决问题。
- 如果数据量没有大于给定size则直接返回 总和 除以 个数
- 如果数据量大于给定size,则使用公式:(当前值+上次综合-当前列表中最开始位置的值)/size
- 同时由于数据量大于给定size,修改数组的index,修改成0,重新再算。
代码实现
class MovingAverage {
int size;
double array[];
double lastValue;
int index = 0;
boolean outIndex = false;
/**
* Initialize your data structure here.
*/
public MovingAverage(int size) {
this.size = size;
this.lastValue &