首页 > 其他分享 >713. 乘积小于 K 的子数组

713. 乘积小于 K 的子数组

时间:2023-04-02 15:36:58浏览次数:48  
标签:10 right 乘积 nums int 713 数组 left

力扣题目链接

给你一个整数数组 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

 

提示: 

  • 1 <= nums.length <= 3 * 10^4
  • 1 <= nums[i] <= 1000
  • 0 <= k <= 10^6
 1 class Solution {
 2     public int numSubarrayProductLessThanK(int[] nums, int k) {
 3         //特判
 4         if (k <= 1)
 5             return 0;
 6         int n = nums.length;
 7         int left = 0, right = 0;
 8         int mul = 1;
 9         int res = 0;
10         while (right < n) {
11             int r = nums[right];
12             right++;
13             mul *= r;
14             while (mul >= k) {
15                 int l = nums[left];
16                 left++;
17                 mul /= l;
18             }
19             //每次右指针位移到一个新位置,应该加上 x 种数组组合:
20             //  因为维护的是一个左闭右开的窗口,[left, right)
21             //  nums[right-1]
22             //  nums[right-2], nums[right-1]
23             //  nums[right-3], nums[right-2], nums[right-1]
24             //  nums[left], ......, nums[right-3], nums[right-2], nums[right-1]
25             //共有 right - left 种
26             //举例:比如此时为[1,2,3,4),K=10,说明:此时是不包含4的,实际上是[1,2,3],但是需要维护左闭右开的窗口,所以提前right++了。
27             //共有[3]、[2,3]、[1,2,3]三种,即right-left
28             res += right - left;
29         }
30         return res;
31     }
32 }

 

标签:10,right,乘积,nums,int,713,数组,left
From: https://www.cnblogs.com/Co3y/p/17280544.html

相关文章

  • 面试题45(Java)-把数组排成最小的数(中等)
    题目:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例1:输入:[10,2]输出:"102"示例 2:输入:[3,30,34,5,9]输出:"3033459"提示:0<nums.length<=100说明:输出结果可能非常大,所以你需要返回一个字符串而不......
  • 树状数组
    树状数组简单记录一下模板和用法,不做深入证明探究!能解决的问题:区间查询前缀和单点修改(某个值+一个数)是一个在logN复杂度就能完成以上操作的数据结构。严格来说,能解决的问题是线段树的子集。树状数组能够解决的问题,线段树一定可以解决!但是树状数组代码简单好写,相比臃肿庞......
  • Go 语言数组和切片的区别
    原文链接:Go语言数组和切片的区别在Go语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。另外,这个问题在面试中也经常会被问到,属于入门级题目,看过文章之后,相信你会有一个很好的答案。数组数组是同一种数据类型元素的集合,数组在......
  • 453.最小操作次数使数组元素相等
    最小操作次数使数组元素相等给你一个长度为n的整数数组,每次操作将会使n-1个元素增加1。返回让数组所有元素相等的最小操作次数。示例1:输入:nums=[1,2,3]输出:3解释:只需要3次操作(注意每次操作会增加两个元素的值):[1,2,3]=>[2,3,3]=>[3,4,3]=>[4,4,4]......
  • 1438. 绝对差不超过限制的最长连续子数组
    力扣题目链接给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。如果不存在满足条件的子数组,则返回 0 。 示例1:输入:nums=[8,2,4,7],limit=4输出:2解释:所有子数组......
  • [LeetCode] 1338. Reduce Array Size to The Half 数组大小减半
    Youaregivenanintegerarray arr.Youcanchooseasetofintegersandremovealltheoccurrencesoftheseintegersinthearray.Return theminimumsizeofthesetsothat atleast halfoftheintegersofthearrayareremoved.Example1:Input:arr=......
  • java方法-稀疏数组
    稀疏数组当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值把具体不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模如图:左原始数组,右稀疏数组 ......
  • 树状数组
    树状数组简介树状数组是一种用于维护\(n\)个数的区间和的数据结构。一般能用树状数组做的题,都可以使用线段树来做。相较于码量,树状数组的码量要比线段树少许多,不过相对应的,它所能实现的功能没有线段树多。好的,不多说废话,下面进入正题。例题1:P3374【模板】树状数组1例题......
  • 剑指offer42(Java)-连续子数组的最大和(简单)
    题目:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释: 连续子数组 [4,-1,2,1]的和最大,为 6。提示:1<= arr.length<=10^5-100<=arr[i]<=1......
  • HJ69_矩阵乘法_数组
    思路:三层循环实现矩阵相乘。importsysa=[]forlineinsys.stdin:  a.append(list(map(int,line.strip().split())))#print(a)matrix1=a[3:3+a[0][0]]matrix2=a[3+a[0][0]:]nw=[[0foriinrange(a[2][0])]foriinrange(a[0][0])]forminrange(a[0][0]): ......