LeetCode刷题记录(三十一):乘积小于 K 的子数组


theme: smartblue

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

乘积小于 K 的子数组

image.png

题目解析

题目素材解析

根据本道题的描述,一共提供了两个素材,并且没有什么特殊的概念。

  1. 一个整数数组nums

  2. 一个整数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; }

} ```

执行结果

执行时长高了些,有待于优化。

image.png

Java代码本地执行

Java本地可调试代码,请参考github/Ijiran,可通过索引看到相应代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ijiran

一杯咖啡太贵,一块糖就可以

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值