📅  最后修改于: 2023-12-03 15:40:14.248000             🧑  作者: Mango
给定一个整数数组 nums 和一个整数 k,你需要统计该数组中所有最大元素为 k 的连续子数组的个数。
示例 1:
输入: nums = [1,0,1,2,1,4], k = 4 输出: 4 解释: 最大元素为 4 的子数组分别为: [1,0,1,2,1,4], [0,1,2,1], [1,2,1,4], [2,1,4]。(注意: [1,0,1,2,1], [0,1,2,1,4] 不是最大元素为 4 的子数组) 注意:
nums 数组的长度不会超过 10000。 k 的取值范围是 [0, 10000]。
利用滑动窗口的思想,维护当前子数组的最大元素,如果最大元素为 k,则对答案进行统计。
代码如下:
class Solution:
def numSubarrayProductLessThanK(self, nums: List[int], k: int) -> int:
if k <= 1:
return 0
n = len(nums)
ans, prod, left = 0, 1, 0
for right in range(n):
prod *= nums[right]
while prod >= k:
prod /= nums[left]
left += 1
ans += right - left + 1
return ans
时间复杂度:O(n),其中 n 是数组的长度。