题目
给你一个整数数组
nums
和一个整数k
,请你返回子数组内所有元素的乘积严格小于k
的连续子数组的数目。
解题
"""
时间复杂度:O(n),其中 n 是数组的长度。每个元素最多被访问两次(一次作为右端点,一次作为左端点)。
空间复杂度:O(1),除了输入输出,几乎没有使用额外的空间。
"""
def numSubarrayProductLessThanK(nums, k):
if k <= 1:
return 0
prod = 1
count = 0
left = 0
for right in range(len(nums)):
prod *= nums[right]
while prod >= k and left <= right:
prod //= nums[left]
left += 1
count += right - left + 1
return count
nums = [10, 5, 2, 6]
k = 100
print(numSubarrayProductLessThanK(nums, k)) # 输出: 8