zoukankan      html  css  js  c++  java
  • 642. 数据流滑动窗口平均值

    642. 数据流滑动窗口平均值

    中文English

    给出一串整数流和窗口大小,计算滑动窗口中所有整数的平均值。

    样例

    样例1 :

    MovingAverage m = new MovingAverage(3);
    m.next(1) = 1 // 返回 1.00000
    m.next(10) = (1 + 10) / 2 // 返回 5.50000
    m.next(3) = (1 + 10 + 3) / 3 // 返回 4.66667
    m.next(5) = (10 + 3 + 5) / 3 // 返回 6.00000
    class MovingAverage:
        """
        @param: size: An integer
        """
        def __init__(self, size):
            # do intialization if necessary
            self.queue = []
            self.size = size 
            self.sum = 0
    
        """
        @param: val: An integer
        @return:  
        """
        def next(self, val):
            # write your code here
            if (len(self.queue) < self.size):
                self.queue.append(val)
                self.sum += val 
            else:
                if len(self.queue) == self.size:
                    self.queue.append(val)
                    pop_num = self.queue.pop(0)
                    self.sum = self.sum + val - pop_num
            
            return self.sum / len(self.queue)
    
    
    # Your MovingAverage object will be instantiated and called as such:
    # obj = MovingAverage(size)
    # param = obj.next(val)
    第二个版本(滚动数组写法)
    class MovingAverage:
        """
        @param: size: An integer
        """
        def __init__(self, size):
            # do intialization if necessary
            self.size = size
            self.count = 0 
            self.queue = [0]*size
            self.sum = 0
    
        """
        @param: val: An integer
        @return:  
        """
        def next(self, val):
            # write your code here
            index = self.count % self.size 
            self.sum = self.sum + val - self.queue[index]
            self.queue[index] = val
            self.count += 1 
            
            return self.sum / self.count if self.count < self.size else self.sum / self.size
    
    # Your MovingAverage object will be instantiated and called as such:
    # obj = MovingAverage(size)
    # param = obj.next(val)
     
  • 相关阅读:
    React antd如何实现<Upload>组件上传附件再次上传已清除附件缓存问题。
    spring项目logback日志与logstash和Elasticsearch整合
    Java后端面试经验总结分享(一)
    【设计模式】访问者模式
    【设计模式】命令模式
    【设计模式】模板方法模式
    【设计模式】代理模式
    【设计模式】享元模式
    【设计模式】外观模式
    【设计模式】组合模式
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13216371.html
Copyright © 2011-2022 走看看