1. 问题描述:
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
示例:
输入:[1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
提示:
1 <= k <= n <= 30,000。
所给数据范围 [-10,000,10,000]。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-average-subarray-i
2. 思路分析:
分析题目可以知道我们每一次维护长度为k的滑动窗口节即可,这里可以使用i,j两个指针来维护长度为k的窗口即可。
3. 代码如下:
from typing import List
class Solution:
# 每一次维护长度为k的滑动窗口即可
def findMaxAverage(self, nums: List[int], k: int) -> float:
i, j = 0, 0
res = -10 ** 5
s = 0
while i < len(nums):
s += nums[i]
# 当前窗口的长度大于了k那么左边的指针应该往右移动
if i - j + 1 > k:
s -= nums[j]
j += 1
# 当前窗口的位置必须大于等于k - 1才是满足条件的
if i >= k - 1: res = max(res, s / k)
i += 1
return res