经典滑动窗口题型

给你一个由 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

相关推荐
青 春 记 忆2 小时前
LeetCode 53. 最大子数组和|Python 解法详解
python·算法·leetcode
豆瓣鸡2 小时前
算法日记 - Day10
算法
戴西软件2 小时前
戴西CAxWorks.VPG车辆工程仿真软件技术解析(上)——安全仿真体系的自动化构建
运维·网络·数据库·人工智能·算法·安全·自动化
zander2583 小时前
4. 寻找两个正序数组的中位数:用分割点代替合并
数据结构·算法
Kisorge3 小时前
【电机控制器】 基于STSPIN32G4的FOC控制
stm32·嵌入式硬件·算法
Elivs3 小时前
RMSNorm函数
人工智能·算法·机器学习
tudousisi2223 小时前
P4447 [AHOI2018初中组] 分组 题解复盘
算法
SNAKEpc121383 小时前
OpenGL(十一)- 变换管线
c语言·c++·算法·矩阵·图形渲染
饼饼学习空间智能5 小时前
遥操作数据能否提升机器人自主化水平?详解模仿学习、仿真放大与Sim2Real闭环
人工智能·算法
间歇性努力持续性发呆的野生快乐选手6 小时前
dfs回溯,bfs枚举,完全背包
c++·算法·深度优先·宽度优先