当前位置:网站首页>通关剑指 Offer——剑指 Offer II 009. 乘积小于 K 的子数组
通关剑指 Offer——剑指 Offer II 009. 乘积小于 K 的子数组
2022-08-03 20:22:00 【SK_Jaco】
1.题目描述
给定一个正整数数组 nums和整数 k ,请找出该数组内乘积小于 k 的连续的子数组的个数。
示例 1:
输入: nums = [10,5,2,6], k = 100
输出: 8
解释: 8 个乘积小于 100 的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。
需要注意的是 [10,5,2] 并不是乘积小于100的子数组。
示例 2:
输入: nums = [1,2,3], k = 0
输出: 0
2.解题思路与代码
2.1 解题思路
这道题同样使用滑动窗口进行解答比较容易。我们定义窗口的左右边界 l 和 r,我们让 r 向右移动,每次移动一步然后计算当前窗口内的乘积。如果乘积小于 k,那么我们就固定 l ,统计 [l, r] 这个范围内的小于 k 的数组个数,计算数组个数时是统计以固定 r 为右边界的子数组个数。如果窗口内的乘积大于等于 k 的时候,此时固定 r 开始向右移动 l,知道窗口内的乘积小于 k 为止。需要注意每一次计算到窗口内的乘积小于 k 时,都需要为结果统计一次窗口内的数组个数。我们用题目示例 nums = [10,5,2,6], k = 100 进行图解,这样看起来更直观一点。
首先我们让 l 和 r 初始化指向 0,然后计算当前 [l, r] 窗口内的乘积等于 10,满足条件,此时子数组为 [10] 共 1 个
向右移动 r,此时窗口内的乘积为 50,满足条件。此时固定右边界,并统计以 r 为右边界的子数组为 [10, 5]、[5] 共 2 个,此时满足条件的子数组共 3 个
继续向右移动 r ,此时窗口内乘积为 100 ,等于 k,于是开始移动 l
向右移动 l 直到窗口内的乘积小于 k,重复上面步骤统计窗口内子数组个数,最后得到结果为 8
2.2 代码
class Solution {
public int numSubarrayProductLessThanK(int[] nums, int k) {
int l = 0;
int r = 0;
int ans = 0;
int res = 1;
while (r < nums.length) {
res *= nums[r];
while (l <= r && res >= k) {
res /= nums[l];
l++;
}
ans += r - l + 1;
r++;
}
return ans;
}
}
2.3 测试结果
通过测试
3.总结
- 使用滑动窗口进行解答
- 每得到一个满足条件的窗口时都需要统计窗口内以 r 为右边界的子数组个数
边栏推荐
- 后台图库上传功能
- 涨薪5K必学高并发核心编程,限流原理与实战,分布式计数器限流
- nvm的使用 nodejs版本管理,解决用户名是汉字的问题
- leetcode 326. 3 的幂
- 谁的孙子最多II
- Power button - 203 - remove the list elements linked list
- 头条服务端一面经典10道面试题解析
- 直播小程序源码,UI自动化中获取登录验证码
- Matlab paper illustration drawing template No. 42 - bubble matrix diagram (correlation coefficient matrix diagram)
- leetcode 326. Powers of 3
猜你喜欢
利用 rpush 和 blpop 实现 Redis 消息队列
RNA核糖核酸修饰RNA-HiLyte FluorTM 405荧光染料|RNA-HiLyte FluorTM 405
Statistical machine learning 】 【 linear regression model
力扣203-移除链表元素——链表
In-depth understanding of JVM-memory structure
【飞控开发高级教程6】疯壳·开源编队无人机-AI语音控制
5 款漏洞扫描工具:实用、强力、全面(含开源)
abs()、fabs() 和 labs() 的区别
边缘盒子+时序数据库,美的数字化平台 iBuilding 背后的技术选型
Anaconda 虚拟环境迁移
随机推荐
RNA核糖核酸修饰荧光染料|HiLyte Fluor 488/555/594/647/680/750标记RNA核糖核酸
Anaconda virtual environment migration
ES6 - Arrow Functions
leetcode 16. 数值的整数次方(快速幂+递归/迭代)
剑指 Offer II 044. 二叉树每层的最大值-dfs法
abs()、fabs() 和 labs() 的区别
Use ControlTemplate or Style from resource file in WPF .cs and find the control
leetcode 2119. Numbers reversed twice
ES6 introduction and let, var, const
子结点的数量(2)
华为设备配置VRRP与BFD联动实现快速切换
alicloud3搭建wordpress
149. 直线上最多的点数-并查集做法
leetcode 326. Powers of 3
RNA-ATTO 390|RNA-ATTO 425|RNA-ATTO 465|RNA-ATTO 488|RNA-ATTO 495|RNA-ATTO 520近红外荧光染料标记核糖核酸RNA
Detailed AST abstract syntax tree
ES6-箭头函数
charles配置客户端请求全部不走缓存
leetcode 072. 求平方根
ES6简介及let、var、const区别