经典滑动窗口题型

给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。

请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。

任何误差小于 10-5 的答案都将被视为正确答案。

示例 1:

复制代码
输入:nums = [1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

示例 2:

复制代码
输入:nums = [5], k = 1
输出:5.00000

思路:

题目也可以抽象成长度固定为 k 的滑动窗口。当每次窗口右移的时候,需要把右边的新位置 加到 窗口中的 和 中,把左边被移除的位置从窗口的 和 中 减掉。这样窗口里面所有元素的和是准的,我们求出最大的和,最终除以 k 得到最大平均数。

需要注意的是,需要根据 i 的位置,计算滑动窗口是否开始、是否要移除最左边元素:

当 i >= k 时,为了固定窗口的元素是 k 个,每次移动时需要将 i - k 位置的元素移除。

当 i >= k - 1 时,最左边第一个滑动窗口内的元素刚好 k 个,开始计算滑动窗口的最大和。

代码如下:

class Solution:

def findMaxAverage(self, nums: Listint, k: int) -> float:

mx=-10000

cnt=0

for i in range(k):

cnt+=numsi

for j in range(k,len(nums)):

cnt=cnt-numsj-k+numsj

mx=max(mx,cnt)

return 1.0*mx/k

相关推荐
longlongzihan4 小时前
LeetCode 17电话号码的字母组合:回溯算法(DFS)详解
c++·算法·leetcode·深度优先
封印师请假去地球钓鱼4 小时前
边解边变的问题:从“决策依赖“一词出发
人工智能·算法
今晚打老虎5 小时前
c++之提高A(前缀和)(第三课)
数据结构·c++·算法
不会就选b6 小时前
算法日常・每日刷题--<贪心>26
数据结构·算法
hetao17338377 小时前
2026-09-29 hetao1733837 的刷题记录
c++·算法
欣欣之王来了8 小时前
AI合规专项:AI算法透明度的合规要求
人工智能·算法
wzdark8 小时前
分块思想在算法优化中的实践与应用4
算法
Because_of_Her18 小时前
dfs-洪水填充技巧
笔记·算法·深度优先·洪水填充
小静AI工程实验室9 小时前
RSA 算法详解:从模幂原理到 OAEP 加密、PSS 签名与 Python 实验
python·算法
xzal129 小时前
GESP Python笔记
笔记·python·算法