子数组最大平均数 I-简单
难度:简单
题目描述:
给定 n
个整数,找出平均数最大且长度为 k
的连续子数组,并输出该最大平均数。
示例:
输入: [1, 12, -5, -6, 50, 3], (k = 4);
输出: 12.75;
解释: 最大平均数(12 - 5 - 6 + 50) / 4 = 51 / 4 = 12.75;
1
2
3
2
3
解题思路:
- 遍历数组,取出 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;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
滑动窗口
一次遍历,当累加的元素数量小于等于 k 时(i<k),直接累加,并且 max=sum
当累加的元素数量大于 k 时(i>=k)),累加当前元素,并删除第 i-k 个元素,然后 max 取 sum 和之前值较大的一个
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;
};
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12