滑窗容易想到,重点是ans += r-l+1
这句的理解是每次答案加上包含r的子区间的数量。
即每次加上以当前数字为结尾的所有子数组数量。
如:5,6,3,4,8如果右指针从4移到8还满足条件,就要加上
8
84
843
8436
84365
也就是新区间的长度。
因为在这之前已经移动左指针到满足条件的位置了,所以这样做符合题意
def numSubarrayProductLessThanK(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
ans = 0
flag = 1
l = 0
for r in range(len(nums)):
flag *= nums[r]
while l<=r and flag >= k:
flag = flag/nums[l]
l += 1
ans += r-l+1
return ans