📜  最大值为 K 的子数组计数(1)

📅  最后修改于: 2023-12-03 15:40:14.248000             🧑  作者: Mango

最大值为 K 的子数组计数

给定一个整数数组 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 是数组的长度。