Skip to content

643. 子数组最大平均数 I

题目链接:https://leetcode.cn/problems/maximum-average-subarray-i/

代码

ts
/**
 * 643. 子数组最大平均数 I
 * https://leetcode.cn/problems/maximum-average-subarray-i/
 */

function findMaxAverage(nums: number[], k: number): number {
    let res = -Infinity, sum = 0;
    for (let i = 0; i < nums.length; i++) {
        sum += nums[i];
        if (i - k >= 0) {
            sum -= nums[i - k];
        }
        if (i - k + 1 >= 0) {
            res = Math.max(res, sum);
        }
    }
    return res / k;
}

思路

使用滑动窗口的思想:

  • 维护一个长度为 k 的窗口,用 sum 记录当前窗口的和

  • 当窗口右移时,加上新元素,减去离开窗口的元素

  • 当窗口大小达到 k 时,更新最大平均值

  • 时间复杂度 O(n),只需遍历一次数组

  • 空间复杂度 O(1)