leetcode-每日一题剑指 Offer II 041. 滑动窗口的平均值(队列模拟)

简介: 题目要求我们计算滑动窗口里所有数的平均值,给定了窗口大小size,我们在窗口里的数字个数不超过窗口大小时,按照个数计算平均值,一旦超过窗口大小,我们则需要移动窗口,计算当前窗口里的平均值

78851643e7b34054b81cffd79d6083df.png


题目链接:https://leetcode.cn/problems/qIsx9U/


思路


方法一、队列模拟


直接想法

题目要求我们计算滑动窗口里所有数的平均值,给定了窗口大小size,我们在窗口里的数字个数不超过窗口大小时,按照个数计算平均值,一旦超过窗口大小,我们则需要移动窗口,计算当前窗口里的平均值


算法


1.设计MovingAverage结构体存放窗口大小size,当前窗口数总和sum,记录当前窗口的数 num数组


2.Constructor 函数用于把窗口大小size记录在MovingAverage结构体里


3.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);
 */

52d01ac99b8645019a69cc86e7459a51.png


复杂度分析


  • 时间复杂度:O(1) 初始化和调用Next方法都只需要O(1)的时间
  • 空间复杂度:O(size) 其中size是窗口大小,空间复杂度主要取决于窗口大小,窗口里的数字个数不会超过size
目录
相关文章
|
1月前
【LeetCode 26】239.滑动窗口最大值
【LeetCode 26】239.滑动窗口最大值
32 1
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
57 6
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
50 4
|
1月前
【LeetCode 24】225.用队列实现栈
【LeetCode 24】225.用队列实现栈
12 0
|
1月前
|
算法
【LeetCode 23】232.用栈实现队列
【LeetCode 23】232.用栈实现队列
18 0
|
1月前
【LeetCode 04】滑动窗口法总结
【LeetCode 04】滑动窗口法总结
17 0
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
28 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
54 5
|
3月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
23 3
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
39 3