Loading...

【滑动窗口】LCR 009. 乘积小于 K 的子数组

在这里插入图片描述

求解代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public int numSubarrayProductLessThanK(int[] nums, int k) {

        int cur = 1;

        int left = 0;

        int right = 0;

        int res = 0;

        // 每次循环都在考虑:以 right 为右边界的所有满足条件的子数组
        while (right < nums.length) {

            // 把 nums[right] 包含进来
            cur *= nums[right];

            // 调整左边界,保证窗口乘积 < k
            while (left <= right && cur >= k) {
                // 从窗口中移除 nums[left]
                cur /= nums[left];

                // 左边界右移,缩小窗口
                left++;
            }

            // 计算以 right 为右边界的满足条件的子数组个数

            res += (right - left + 1);

            // 右指针右移,准备处理下一个右边界
            right++;
        }

        return res;
    }

小贴士

关键在于以 right 为结尾的、乘积 < k 的子数组有right - left + 1 个

最后更新于 2026-04-05 17:35:33
Code Road Record