当前位置:网站首页>leetcode-每日一题剑指 Offer II 041. 滑动窗口的平均值(队列模拟)
leetcode-每日一题剑指 Offer II 041. 滑动窗口的平均值(队列模拟)
2022-07-31 05:10:00 【lin钟一】

题目链接:https://leetcode.cn/problems/qIsx9U/
思路
方法一、队列模拟
直接想法
题目要求我们计算滑动窗口里所有数的平均值,给定了窗口大小size,我们在窗口里的数字个数不超过窗口大小时,按照个数计算平均值,一旦超过窗口大小,我们则需要移动窗口,计算当前窗口里的平均值
算法
- 设计MovingAverage结构体存放窗口大小size,当前窗口数总和sum,记录当前窗口的数 num数组
- Constructor 函数用于把窗口大小size记录在MovingAverage结构体里
- Next方法用于计算窗口平均值
1)当前窗口数字个数不超过窗口大小,按照个数计算平均值
2)当前窗口数字个数超过窗口大小,需要移动窗口,计算当前窗口里的平均值
代码示例
type MovingAverage struct {
size int
sum int
num []int
}
/** Initialize your data structure here. */
func Constructor(size int) MovingAverage {
return MovingAverage{
size: size,
}
}
func (m *MovingAverage) Next(val int) float64 {
//超过窗口大小,需要移动窗口
if len(m.num) == m.size{
m.sum -= m.num[0]
m.num = m.num[1:]
}
m.sum += val
m.num = append(m.num, val)
return float64(m.sum) / float64(len(m.num))
}
/** * Your MovingAverage object will be instantiated and called as such: * obj := Constructor(size); * param_1 := obj.Next(val); */

复杂度分析
- 时间复杂度:O(1) 初始化和调用Next方法都只需要O(1)的时间
- 空间复杂度:O(size) 其中size是窗口大小,空间复杂度主要取决于窗口大小,窗口里的数字个数不会超过size
边栏推荐
猜你喜欢
随机推荐
分布式事务处理方案大 PK!
剑指offer基础版 --- 第22天
The interviewer asked me how to divide the database and the table?Fortunately, I summed up a set of eight-part essays
mysql 的简单运用命令
C语言指针详解
wpf ScrowViewer水平滚动
tf.keras.utils.get_file()
【JS面试题】面试官:“[1,2,3].map(parseInt)“ 输出结果是什么?答上来就算你通过面试
tf.keras.utils.pad_sequences()
解决响应式数据依赖响应式数据无响应问题
【MQ我可以讲一个小时】
Simple command of mysql
Flink sink redis 写入Redis
Redis Advanced - Cache Issues: Consistency, Penetration, Penetration, Avalanche, Pollution, etc.
Kubernetes加入集群的TOKEN值过期
C语言的文件操作(一)
16 【打包上线 图片懒加载】
关于LocalDateTime的全局返回时间带“T“的时间格式处理
面试Redis 高可靠性|主从模式、哨兵模式、Cluster集群模式
梳理一下自己常用的快捷键


![[MQ I can speak for an hour]](/img/ef/863c994ac3a7de157bd39545218558.jpg)






