隊(duì)列| Leetcode 346

Leetcode 分類刷題 —— 隊(duì)列(Queue)

1、題目

Leetcode 346. Moving Average from Data Stream

  • 實(shí)現(xiàn) MovingAverage 類:

MovingAverage(int size) 用窗口大小 size 初始化對(duì)象。
double next(int val) 成員函數(shù) next 每次調(diào)用的時(shí)候都會(huì)往滑動(dòng)窗口增加一個(gè)整數(shù),請(qǐng)計(jì)算并返回?cái)?shù)據(jù)流中最后 size 個(gè)值的移動(dòng)平均值,即滑動(dòng)窗口里所有數(shù)字的平均值。

2、思路

使用一個(gè)固定大小的隊(duì)列來(lái)表示窗口,每次插入數(shù)據(jù)前判斷隊(duì)列是否已滿,滿了就刪除隊(duì)列的頭元素,再在隊(duì)列的尾部插入元素。
為避免頻繁求和,使用一個(gè)sum變量保存隊(duì)列里面元素的和。

3、Java 代碼

class MovingAverage {
    
    private Queue<Integer> window = new ArrayDeque<>();
    private int maxSize;
    private double sum = 0.0;
 
    /** Initialize your data structure here. */
    public MovingAverage(int size) {
        this.maxSize = size;
    }
    
    public double next(int val) {
        if (this.window.size() == this.maxSize) {
            this.sum -= this.window.poll();
        }    
        
        this.sum += val;
        this.window.offer(val);
        return this.sum / this.window.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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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