【LeetCode】乘积小于 K 的子数组 Java 题解
题目描述
给定一个正整数数组 nums 和整数 k ,请找出该数组内乘积小于 k 的连续的子数组的个数。
复制代码
思路分析
今天的算法题目是数组类型的题目,题目要求该数组内乘积小于 k 的连续的子数组的个数。这句题意的重点是连续子数组,子数组的个数。
分析题目之后,首先可以使用朴素方式求解,使用双重循环,枚举出子数组每一种情况,判断是否符合题目。这种方法直接取出了所有情况,题目只需求解子数组的个数,这种方法的重复计算比较多。
再次分析这个题目,nums 是整整数数组,我们使用滑动窗口的思想来做这个题目,固定子数组区间[i, j]。当 i 增大的时候, 区间的乘积会变小。使用 prod 记录乘积,当 prod < k 的时候,prod 和数组元素累乘。当 prod >= k 的时候,窗口滑动,i 增加, prod 除以 nums[i],动态更新。减少重复计算。实现代码如下,供参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(n),空间复杂度是 O(1)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/7f66f790fa1570552f44e2800】。文章转载请联系作者。
评论