题目描述
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
示例 1:
输入: [1,12,-5,-6,50,3], k = 4 输出: 12.75 解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
注意:
解法
有题目可知,求出窗口大小为 k
的连续子数组的最大和,然后计算出平均数即可。
不妨以 sumV[i]
表示长度为 k
起始下标为 i
的子数组的和,则 sumV[i+1]
的值为 sumV[i]-nums[i-1]+nums[i+k-1]
,依次求出每个子数组的和,取最大值即可。
计算子数组的和,采用这种方式可以使得总时间复杂的为
O(n)
。
class Solution:
def findMaxAverage(self, nums: List[int], k: int) -> float:
sumV=sum(nums[:k])
ret=sumV
for i in range(1,len(nums)-k+1):
sumV=sumV-nums[i-1]+nums[i+k-1]
ret=max(sumV,ret)
return ret/k