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; }