346. 資料流中的移動平均值
阿新 • • 發佈:2021-01-06
給定一個整數資料流和一個視窗大小,根據該滑動視窗的大小,計算其所有整數的移動平均值。
詳細題目可檢視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) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。