class Solution:
def findMaxAverage(self, nums: List[int], k: int) -> float:
if not nums:
return 0.0
if len(nums)<=k:
return sum(nums)/k
# 滑动窗口
size = len(nums)-k+1
Sum =0
for i in range(k):
Sum+=nums[i]
res = Sum
for i in range(k,len(nums)):
Sum = Sum+nums[i]-nums[i-k]
res = max(res,Sum)
return res/k
#前缀和
size = len(nums)+1
preSum = [0]*size
for i in range(len(nums)):
preSum[i+1] = preSum[i]+nums[i]
print(preSum)
largest = float('-inf')
for i in range(k, len(nums)+1):
largest = max(preSum[i] - preSum[i-k], largest)
return largest / float(k)
-
滑动窗口法
- 传统的滑窗法不行需要进行改进,不然会超出时间限制,所谓滑窗就是减去左边一个,加上右边一个
- 不能每次用一个窗口将所有的数字扫描进去,这样会造成内存的负载,导致超出时间限制
-
前缀和
-
假如元素的大小是k,那么就需要声明一个k+1的空数组preSum
-
preSum[i]代表的是num[i]左边所有元素之和,当然也包括num[i]
-
每次往右移动一个,总要减去一个最左边的元素
-
这个题目不管使用上述那个方法,消耗的时间都比较大。