给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算其所有整数的移动平均值。
示例:
MovingAverage m = new MovingAverage(3);
m.next(1) = 1
m.next(10) = (1 + 10) / 2
m.next(3) = (1 + 10 + 3) / 3
m.next(5) = (10 + 3 + 5) / 3
C++
class MovingAverage {
public:
/** Initialize your data structure here. */
queue<int> q;
int sz = 0, pre = 0;
MovingAverage(int size) {
sz = size;
}
double next(int val) {
//维护大小为sz的滑动窗口,每次遇到新的数据,就把新数据压入队列,再把front弹出,保证队列大小不变。
q.push(val);
if(q.size() > sz){
int tmp = q.front();
pre = pre - tmp + val;
q.pop();
return (double) pre / sz;
}
pre += val;
return (double) pre / q.size();
}
};
/**
* Your MovingAverage object will be instantiated and called as such:
* MovingAverage* obj = new MovingAverage(size);
* double param_1 = obj->next(val);
*/