theme: smartblue
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
乘积小于 K 的子数组
题目解析
题目素材解析
根据本道题的描述,一共提供了两个素材,并且没有什么特殊的概念。
一个整数数组nums
一个整数k。
注意:数组nums的长度在1到30000之间。其中的元素在1到1000之间。k值在0到100000之间。
我的解读
本道题的一个预期结果是,获取整数数组中元素自由组合后的乘积,与整数k作比对,小于k的组合数就是预期结果。
从预期结果上来看,可以将本道题分为两大关卡;
其一,整数数组中元素的排列组合。
其二,排列组合的乘积与K对比。
只要是在解题中解决这两个问题,就可以解答成功了。
解题思路
大概解释一下思路。
第一步,当然是先声明一个结果值count。
第二步,开始循环遍历整数数组nums,进行排列组合。
第三步,不盲目的进行排列组合,因为有些组合一定比K大,若是前面的数相乘已经比K大了,也就没有比较的必要了。
第四步,利用双重循环进行组合的排列,并且与K进行对比。
第五步,在比对过程中,如果符合小于K的情况则结果值count加一。
最后得到count结果值并返回。
代码
```java class Solution { public int numSubarrayProductLessThanK(int[] nums, int k) { int count = 0; for (int i = 0; i < nums.length; i++) { int num = nums[i]; if(num < k){ count++; int j = 1; while (j < nums.length - i){ num = num * nums[i + j]; if(num < k){ count++; j++; }else{ break; } } } } return count; }
} ```
执行结果
执行时长高了些,有待于优化。
Java代码本地执行
Java本地可调试代码,请参考github/Ijiran,可通过索引看到相应代码。