346. Moving Average from Data Stream

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

可以發(fā)現(xiàn)規(guī)律,數(shù)字長度不能超過定義的初始大小, 否則舍棄最開始的部分, 很明顯要用到先進(jìn)先出的隊(duì)列。

public class MovingAverage {?
? ? ?Queue<Integer> queue;
? ? ?int queue_size;
? ? ?double sum = 0;
? ? ?public MovingAverage(int size) {
? ? ? ? ? ? ? ?queue = new LinkedList<>();
? ? ? ? ? ? ? ?queue_size = size;
? ? ?}
? ? ?public double next(int val) {
? ? ? ? ? ? ? ?sum += val;
? ? ? ? ? ? ? ?queue.offer(val);
? ? ? ? ? ? ? ?if(queue.size() > queue_size){
? ? ? ? ? ? ? ? ? ? ? ?sum -= queue.poll();
? ? ? ? ? ? ? ? ? ? ? ?return sum/queue_size;
? ? ? ? ? ? ? ?}else{
? ? ? ? ? ? ? ? ? ? ? ?return sum/queue.size();
? ? ? ? ? ? ? ?}
? ? ?}
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容