class Solution:
def findMaxAverage(self, nums: List[int], k: int) -> float:
# 计算nums总长度来生成一个长度+1的列表
nums_len = len(nums)
preSum = [0] * (nums_len + 1)
#
# 循环nums列表 生成前缀和列表preSum
#假设nums = [1, 12, -5, -6, 50, 3], preSum则为[0, 1, 13, 8, 2, 52, 55]
#可以得知preSum[2] = nums[0] + nums[1], 转一下就是 preSum[k] = sums[nums[count:k]]
for i in range(len(nums)):
preSum[i + 1] = preSum[i] + nums[i]
#
# 定义count=0, res为第一个长度为k的连续子数组的长度
count = 0
res = preSum[k]
#
# 定义一个双指针,左指针为k 右指针为前缀和列表的长度
left, right = k, len(preSum)
while left < right:
# preSum[left] - preSum[count] 可计算出连续子数组的值(自己推一下就懂了)
#假设nums = [1, 12, -5, -6, 50, 3], k 为4, 那么得到的最长子数组为[2,51,42]
#preSum为[0, 1, 13, 8, 2, 52, 55],preSum[left] - preSum[count] 可以得到[2,51,42]
res = max(res, preSum[left] - preSum[count])
count += 1
left += 1
return res / k
preSum 前缀和列表计算列表中连续子数组的总值
最新推荐文章于 2024-10-17 19:06:39 发布