Skip to content

1343. 大小为 K 且平均值大于等于阈值的子数组数目

题目链接:https://leetcode.cn/problems/number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold/

代码

ts
/**
 * 1343. 大小为 K 且平均值大于等于阈值的子数组数目
 * https://leetcode.cn/problems/number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold
 */

function numOfSubarrays(arr: number[], k: number, threshold: number): number {
    const tk = threshold * k;
    let sum = 0;
    let res = 0;
    for (let i = 0; i < arr.length; i++) {
        sum += arr[i];
        if (i - k >= 0) {
            sum -= arr[i - k];
        }
        if (i - k + 1 >= 0 && sum >= tk) {
            res++;
        }
    }
    return res;
}

思路

使用滑动窗口

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

  • 为了避免浮点数比较,将条件 sum / k >= threshold 转换为 sum >= threshold * k

  • 当窗口大小达到 k 时,如果 sum >= threshold * k,则计数加一

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

  • 空间复杂度 O(1)