给你一个整数数组 nums 和一个整数 k ,
请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。
解题思路:
确定左边界 依次扩大右边界
满足之下 右边界右探
不满足之后 左边界左缩
当前确定左边界下, 所有右边界之内值都符合条件
class Solution(object):
def numSubarrayProductLessThanK(self, nums, k):
res, windowProduct = 0, 1
left ,right = 0, 0
while right < len(nums):
# 计算当前窗口下的乘积
windowProduct *= nums[right]
# 满足之下 右边界右探
# 不满足之后 左边界左缩
while windowProduct >= k and left <= right:
windowProduct //= nums[left]
left += 1
# 当前边界下,所有右边界之内值都符合条件
res += (right - left + 1)
right += 1
return res