problem:713. 乘积小于 K 的子数组
思路:特判0和1,其他的用滑动窗口维护一下窗口内的乘积不超过k,相当于枚举右端点
Accode:
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
if(k<=1) return 0;
int len = nums.size();
int ans = 0;
int sum = 1;
for(int i=0,j=0;i<len;i++){
sum*=nums[i];
while(sum>=k){
sum/=nums[j];
j++;
}
ans +=i-j+1;
}
return ans;
}
};
时间复杂度:$o(n)$