📅  最后修改于: 2023-12-03 15:10:34.774000             🧑  作者: Mango
给定一个整数数组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)