首先的思路是使用滑动窗口解决,使用滑动窗口我们可以确定符合条件的子数组。
如果此题求找到符合条件的子数组最大长度/最小长度,下图可以直观的看出是max=3,min=1
class Solution {
public int numSubarrayProductLessThanK(int[] nums, int Target) {
int start = 0; //左指针
int end = 0; //右指针
int sum = 1; //初始积为1
int n = nums.length; //数组长度
int res = 0; //符合条件的子数组个数
while (end<n){
sum *= nums[end];
while (sum>=Target && start<end){
sum /= nums[start];
start++;
}
if(sum < Target){
res += end-start+1;
}
end++;
}
return res;
}
}
其实滑动窗口的代码实现基本没变,只不过怎么想到 res += end-start+1 难住了大部分人