# [LeetCode] 346. Moving Average from Data Stream 从数据流中移动平均值

2021年09月15日 阅读数：1

Given a stream of integers and a window size, calculate the moving average of all integers in the sliding window.html

For example,
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) / 3java

Java:post

```public class MovingAverage {
private double previousSum = 0.0;
private int maxSize;
private Queue<Integer> currentWindow;
/** Initialize your data structure here. */
public MovingAverage(int size) {
maxSize = size;
}

public double next(int val) {
if(currentWindow.size()==maxSize){
previousSum -= currentWindow.remove();
}
previousSum += val;
return previousSum/currentWindow.size();
}
}

/**
* Your MovingAverage object will be instantiated and called as such:
* MovingAverage obj = new MovingAverage(size);
* double param_1 = obj.next(val);
*/　　```

Java:this

```public class MovingAverage {
int size;
double avg;

/** Initialize your data structure here. */
public MovingAverage(int size) {
this.size = size;
}

public double next(int val) {
if(queue.size()<this.size){
queue.offer(val);
int sum=0;
for(int i: queue){
sum+=i;
}
avg = (double)sum/queue.size();

return avg;
}else{
queue.offer(val);
avg = avg + add - minus;
return avg;
}
}
}　　```

Python:url

```# Time:  O(1)
# Space: O(w)
from collections import deque

class MovingAverage(object):
def __init__(self, size):
"""
:type size: int
"""
self.__size = size
self.__sum = 0
self.__q = deque([])

def next(self, val):
"""
:type val: int
:rtype: float
"""
if len(self.__q) == self.__size:
self.__sum -= self.__q.popleft()
self.__sum += val
self.__q.append(val)
return 1.0 * self.__sum / len(self.__q)

# Your MovingAverage object will be instantiated and called as such:
# obj = MovingAverage(size)
# param_1 = obj.next(val)　　```

C++:htm

```class MovingAverage {
public:
MovingAverage(int size) {
this->size = size;
sum = 0;
}

double next(int val) {
if (q.size() >= size) {
sum -= q.front(); q.pop();
}
q.push(val);
sum += val;
return sum / q.size();
}

private:
queue<int> q;
int size;
double sum;
};
```