要求
给你一个由 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
核心代码
class Solution:
def findMaxAverage(self, nums: List[int], k: int) -> float:
s = -99999
res = -99999
for i in range(len(nums) - k + 1):
if s == -99999:
s = sum(nums[:k])
else:
s -= nums[i - 1]
s += nums[i + k - 1]
res = max(res,s * 1.0 / k)
return res
解题思路:我们之前使用过一次这个思想,我们先拿到窗口为k的数据的和,当我们向前移动数据的时候,注意我们要减去从window中出去头元素,在加上新进来的尾元素,保持window的整体的大小不变。