Note:
滑动窗口,I 和 J , I 在前面,J 在后面,每次I往后滑动一个
while去走判断当前的窗口内是不是已经乘积超过了K
超过了就让J往后走,没超过就统计符合要求的个数
每次找到的区间,符合要求的有I - J + 1个
分别是
i
i ~ i - 1
i ~ i - 2
.....
代码如下:
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
if(k <= 1) return 0;
int ans = 0, mu = 1;
for(int i = 0, j = 0; i < nums.size(); i ++){
mu *= nums[i];
while(mu >= k) mu /= nums[j ++];
ans += i - j + 1;
}
return ans;
}
};