📌  相关文章
📜  最大元素大于k的子数组的数量(1)

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

最大元素大于k的子数组的数量

给定一个整数数组nums和一个整数k,返回其中最大元素大于k的子数组数量。

解决方案

我们可以利用滑动窗口的思想,遍历一遍数组,记录下每个位置为结尾的最大元素对应的位置。然后再一遍遍历中使用滑动窗口,如果当前窗口的最大元素大于k,则其包含的所有子数组都符合条件,数量即为该窗口的长度;否则我们可以利用之前记录的最大元素位置,将窗口右边界直接跳到该位置,不需要对窗口内的所有子数组进行判断。这样可以将时间复杂度降为O(n)。

代码实现

以下是Python实现:

def numSubarray(nums: List[int], k: int) -> int:
    n = len(nums)
    res = 0
    max_pos = -1
    for i in range(n):
        if nums[i] > k:
            max_pos = i
        elif max_pos >= 0 and i - max_pos > res:
            res = i - max_pos
    return res
复杂度分析

时间复杂度:O(n)

空间复杂度:O(1)