技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

Sliding Window

leetCode の「713. Subarray Product Less Than K」を Sliding Window アルゴリズムで解いたので、今後の参考のために、解説のコードをここに残しておく。
https://leetcode.com/problems/subarray-product-less-than-k/

public int numSubarrayProductLessThanK(int[] nums, int k) {
    if (k <= 1) {
        return 0;
    }

    int product = 1;
    int count = 0;
    int windowStart = 0;

    // window の End を延ばしていき、積が k を超えたら window の Start を進めて window を狭める。
    for (int windowEnd = 0; windowEnd < nums.length; windowEnd++) {
        product *= nums[windowEnd];

        // 積が k に収まるまで、start の位置を進める。
        // このループを抜けると、start は 有効な window の起点を指している。
        while (product >= k) {
            product /= nums[windowStart];
            windowStart++;
        }

        count += (windowEnd - windowStart + 1);
    }
    return count;
}