【Lintcode】python - [642] Moving Average from Data Stream 個人解法筆記

題目出處

642 · Moving Average from Data Stream

難度

easy

個人範例程式碼

class MovingAverage(object):
    """
    @param: size: An integer
    """
    def __init__(self, size):
        # do intialization if necessary
        self.size = size
        self.queue = collections.deque([])
        self.sum = 0.0

    """
    @param: val: An integer
    @return:  
    """
    def next(self, val):
        # write your code here
        self.queue.append(val)
        self.sum += val
        if len(self.queue) > self.size:
            self.sum -= self.queue.popleft()
        return self.sum/len(self.queue)

# Your MovingAverage object will be instantiated and called as such:
# obj = MovingAverage(size)
# param = obj.next(val)

算法說明

Data Stream 的題型,基本上看到 data stream 就要先有意識到,
現在我們要設計的是一個「動態」的數據結構,
也就是說輸入的資料不會是「一次性的」,而是「連續性的

有這個概念之後我們就可以開始來設計了,
這題還算簡單,不需要講太多

最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解

input handling

x (題目沒有特別要求)

Boundary conditions

因為不是一次性操作,因此沒有邊界限制,
而動態的操作要注意「允許儲存的上限 = size

Reference