2021/02/04 每日一题 子数组最大平均数 I

果然,又是滑动窗口题,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)
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容