美文网首页随笔
Leetcode 643. 子数组最大平均数 I

Leetcode 643. 子数组最大平均数 I

作者: zhipingChen | 来源:发表于2019-11-30 16:02 被阅读0次

    题目描述

    给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。

    示例 1:

    输入: [1,12,-5,-6,50,3], k = 4
    输出: 12.75
    解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

    注意:

    1. 1 <= k <= n <= 30,000。
    2. 所给数据范围 [-10,000,10,000]。

    解法

    有题目可知,求出窗口大小为 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
    

    相关文章

      网友评论

        本文标题:Leetcode 643. 子数组最大平均数 I

        本文链接:https://www.haomeiwen.com/subject/isvowctx.html