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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)