標籤:param 設計 有一個 amp structure 第一個 solution 關鍵詞 個數
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) = 1m.next(10) = (1 + 10) / 2m.next(3) = (1 + 10 + 3) / 3m.next(5) = (10 + 3 + 5) / 3
題目標籤:Design
這道題目讓我們設計一個移動平均值的結構,我們有一個input size, 這個size是控制著我們的window。每次都新的數字進來,如果目前的size小於window,那麼繼續加入。如果新的數字進來,size已經滿了,等於window size。那麼我們需要把第一個數字去除,然後加入新的數字。可以利用ArrayList來模仿queue實現,add 加入到最後, remove(0) 把第一個數字去除。還要設一個sum, 每次加入,就加入sum, 當滿了之後,每次去除,只要從sum裡減去。這樣就可以避免每一次加入一個數位時候,都要遍曆一次queue來得到所有數字之和。
Java Solution:
Runtime beats 71.48%
完成日期:07/09/2017
關鍵詞:Design
關鍵點:利用ArrayList來模仿Queue
1 public class MovingAverage { 2 3 ArrayList<Integer> queue; 4 int queue_size; 5 double sum; 6 /** Initialize your data structure here. */ 7 public MovingAverage(int size) 8 { 9 queue = new ArrayList<>(size);10 queue_size = size;11 sum = 0;12 }13 14 public double next(int val) 15 {16 if(queue.size() == queue_size) // meaning it is full17 {18 sum -= queue.get(0); // minus head19 queue.remove(0); // remove the head20 }21 22 queue.add(val); //append the new integer23 sum += val; // add into sum24 25 return (sum / queue.size()); 26 }27 }28 29 /**30 * Your MovingAverage object will be instantiated and called as such:31 * MovingAverage obj = new MovingAverage(size);32 * double param_1 = obj.next(val);33 */
參考資料:N/A
LeetCode 演算法題目列表 - LeetCode Algorithms Questions List
LeetCode 346. Moving Average from Data Stream (資料流動中的移動平均值)