class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
int count = 0;
int n = nums.size();
//vector<int> muls(n+1,1);
//for(int i=1;i<n+1;++i){
// muls[i] = muls[i-1]*nums[i-1];
//}
int st = 0;
int ed = st;
int mul = 1;
//精简写法
for(;ed<n;ed++){
mul*=nums[ed];
while(st<=ed&&mul>=k){
mul/=nums[st++];
}
count += st<=ed?ed-st+1:0;
}
/*复杂写法,舍弃
while(st<=ed&&ed<n&&st<n){
if(mul<k){
count+=ed-st+1;
++ed;
if(ed<n){
mul*=nums[ed];
}
}else{
++st;
if(st<n){
mul/=nums[st];
}
}
}
*///前缀和,超出范围,舍弃
//for(int i=1;i<n+1;++i){
// for(int j=0;j<i;++j){
// if(muls[i]/muls[j]<k){
// count++;
// }
// }
//}
return count;
}
};
剑指 Offer II 009. 乘积小于 K 的子数组
最新推荐文章于 2024-07-21 11:20:00 发布