713. Subarray Product Less Than K
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
.
1、两个指针的思想。
i 指针代表以 i位开始的数字的种类
j 往后走,走到小于k的位置
( j - i )代表 i 开始的符合要求的个数。
2、当 i 指针追上 j 指针,说明这个数字已经比k大了,所以过不去。所以要判断一下。
class Solution { public: int numSubarrayProductLessThanK(vector<int>& nums, int k) { if (k <= 1) return 0; int ret = 0; int sum = 1; int j = 0; for (int i = 0; i < nums.size(); i++) { while (j < nums.size() && sum * nums[j] < k) { sum *= nums[j]; j++; } ret += (j - i); if (i == j) //过不去坎了 { sum = 1; j++; } else sum /= nums[i]; } return ret; } };