内容
给定 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]。
思路
从条件来说,既然已经给出了是连续子数组,而且标明长度为k,那还想什么,直接循环遍历即可。
这里为了节约点时间,可以先算出从0到k的子序列的总和,然后后面依次移动一位,这样下一轮的子序列的总和只要减去移动后减去的一位数和新增的一位数即可。
代码
/**
子数组最大平均数
从条件来说,既然已经给出了是连续子数组,而且标明长度为k,那还想什么,直接循环遍历即可。
这里为了节约点时间,可以先算出从0到k的子序列的总和,然后后面依次移动一位,这样下一轮的子序列的总和只要减去移动后减去的一位数和新增的一位数即可。
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var findMaxAverage = function (nums, k) {
var max = 0;
for (var i = 0; i < k; i++) {
max += nums[i];
}
var sum = max;
for (var i = 1; i <= nums.length - k; i++) {
sum -= nums[i - 1];
sum += nums[i + k - 1];
if (sum > max) {
max = sum;
}
}
return max / k
};