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