【LeetCode】乘积小于 K 的子数组 Java 题解
题目描述
给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。
复制代码
思路分析
今天的算法题目是数组处理题目,题目要求返回子数组内所有元素的 乘积严格小于 k 的 连续子数组 的数目。
根据这两个重要的条件,我们首先可以采用普通解法,依次遍历每一个数组元素,求乘积小于 k 的连续子数组个数,实现代码如下。
分析普通解法,发现计算乘积的过程中有重复计算,我们可以优化这部分,由于是求连续子数组,我们可以转换成为滑动窗口的问题,采用双指针思想,动态变化范围求解,实现代码如下,供参考。
通过代码
普通解法
复制代码
滑动窗口
复制代码
总结
上述算法的时间复杂度是 O(n * n), 空间复杂度是 O(1)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/00478f863f9a4da579e26ad1c】。文章转载请联系作者。
评论