713. 乘积小于 K 的子数组(双指针)
题目:
思路:
双指针遍历
每一次 r 遇到就用 sum 乘起来,如果大于 k ,左指针就右移知道 sum 小于k,每次循环都 cont 都加上r-l+1,因为合法才会出循环
代码:
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
int cont=0;
long long sum=1;
int l=0,r=0;
for(;r<nums.size();r++){
sum*=nums[r];
while(sum>=k&&l<=r){
sum/=nums[l];
l++;
}
cont+=r-l+1;
}
return cont;
}
};
结果: