Moving Average from Data Stream
問題概要
任意のウィンドウサイズsizeが与えられるので、その範囲での
$ queueの合計値 / size
を計算せよ、という問題
解法
queueからその合計値を計算するためにvectorを用意してaccumulateした
(C++.iconにはqueueの合計値を出すような関数無いんだろうか)
code:solution.cpp
class MovingAverage {
public:
queue<int> q;
int w;
vector<int> vec = {};
/** Initialize your data structure here. */
MovingAverage(int size) {
w = size;
}
double next(int val) {
q.push(val);
if (q.size() > w) q.pop();
return calc();
}
double calc() {
while (!q.empty()) {
int i = q.front();
q.pop();
vec.push_back(i);
}
double sum = accumulate(vec.begin(), vec.end(), 0);
sum /= vec.size();
for (int i : vec) q.push(i);
vec = {};
return sum;
}
};
/**
* Your MovingAverage object will be instantiated and called as such:
* MovingAverage* obj = new MovingAverage(size);
* double param_1 = obj->next(val);
*/