一、题目链接
二、题目描述
给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。
三、解题思路
本题使用双指针的滑动窗口来解决,初始化定义两个指针计算[l,r]区间内部数字的乘积,r指针每移动一个数,我们将其累乘,并与k进行大小比对,如大于等于,需要移动指针r来对累乘进行减少,计算l到r之间形成的有效子集个数,并累加求和。
四、源码
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
int n =nums.size();
int l =0,r=0;
int ans =0;
int temp =1;
if(k<=1){
return 0;
}
while(r!=n){
temp*=nums[r];
while(temp>=k){
temp/=nums[l];
++l;
}
++r;
ans+=r-l;
}
return ans;
}
};