地址 https://leetcode-cn.com/problems/subarray-product-less-than-k/
题目
给定一个正整数数组 nums和整数 k 。
请找出该数组内乘积小于 k 的连续的子数组的个数。
可以用前缀和的想法,但直接用会导致溢出。由于数组中元素都为正数,所以前缀积时非递减的,满足条件的数组都再一个区间内,最终转化为找区间的边界。
可以用二分查找,也可以用双指针取找。
需要注意的特殊情况时k=1和k=0 ,这两种都不存在对应的数组。
i是区间右侧边界,l是左侧边界
class Solution {
public int numSubarrayProductLessThanK(int[] nums, int k) {
int len = nums.length;
int count = 0;
if(len>0 && k>1){// k = 1&& k=0
int l =0;
int cur = 1;
for(int i=0;i<len;i++){
cur *= nums[i];
while(cur>=k ){
cur /= nums[l];
l++;
}
count += i-l +1;
}
}
return count;
}
}
615

被折叠的 条评论
为什么被折叠?



