给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算滑动窗口里所有数字的平均值。

    实现 MovingAverage 类:

    MovingAverage(int size) 用窗口大小 size 初始化对象。
    double next(int val) 成员函数 next 每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后 size 个值的移动平均值,即滑动窗口里所有数字的平均值。

    示例:

    输入:
    inputs = [“MovingAverage”, “next”, “next”, “next”, “next”]
    inputs = [[3], [1], [10], [3], [5]]
    输出:
    [null, 1.0, 5.5, 4.66667, 6.0]

    解释:
    MovingAverage movingAverage = new MovingAverage(3);
    movingAverage.next(1); // 返回 1.0 = 1 / 1
    movingAverage.next(10); // 返回 5.5 = (1 + 10) / 2
    movingAverage.next(3); // 返回 4.66667 = (1 + 10 + 3) / 3
    movingAverage.next(5); // 返回 6.0 = (10 + 3 + 5) / 3

    提示:

    1 <= size <= 1000
    -105 <= val <= 105
    最多调用 next 方法 104 次


    1. class MovingAverage {
    2. int size;
    3. int count;
    4. double sum;
    5. Deque<Integer> queue = new LinkedList<>();
    6. /** Initialize your data structure here. */
    7. public MovingAverage(int size) {
    8. this.size = size;
    9. }
    10. public double next(int val) {
    11. count++;
    12. queue.addLast(val);
    13. sum += val;
    14. double res = 0;
    15. if (count <= size) res = (double)(sum / count);
    16. else {
    17. sum -= queue.pollFirst();
    18. res = (double)(sum / size);
    19. }
    20. return res;
    21. }
    22. }
    23. /**
    24. * Your MovingAverage object will be instantiated and called as such:
    25. * MovingAverage obj = new MovingAverage(size);
    26. * double param_1 = obj.next(val);
    27. */