输入: 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的子数组。
题解
- 注意 k <=1时候的问题
- 滑动窗口
class Solution:
def numSubarrayProductLessThanK(self, nums: List[int], k: int) -> int:
if k<=1:
return 0
count = 0
n = len(nums)
l, r = 0, 0
pro = 1
while r < n:
pro = pro * nums[r]
while pro >= k: # 主义 k <= 1的话,就停不了,然后l会Index oor
pro /= nums[l]
l += 1
r += 1
count += r - l
return count