给定一个正整数数组 nums
和整数 k
,请找出该数组内乘积小于 k
的连续的子数组的个数。
1 public int numSubarrayProductLessThanK(int[] nums, int k) { 2 int index=0,sum=1,n=nums.length,ans=0; 3 for (int i=0;i<n;i++){ 4 sum*=nums[i]; 5 if (sum<k){ 6 ans+=(i-index+1); 7 }else{ 8 while (index<=i&&sum>=k){ 9 sum/=nums[index]; 10 index++; 11 } 12 ans+=(i-index+1); 13 } 14 } 15 return ans; 16 } 17 }
思路:因为乘积只会越来越大,所以对于每一个为结尾的子数组,找到第一个满足条件的index即可。