经典滑动窗口题型

给你一个由 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: List[int], k: int) -> float:

mx=-10000

cnt=0

for i in range(k):

cnt+=nums[i]

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

cnt=cnt-nums[j-k]+nums[j]

mx=max(mx,cnt)

return 1.0*mx/k

相关推荐
阿正的梦工坊5 分钟前
DreamGym:通过经验合成实现代理学习的可扩展化
人工智能·算法·大模型·llm
小武~14 分钟前
Leetcode 每日一题C 语言版 -- 45 jump game ii
c语言·算法·leetcode
行云流水62640 分钟前
前端树形结构实现勾选,半勾选,取消勾选。
前端·算法
laocooon5238578861 小时前
一个C项目实现框架
c语言·算法
c#上位机2 小时前
halcon图像增强——图像取反
图像处理·算法·c#·halcon
zheyutao2 小时前
割点和桥
算法·图论
@小码农3 小时前
2025年北京海淀区中小学生信息学竞赛第二赛段C++真题
开发语言·数据结构·c++·算法
蓝域小兵3 小时前
齐次方程组和非齐次方程组有什么区别
人工智能·算法·机器学习
0 0 03 小时前
CCF-CSP第39次认证第三题——HTTP 头信息(HPACK)【C++】
开发语言·c++·算法
Data_agent3 小时前
1688按图搜索1688商品(拍立淘)API ,Python请求示例
爬虫·python·算法·图搜索算法