1. 乘积小于 K 的子数组
给定一个正整数数组 nums和整数 k ,请找出该数组内乘积小于 k 的连续的子数组的个数。
方法一:
def numSubarrayProductLessThanK(nums, k):
n = len(nums)
if n == 0:
return 0
start = 0
end = 0
acc = 1
res = 0
while end < n:
acc *= nums[end]
while acc >= k and start <= end:
acc /= nums[start]
start += 1
if start <= end:
res += end - start + 1
end += 1
return res
方法二:
def numSubarrayProductLessThanK(nums, k):
n = len(nums)
res = 0
for i in range(n):
product = 1
for j in range(i, n):
product *= nums[j]
if product < k:
res += 1
else:
break
return res
方法三:
def numSubarrayProductLessThanK(nums, k):
n = len(nums)
res = 0
left = 0
product = 1
for right in range(n):
product *= nums[right]
while left <= right and product >= k:
product /= nums[left]
left += 1
res += right - left + 1
return res



















