经典滑动窗口题型

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

相关推荐
一起养小猫13 小时前
LeetCode100天Day16-跳跃游戏II与H指数
算法·游戏
mit6.82413 小时前
两个有序集合|状态分析
算法
平生不喜凡桃李13 小时前
LeetCode 两数之和/三数之和
算法·leetcode·两数之和·三数之和
C雨后彩虹13 小时前
中文分词模拟器
java·数据结构·算法·华为·面试
BLi4ee13 小时前
【Scholarly Notes】Adaptive Model Pruning for Federated Learning
算法·机器学习·剪枝
Remember_99313 小时前
【LeetCode精选算法】二分查找专题二
java·数据结构·算法·leetcode·哈希算法
We་ct14 小时前
LeetCode 42. 接雨水:双指针解法深度剖析与全方法汇总
前端·算法·leetcode·typescript
液态不合群14 小时前
如何提升 C# 应用中的性能
开发语言·算法·c#
诗远Yolanda14 小时前
EI国际会议-通信技术、电子学与信号处理(CTESP 2026)
图像处理·人工智能·算法·计算机视觉·机器人·信息与通信·信号处理
程序员-King.14 小时前
day165—递归—最长回文子序列(LeetCode-516)
算法·leetcode·深度优先·递归