346. Moving Average from Data Stream

来源:互联网 发布:电脑打字软件怎么下载 编辑:程序博客网 时间:2024/06/07 09:27

Given a stream of integers and a window size, calculate the moving average of all integers in the sliding window.

For example,

MovingAverage m = new MovingAverage(3);m.next(1) = 1m.next(10) = (1 + 10) / 2m.next(3) = (1 + 10 + 3) / 3m.next(5) = (10 + 3 + 5) / 3
一道设计题,限制了Queue的长度,可以加一个判断,如果Queue大于了size,就弹出第一个数,求剩下数和当前数的平均;如果没超过size,累加求平均。代码如下:

public class MovingAverage {    private int size = 0;    private int count = 0;    private Queue<Integer> queue = new LinkedList<Integer>();    private double average = 0;    /** Initialize your data structure here.*/     public MovingAverage(int size) {        this.size = size;    }        public double next(int val) {        if (queue.size() >= size) {            average = (average * size - queue.poll() + val) / size;            queue.offer(val);        } else {            average = (average * queue.size() + val) / (queue.size() + 1);            queue.offer(val);        }        return average;    }}/** * Your MovingAverage object will be instantiated and called as such: * MovingAverage obj = new MovingAverage(size); * double param_1 = obj.next(val); */

0 0
原创粉丝点击