Your are given an array of positive integers nums.
Count and print the number of (contiguous) subarrays where the product of all the elements in the subarray is less than k.
Example 1:
Input: nums = [10, 5, 2, 6], k = 100
Output: 8
Explanation: The 8 subarrays that have product less than 100 are: [10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6].
Note that [10, 5, 2] is not included as the product of 100 is not strictly less than k.
Note:
0 < nums.length <= 50000.
0 < nums[i] < 1000.
0 <= k < 10^6.
思路:打印出所有积小于k的子数组个数,两指针,简单的滑动窗口,维持窗口内乘积小于k否则i++,每次都是j++,这里更新ans有技巧,每次都加上窗口长度实际上就是新节点到原来窗口里的每个数之间形成的子数组;也可以通过len,对于每个i,第一个for是以i为中心,递增len,第二个是偶数,len通过回文两遍拓展
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
if(k<=1) return 0;
int i=0,cnt=0,res=1;
for(int j=0;j<nums.size();j++){
res*=nums[j];
while(res>=k) res/=nums[i++];
cnt+=j-i+1;
}
return cnt;
}
};