当前位置:网站首页>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
边栏推荐
- Distributed Transactions - Introduction to Distributed Transactions, Distributed Transaction Framework Seata (AT Mode, Tcc Mode, Tcc Vs AT), Distributed Transactions - MQ
- 联盟链的真实场景在哪里
- 数据库上机实验5 数据库安全性
- 为什么要用Flink,怎么入门使用Flink?
- The interviewer asked me how to divide the database and the table?Fortunately, I summed up a set of eight-part essays
- Anaconda配置环境指令
- 【mysql 提高查询效率】Mysql 数据库查询好慢问题解决
- 剑指offer专项突击版 ---第 5 天
- 太厉害了,终于有人能把文件上传漏洞讲的明明白白了
- torch.normal function usage
猜你喜欢
【JS面试题】面试官:“[1,2,3].map(parseInt)“ 输出结果是什么?答上来就算你通过面试
剑指offer基础版 --- 第21天
mysql5.7.35安装配置教程【超级详细安装教程】
剑指offer基础版 ---- 第29天
分布式事务处理方案大 PK!
Kubernetes certificate validity period modification
MySQL-Explain详解
[mysql improves query efficiency] Mysql database query is slow to solve the problem
uni-app进阶之内嵌应用【day14】
Anaconda配置环境指令
随机推荐
Kubernetes certificate validity period modification
剑指offer基础版 --- 第22天
uni-app进阶之创建组件/原生渲染【day9】
面试官,不要再问我三次握手和四次挥手
Qt Creator + CMake 运行调试总会自动 build 所有目标
剑指offer基础版 ---- 第27天
【一起学Rust】Rust学习前准备——注释和格式化输出
面试官竟然问我怎么分库分表?幸亏我总结了一套八股文
闭包(三)----执行环境
剑指offer专项突击版 --- 第 3 天
tf.keras.utils.get_file()
Paginate the list collection and display the data on the page
剑指offer专项突击版 ---第 5 天
C语言教程(三)-if和循环
剑指offer专项突击版 ---- 第2天
Interviewer: If the order is not paid within 30 minutes, it will be automatically canceled. How to do this?
find、filter、map的区别
剑指offer基础版 ----- 第28天
The TOKEN value of Kubernetes joining the cluster expires
运用flask框架发送短信验证码的流程及具体代码