https://leetcode-cn.com/problems/maximum-average-subarray-i/
描述
给定 n
个整数,找出平均数最大且长度为 k
的连续子数组,并输出该最大平均数。
示例 1:
输入: [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 sum = 0
for (let j = 0;j < k;j++) {
sum += nums[i + j]
}
max = Math.max(sum, max)
}
return max / k
};
其实一次循环就可以了。
循环的时候,先判断i的值是否是小于k,小于k先累加起来,之后的每次计算减去头部数再加尾部数,求出最大值,最后平均即可。
var findMaxAverage = function(nums, k) {
let max = -Infinity, sum = 0
for (let i = 0; i < nums.length; i++) {
if (i < k) {
sum += nums[i]
max = sum
continue
}
sum = sum + nums[i] - nums[i - k]
max = Math.max(sum, max)
}
return max / k
};