🥉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 = -Infinity
for(let i=0;i<=nums.length-k;i++){
let temp=nums.slice(i,i+k)
let sum = temp.reduce((prev,cur)=> prev+cur)/k
if (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/k
for (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 的长度。遍历数组一次。
- 空间复杂度:
。