713. Subarray Product Less Than K
暴力解法:
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
if (k == 0)
return 0;
int retCnt = 0;
for (int i = 0; i < nums.size(); ++i) {
long long pro = 1;
int j = i;
while (j >= 0) {
pro *= nums[j];
if (pro < k)
--j;
else
break;
}
retCnt += (i - j);
}
return retCnt;
}
};
超时。
然后配合滑动窗口:
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
if (k == 0)
return 0;
int i = 0, j = 0;
long long pro = 1;
int retCnt = 0;
while (i < nums.size()) {
pro *= nums[i++];
while (pro >= k && j < i) {
pro /= nums[j++];
}
retCnt += (i - j);
}
return retCnt;
}
};