无需任何特殊数据结构即可计算移动平均值

我最近接受了一次采访,在那里我遇到了一种情况,我需要计算给定时间段的移动平均线。我想出了以下解决方案,但面试官说他希望我在没有任何特殊数据结构的情况下这样做,因为 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);

  }

}


翻过高山走不出你
浏览 116回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java