题目链接:https://leetcode-cn.com/problems/subarray-product-less-than-k/
滑动窗口双指针,这里要求小于k的而非等于k的,所以每次调整窗口后要看看是不是要再算一次。
第一次遇到了“超出输出限制”,发现我的stdout爆炸了。。。
代码如下:
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
int len = nums.size();
int l = 0, r = 0;
int res = 0, now = 1;
while(r < len) {
bool bigger = false;
now *= nums[r];
if(now < k) {
res += (r - l + 1);
}
//printf("part1: now = %d, l = %d, r = %d, res = %d\n", now, l, r, res);
while(now >= k) {
if(l >= r) {
break;
}
now /= nums[l];
l++;
bigger = true;
}
if(now < k && bigger == true) {
res += (r - l + 1);
}
//printf("part2: now = %d, l = %d, r = %d, res = %d\n", now, l, r, res);
r++;
}
return res;
}
};