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;
}
};
结果:

该博客介绍了如何运用双指针技术解决数组中找到所有乘积小于给定值K的子数组的问题。通过初始化左指针l、右指针r和累乘值sum,不断移动右指针并更新乘积,当乘积大于等于K时,左指针右移直到乘积小于K。循环过程中记录合法子数组的数量。这种方法高效地解决了子数组乘积的限制问题。
667

被折叠的 条评论
为什么被折叠?



