Skip to main content
Back to problems
#346
Easy Algorithms

Moving average from data stream

Array Design Queue Data Stream
80.2% acceptance
Mar 31, 2026
1753
193

No description available.

Solution

Rust
Time O(n)
Space O(n)
LeetCode
solution.rs
use std::collections::VecDeque;

struct MovingAverage {
  size: usize,
  queue: VecDeque<i32>,
  sum: f64,
}

impl MovingAverage {
  fn new(size: i32) -> Self {
    MovingAverage {
      size: size as usize,
      queue: VecDeque::new(),
      sum: 0.0,
    }
  }

  fn next(&mut self, val: i32) -> f64 {
    if self.queue.len() == self.size {
      if let Some(old) = self.queue.pop_front() {
        self.sum -= old as f64;
      }
    }
    self.queue.push_back(val);
    self.sum += val as f64;
    self.sum / self.queue.len() as f64
  }
}