🥉Easy
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
示例:
输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
提示:
- 1 <= k <= n <= 30,000。
- 所给数据范围 [-10,000,10,000]。
题解
这种题就得滑动窗口,单纯的计算遇到很大的数据一定会超时!!!
var findMaxAverage = function(nums, k) {let max = -Infinityfor(let i=0;i<=nums.length-k;i++){let temp=nums.slice(i,i+k)let sum = temp.reduce((prev,cur)=> prev+cur)/kif (sum>max) max=sum}return max};

滑动窗口
JavaScript
/*** @param {number[]} nums* @param {number} k* @return {number}*/var findMaxAverage = function(nums, k) {let data = nums.slice(0,k)let sum = data.reduce((prev,cur)=> prev+cur)let max = sum/kfor (let i=1;i<=nums.length-k;i++){sum-=nums[i-1]sum+=nums[i+k-1]if (sum/k > max) max = sum/k}return max};
Python
class Solution:
def findMaxAverage(self, nums: List[int], k: int) -> float:
maxTotal = total = sum(nums[:k])
n = len(nums)
for i in range(k, n):
total = total - nums[i - k] + nums[i]
maxTotal = max(maxTotal, total)
return maxTotal / k
复杂度分析
- 时间复杂度:
,其中nn 是数组nums 的长度。遍历数组一次。
- 空间复杂度:
。
