当前位置:网站首页>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
边栏推荐
- 数据库上机实验4 数据更新和视图
- Redis Advanced - Cache Issues: Consistency, Penetration, Penetration, Avalanche, Pollution, etc.
- 可以“繁殖”的程序
- Distributed Transactions - Introduction to Distributed Transactions, Distributed Transaction Framework Seata (AT Mode, Tcc Mode, Tcc Vs AT), Distributed Transactions - MQ
- tf.keras.utils.pad_sequences()
- 剑指offer基础版 ----- 第28天
- 为什么要用Flink,怎么入门使用Flink?
- 闭包(五)----一个常见的循环
- Refinement of the four major collection frameworks: Summary of List core knowledge
- torch.normal function usage
猜你喜欢
随机推荐
mysql 的简单运用命令
C语言指针详解
数据库学习笔记
Linux的mysql报ERROR 1045 (28000) Access denied for user ‘root‘@‘localhost‘ (using password NOYSE)
数据库上机实验5 数据库安全性
MYSQL下载及安装完整教程
Anaconda配置环境指令
Refinement of the four major collection frameworks: Summary of List core knowledge
Goodbye to the cumbersome Excel, mastering data analysis and processing technology depends on it
为什么要用Flink,怎么入门使用Flink?
10 【组件编码流程 组件自定义事件 全局事件总线】
面试Redis 高可靠性|主从模式、哨兵模式、Cluster集群模式
面试官竟然问我怎么分库分表?幸亏我总结了一套八股文
C语言教程(一)-准备
闭包(二)
The interviewer asked me TCP three handshake and four wave, I really
Object Detection Study Notes
剑指offer专项突击版 ---- 第2天
剑指offer基础版 ---- 第26天
数据库上机实验6 数据库完整性






