题目地址:
https://leetcode.com/problems/moving-average-from-data-stream/
设计一个数据结构,可以实现下列操作:
1、添加一个数;
2、保持数据结构存储的数的个数小于一个给定的值
c
c
c,并遵循FIFO原则;
3、动态返回存储的数的平均值。
很显然用队列。同时可以令开一个变量动态存储当前队列里存储的数据之和。代码如下:
class MovingAverage {
public:
double sum;
int capacity;
queue<double> q;
MovingAverage(int size) {
capacity = size;
sum = 0.0;
}
double next(int val) {
sum += val;
q.push(val);
if (q.size() > capacity) {
sum -= q.front(); q.pop();
}
return sum / q.size();
}
};
/**
* Your MovingAverage object will be instantiated and called as such:
* MovingAverage* obj = new MovingAverage(size);
* double param_1 = obj->next(val);
*/
时间复杂度 O ( 1 ) O(1) O(1),空间 O ( c ) O(c) O(c)。