# 795. 区间子数组个数

给你一个整数数组 nums 和两个整数:left 及 right 。找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组,并返回满足条件的子数组的个数。

生成的测试用例保证结果符合 32-bit 整数范围。

示例 1:

输入:nums = [2,1,4,3], left = 2, right = 3
输出:3
解释:满足条件的三个子数组:[2], [2, 1], [3]

示例 2:

输入:nums = [2,9,2,5,6], left = 2, right = 8
输出:7

提示:

  • 1 <= nums.length <= $10^5$
  • 0 <= nums[i] <= $10^9$
  • 0 <= left <= right <= $10^9$

# 题解

class Solution {
public:
int numSubarrayBoundedMax(vector<int>& nums, int left, int right) {
return count(nums, right) - count(nums, left - 1);
}

int count(vector<int>& nums, int lower) {
int res = 0, cur = 0;
for (auto x : nums) {
cur = x <= lower ? cur + 1 : 0;
res += cur;
}
return res;
}
};

复杂度分析

  • 时间复杂度:$O (n)$
  • 空间复杂度:$O (1)$