[leetcode]子数组最大平均数 I[javascript]

https://leetcode-cn.com/problems/maximum-average-subarray-i/

描述

给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
示例 1:

输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75


注意:

  1. 1 <= k <= n <= 30,000。
  2. 所给数据范围 [-10,000,10,000]。

分析

可以直接暴力二重循环,能过,但是效率很低
C7E820EF8C4E6180398317E717F7FF25.jpg
image.png

var findMaxAverage = function(nums, k) {
  let max = -Infinity
  for (let i = 0; i <= nums.length - k; i++) {
    let sum = 0
    for (let j = 0;j < k;j++) {
      sum += nums[i + j]
    }
    max = Math.max(sum, max)
  }
  return max / k
};

其实一次循环就可以了。
循环的时候,先判断i的值是否是小于k,小于k先累加起来,之后的每次计算减去头部数再加尾部数,求出最大值,最后平均即可。

var findMaxAverage = function(nums, k) {
  let max = -Infinity, sum = 0
  for (let i = 0; i < nums.length; i++) {
    if (i < k) {
      sum += nums[i]
      max = sum
      continue
    }
    sum = sum + nums[i] - nums[i - k]
    max = Math.max(sum, max)
  }
  return max / k
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值