当前位置:网站首页>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
边栏推荐
猜你喜欢

面试官竟然问我怎么分库分表?幸亏我总结了一套八股文

Swordsman Offer Special Assault Edition --- Day 3

Swordsman Offer Special Assault Edition ---- Day 6

MySQL8.0.26安装配置教程(windows 64位)
![[Introduction to MySQL 8 to Mastery] Basics - silent installation of MySQL on Linux system, cross-version upgrade](/img/af/7a2cdcc6535c04c508c9ddf9ee0cb2.png)
[Introduction to MySQL 8 to Mastery] Basics - silent installation of MySQL on Linux system, cross-version upgrade

数据库上机实验5 数据库安全性

Refinement of the four major collection frameworks: Summary of List core knowledge

太厉害了,终于有人能把文件上传漏洞讲的明明白白了

Anaconda configure environment directives

Quickly master concurrent programming --- the basics
随机推荐
tf.keras.utils.get_file()
Flink sink redis writes to Redis
【C语言3个基本结构详解——顺序、选择、循环】
16 【打包上线 图片懒加载】
Redis管道技术/分区
剑指offer基础版 --- 第21天
Redis Advanced - Cache Issues: Consistency, Penetration, Penetration, Avalanche, Pollution, etc.
uni-app进阶之自定义【day13】
Redis进阶 - 缓存问题:一致性、穿击、穿透、雪崩、污染等.
剑指offer基础版 ----- 第25天
数据库上机实验2 单表查询和嵌套查询
Kubernetes certificate validity period modification
Distributed transaction processing solution big PK!
MYSQL下载及安装完整教程
分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ
初涉C语言
快速掌握并发编程 --- 基础篇
面试官,不要再问我三次握手和四次挥手
字符串的新增方法
Anaconda配置环境指令