文章

795. 区间子数组个数(Rating 1817)

795. 区间子数组个数(Rating 1817)

以下内容偏向于记录个人练习过程及思考,非常规题解内容

题目

795. 区间子数组个数

Rating 1817

思路

自己没做出来。

参考官解,思路比较清晰。

以某个不大于right的数字结尾时

  • 找到靠左的第一个大于right的数字,作为子数组左边界的最小位置
  • 找到靠左的第一个大于等于left且小于等于right的数字,作为子数组左边界的最大位置

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
    def numSubarrayBoundedMax(self, nums: List[int], left: int, right: int) -> int:
        last0, last1 = -1, -1
        ret = 0
        for idx, num in enumerate(nums):
            if num > right:
                last0 = idx
                last1 = -1
            elif left <= num <= right:
                last1 = idx
            if last1 != -1:
                ret += last1 - last0
        return ret
本文由作者按照 CC BY 4.0 进行授权