题目链接
思路:滑动窗口
分析:这里是按住right不动,移动left,也就是说,每次移动right的时候,说明在right这个位置的时候,已经统计完了在该位置的所有符合条件的答案的个数。
简单说就是,一直右边移动right,如果当前累乘积小于k,那么个数就是right-left+1个,如果当前累乘大于等于k,那么移动left。
代码:
class Solution {
public int numSubarrayProductLessThanK(int[] nums, int k) {
if(k<=1){
return 0;
}
//累乘
int temk = 1;
//左指针
int left = 0;
//答案个数
int count = 0;
//右指针
//每一次移动right,一定是统计完了right位置的答案个数的
for(int right = 0; right < nums.length;right++){
//累乘
temk = temk * nums[right];
//当累乘大于等于k,右边left
while (temk>=k){
temk = temk / nums[left++];
}
//统计答案
count = count + (right - left+1);
}
return count;
}
}
好好学习。
不打扰是我的温柔。