Leetcode 643. 子數組最大平均數 I

  • 2019 年 12 月 2 日
  • 筆記

題目描述

給定 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