1. 程式人生 > 其它 >346. 資料流中的移動平均值

346. 資料流中的移動平均值

技術標籤:leetcode題目演算法佇列leetcode

給定一個整數資料流和一個視窗大小,根據該滑動視窗的大小,計算其所有整數的移動平均值。

詳細題目可檢視leetcodehttps://leetcode-cn.com/problems/moving-average-from-data-stream/

解題思路
題目表述的不是很清晰,最後輸出的結果是滑動視窗內部的數字的平均數。具體做法是使用一個佇列,當佇列長度小於滑動視窗值時,計算佇列內的平均數即可。當佇列長度大於滑動視窗值時,彈出適合數量的隊首元素(滑動視窗取的是佇列尾部的元素),然後計算均值即可。

class MovingAverage {
public:
    /** Initialize your data structure here. */
    MovingAverage(int size) {
        maxlen = size;
    }
    
    double next(int val) {
        q.push(val);
        if(q.size()>maxlen){
            for(int i = 0;i<q.size()-maxlen;i++){
                q.pop();
            }
        }
        int temp = 0;
        for(int i = 0;i<q.size();i++){
            temp += q.front();
            q.push(q.front());
            q.pop();
        }
        return (double)temp/q.size(); 
    }

private:
    queue<int> q;
    int maxlen;
};

/**
 * Your MovingAverage object will be instantiated and called as such:
 * MovingAverage* obj = new MovingAverage(size);
 * double param_1 = obj->next(val);
 */

作者:rasotae
連結:https://leetcode-cn.com/problems/moving-average-from-data-stream/solution/346-shu-ju-liu-zhong-de-yi-dong-ping-jun-ijs1/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。