相关标签
一、题目要求
二、题解和代码实现
1.题解
2.代码实现
代码如下(示例):
//滑动窗口
class Solution {
public int numSubarrayProductLessThanK(int[] nums, int k) {
if (nums == null || k == 0 || k == 1) return 0;
int n = nums.length;
int count =0;
int l =0;//左指针
int r = 0;//右指针
int sum= 1;//乘积的结果
while (r < n){//循环遍历,直到右指针到尾部,说明已经把数组都乘积了一次
sum *=nums[r];
while (sum>=k){//说明不符合条件,需要把结果/左指针的值,再把左指针往右移动一位
sum /= nums[l];
l++;
}
//这里比较难理解,r-l+1求出左右指针的距离,可以得出当前距离有多少个子数组
count += r-l+1;
r++;
}
return count;
}
}
//暴力判断破解
class Solution {
public int numSubarrayProductLessThanK(int[] nums, int k) {
int n = nums.length;
int count =0;//记录次数
for (int i = 0; i < n; i++) {//遍历
int sum = nums[i];//获取值
if (sum >=k){//当大与时,不符合条件
continue;
}else {//这里说明小于,次数先+1
count++;
int j = i+1;//记录i的下一个值
while (j<n){//循环遍历,直到末尾
sum*=nums[j++];//获取值
if (sum>=k){//当大于k说明不符合条件,中断循环
break;
}else {//符合条件,次数+1
count++;
}
}
}
}
return count;
}
}