Недавно у меня было интервью, где мне дали ситуацию, в которой мне нужно вычислить скользящую среднюю по заданному периоду.Я предложил решение ниже, но интервьюер сказал, что хочет, чтобы я сделал это без какой-либо специальной структуры данных, потому что DS займет некоторое пространство?Есть ли другой лучший способ сделать это без какой-либо структуры данных?
public class MovingAverage {
private final Queue<BigDecimal> window = new ArrayDeque<>();
private final int period;
private BigDecimal sum = BigDecimal.ZERO;
public MovingAverage(int period) {
this.period = period;
}
public void add(BigDecimal num) {
sum = sum.add(num);
window.add(num);
if (window.size() > period) {
sum = sum.subtract(window.remove());
}
}
public BigDecimal getAverage() {
if (window.isEmpty())
return BigDecimal.ZERO;
BigDecimal divisor = BigDecimal.valueOf(window.size());
return sum.divide(divisor, 2, RoundingMode.HALF_UP);
}
}