果然,又是滑动窗口题,LeetCode上子数组最大平均数 I,简单难度,重拳出击
为了求窗口内平均值最大,可转换为求最大的窗口内数的和,每次窗口移动后比较之前和这次的和,取最大值,最后返回最大值/k的结果即可
var findMaxAverage = function(nums, k) {
// 定义窗口范围
let right = k
let left =0
// 当前的sum和上一个窗口的presum
let sum = 0
let presum = 0
// 记录下最大的max
let max = 0
// 初始化第一个窗口
right = k
// 从nums上截取k长度的数组,slice不操作原数组
let arr = nums.slice(0,k)
// 保存初始arr的和设为前一个sum
presum = arr.reduce((s,n) => {return s + n},0)
// 让当前最大值,等于一开始的和
max = presum
// 当窗口为1的时候
if(nums.length === 1) return (nums[0]/k)
// 开始循环数组
while(right < nums.length) {
// 每次都要移动left
left = right - k
// 计算移动后窗口中数字的和
sum = presum - nums[left] + nums[right]
// 比较这个窗口的和和之前的最大值相比
max = Math.max(max,sum)
// 将这个窗口的和保存下来
presum = sum
// right右移
right++
}
return (max / k)
};