难度:简单
题目描述:
给定 n
个整数,找出平均数最大且长度为 k
的连续子数组,并输出该最大平均数。
示例:
输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
解题思路:
- 遍历数组,取出k个连续数组计算值
- 使max等于取出第一个数组的值
- 若后续数组所得值大于max,则赋值于max
var findMaxAverage = function(nums, k) {
let max;
let i = 0;
while (i < nums.length - k + 1) {
let n = 0;
let arr = nums.slice(i, k + i);
arr.forEach((element) => {
n = n + element;
});
if (i === 0) {
max = n / k;
}
if (max < n / k) {
max = n / k;
}
i++;
}
return max;
};
滑动窗口
一次遍历,当累加的元素数量小于等于k时(i
var findMaxAverage = function(nums, k) {
var sum=0;
for(var i=0;i<k;i++){
sum += nums[i];
}
var max=sum;
for(var i=k;i<nums.length;i++){
sum += nums[i]-nums[i-k];
max = Math.max(max,sum);
}
return max/k;
};