乘积小于 K 的子数组
难度:中等
利用滑动窗口的思想,令 i为子数组的左端点,j为右端点,每次移动右端点,若此时乘积 大于等于k,那么需要将乘积除以左端点并令左端点右移,直至乘积小于k为止。
代码如下:
public int numSubarrayProductLessThanK(int[] nums, int k) {
if(k<=1)
return 0;
int i = 0;
int j = 0;
int cur = 1;
int res = 0;
int len = nums.length;
for (; j < len; j++) {
cur *= nums[j];
while (cur>=k){
cur /= nums[i++];
}
res += j-i+1;
}
return res;
}
执行结果:成功