经典滑动窗口题型

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

相关推荐
To_OC4 小时前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
renhongxia16 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
zephyr059 小时前
动态规划-最长上升子序列问题
算法·动态规划
闪电悠米9 小时前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法
卡提西亚10 小时前
leetcode-1438. 绝对差不超过限制的最长连续子数组
算法·leetcode·职场和发展
Java面试题总结11 小时前
LeetCode 93.复原IP地址
算法·leetcode·职场和发展·.net
从零开始的代码生活_11 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
Tisfy12 小时前
LeetCode 3867.数对的最大公约数之和:按题目说的做(gcd)
算法·leetcode·题解·模拟·最大公约数·gcd
泷寂12 小时前
最小生成树 (MST基础)
算法
Daniel_12312 小时前
数组——总结篇
算法