您的位置:首页 > 其它

346. Moving Average from Data Stream

2017-02-11 09:15 351 查看
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) = 1
m.next(10) = (1 + 10) / 2
m.next(3) = (1 + 10 + 3) / 3
m.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);
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: