6207. 统计定界子数组的数目

2022/10/16 leetcode 共 607 字,约 2 分钟

title

problem link

给你一个整数数组 nums 和两个整数 minK 以及 maxK 。

nums 的定界子数组是满足下述条件的一个子数组:

  • 子数组中的 最小值 等于 minK 。
  • 子数组中的 最大值 等于 maxK 。

返回定界子数组的数目。

子数组是数组中的一个连续部分。

示例 1:

输入:nums = [1,3,5,2,7,5], minK = 1, maxK = 5
输出:2
解释:定界子数组是 [1,3,5] 和 [1,3,5,2] 。

示例 2:

输入:nums = [1,1,1,1], minK = 1, maxK = 1
输出:10
解释:nums 的每个子数组都是一个定界子数组。共有 10 个子数组。

提示:

  • 2 <= nums.length <= 105
  • 1 <= nums[i], minK, maxK <= 106

solution

双指针

class Solution:
    def countSubarrays(self, nums: List[int], minK: int, maxK: int) -> int:
        left = -1
        minI, maxI = -1, -1
        ans = 0
        for i, v in enumerate(nums):
            if v < minK or v > maxK:
                # 清空窗口
                left = i
                minI = maxI = -1
                continue
            if v == minK:
                minI = i
            if v == maxK:
                maxI = i
            if maxI != -1 and minI != -1:
                ans += min(minI, maxI) - left
        return ans

Search

    Table of Contents