preSum 前缀和列表计算列表中连续子数组的总值

preSum 前缀和列表计算列表中连续子数组的总值,第1张

preSum 前缀列表计算列表中连续子数组的总值
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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5703058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存