整数のストリームとウィンドウのサイズを考えると、スライディングウィンドウ内のすべての整数の移動平均を計算します。
例えば、
MOVINGAVERAGE M =新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
整数のストリームとウィンドウに、所定のサイズのウィンドウ数で平均を計算。
ソリューション:
この質問を考える:
LinkedList.removeリストの最初の値の()メソッドを取り出し、それを削除するために。
類似機能Queue.poll()最初の分岐キューを採取し、キューから削除
新しい値が時間に渡されるたびに数が最大番号リストと等しいかどうかを決定するために、もしそうなら、あなたはリストから値の前を削除し、新しい価値を詰め、その後に値するの現在のリストで割ったすべての値の合計を使用する必要があります数、現在のウィンドウの数で得られた平均値。
//保存当前窗口数字的总和
private double previousSum = 0.0;
//窗口的最大值
private int maxSize;
//链表用于保存当前窗口的值
private Queue<Integer> currentWindow;
public MovingAverage(int val){
currentWindow = new LinkedList<Integer>();
maxSize = val;
}
private double next(int val){
double sum = 0;
if(maxSize==currentWindow.size()){
previousSum -= currentWindow.remove();
}
currentWindow.add(val);
previousSum +=val;
return previousSum/currentWindow.size();
}