212 字
1 分钟
力扣713:乘积小于k的子数组

题目#

给你一个整数数组 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 * 104
  • 1 <= nums[i] <= 1000
  • 0 <= k <= 106

思路#

一道不定长滑窗题,每次移动窗口符合条件增加righy - left + 1个

题解#

func numSubarrayProductLessThanK(nums []int, k int) int {
if k <= 1 {
return 0
}
temp, left := 1, 0
result := 0
for right, v := range nums {
temp *= v
for temp >= k {
temp /= nums[left]
left++
}
result += right - left + 1
}
return result
}
力扣713:乘积小于k的子数组
https://mizuki.mysqil.com/posts/力扣43/力扣43/
作者
猫梦
发布于
2025-12-08
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00