思路:滑动窗口
细节:当nums[i] >= k时,l 移动到r+1即可,表示以nums[i]结尾的子数组长度为0时才满足<k
以nums[r]结尾的数组个数为:r - l+1。
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
int n = nums.size();
int l = 0, multi = 1, ans = 0;
for (int r = 0; r < n; ++r) {
multi *= nums[r];
while (multi >= k && r >= l) multi /= nums[l++]; //
ans += r - l + 1;
}
return ans;
}
};
易错点:加上r >= l,不然的话l可能会出现比 r 大很多!!!