给定一个正整数数组 nums。

找出该数组内乘积小于 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的子数组。
说明:

0 < nums.length <= 50000
0 < nums[i] < 1000
0 <= k < 10^6

思路:双指针法

left与right,right一直向后遍历,如果乘积大于k,则左指针向右移动,同时乘积ans/nums[left],

而如果左指针移动之后,此刻乘积小于100了,以nums[left]为起始位置满足条件的为right-left

例如:[2,3,4,5,10,20]  k=100

2*3*4*5大于100了,现在向右移,3*4*5,小于100,所以[3],[3,4],[3,4,5]都是满足条件的结果

提交的代码:

class Solution {
    public int numSubarrayProductLessThanK(int[] nums, int k) {
        if (k <= 1) return 0;
            int t = 1, ans = 0, left = 0;
            for (int right = 0; right < nums.length; right++) {
                t *= nums[right];
                while (t >= k) t /= nums[left++];
                ans += right - left + 1;
            }
            return ans;
    }
}

完整的代码:

public class Solution713 {
     public static int numSubarrayProductLessThanK(int[] nums, int k) {
         if (k <= 1) return 0;
            int t = 1, ans = 0, left = 0;
            for (int right = 0; right < nums.length; right++) {
                t *= nums[right];
                while (t >= k) t /= nums[left++];
                ans += right - left + 1;
            }
            return ans;
        }
     public static void main(String[] args)
     {
         int[] nums = {10,5,2,6};
         int k = 100;
         System.out.println(numSubarrayProductLessThanK(nums,k));
     }
}

Leetcode--713. 乘积小于k的子数组相关推荐

  1. LeetCode 713. 乘积小于 K 的子数组

    713. 乘积小于 K 的子数组 [双指针]s表示前j到i的数字的乘积,当发现乘积大于等于k的时候,就把j向右移动,并且把s除掉个nums[j],这样得到的就是以i结尾的符合要求的数组的最大长度,比这 ...

  2. LeetCode 713 乘积小于K的子数组

    写在前面 一道很艺术的编程题~做学习记录 题目描述 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 示例1: 输入: nums = [10,5,2 ...

  3. ⭐算法入门⭐《双指针》中等04 —— LeetCode 713. 乘积小于K的子数组

  4. LeetCode 937. 重新排列日志文件 / 1823. 找出游戏的获胜者(约瑟夫环问题) / 713. 乘积小于 K 的子数组

    937. 重新排列日志文件 2022.5.3 每日一题 题目描述 给你一个日志数组 logs.每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 . 有两种不同类型的日志: 字母日志: ...

  5. 0505|713. 乘积小于 K 的子数组

    0505|713. 乘积小于 K 的子数组 mid 滑动窗口. 求连续子树组的个数,"连续子树组"很强的暗示---使用滑动窗口. 本题只需记录 以每个数字为右边界所形成的有效子数组 ...

  6. 力扣 713. 乘积小于K的子数组

    题目 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小 ...

  7. 713. 乘积小于 K 的子数组

    给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小 ...

  8. 【713. 乘积小于 K 的子数组】

    leetcode力扣刷题打卡 题目:1. 两数之和 描述:给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 解题思路 1.双指针: 2.左 ...

  9. LeetCode 713、乘积小于 K 的子数组

    713.乘积小于 K 的子数组 1)题目描述 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 示例 1: 输入:nums = [10,5 ...

  10. LeetCode713. 乘积小于K的子数组

    LeetCode713. 乘积小于K的子数组 1. 问题描述 2. 思路 经典双指针问题 3. 代码 func numSubarrayProductLessThanK(nums []int, k in ...

最新文章

  1. String 比较的部分理解(1)
  2. python爬虫能做什么项目-python爬虫实例项目大全
  3. ES6--基础语法(一)
  4. 2018年第九届蓝桥杯C/C++ A组国赛 —— 第二题:阅兵方阵
  5. 鲁迅散文——随感录四十九
  6. 事务保存点savepoint
  7. 【AI视野·今日CV 计算机视觉论文速览 第218期】Fri, 11 Jun 2021
  8. ecshop_商品描述远程图片自动本地化插件
  9. [转载] python打包程序在win10不能运行、点击无反应_Windows10平台用PyInstaller打成exe程序后不能运行请高手指点...
  10. 如何使用AdminStudio软件把.exe转换成.msi
  11. Lucene为不同字段指定不同分词器(转)
  12. 用adb pull命令从android系统中读取文件失败的原因及解决办法
  13. banner设圆角_Banner设计技巧!
  14. 捷配送了10块板子后,决定做一个“小霸王”手柄
  15. Could not resolve project
  16. 计算机组成原理 定点加法、减法 练习题
  17. [转] 汉语骂人最高境界!(爆笑)
  18. 配置maven的中央仓库mirro镜像
  19. Opencv---通过形态学操作提取水平和垂直线
  20. 我参加NVIDIA Sky Hackathon(语音识别模型训练)

热门文章

  1. LeetCode 1452. 收藏清单(std::includes判断子集)
  2. LintCode 563. 背包问题 V(DP)
  3. LeetCode 641. 设计循环双端队列
  4. 数据中台建设与应用_Gartner对于建设数据中台的建议
  5. caffe模型文件解析_Caffe ImageData神经网络基本示例无法解析模型文件
  6. 前端:实现手机左右滑动效果
  7. MYSQL中有时候不得不使用replace()去掉特殊字符,写在这里备用一下
  8. 论文浅尝 | 打通推荐系统与知识图谱: 第一个公开的大规模链接数据集合
  9. 基于PaddleRec的用户点击率预测
  10. 百度机器阅读理解比赛赛后总结