Keshawn_lu's Blog

Leetcode 795. 区间子数组个数

字数统计: 262阅读时长: 1 min
2022/11/24 Share

题目简介:

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

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

示例 1:

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

提示:

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

思路:

我们构建一个函数solve(num),来求数组中 最大值小于等于num的连续子数组个数。

那么在区间[left, right]的结果便是solve(right) - solve(left - 1)

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:

int solve(int num, vector<int>& nums){

int res = 0;
int temp = 0;
for(int i = 0; i < nums.size(); i++){

if(nums[i] <= num){

temp++;
res += temp;
}
else
temp = 0;
}

return res;
}

int numSubarrayBoundedMax(vector<int>& nums, int left, int right) {

return solve(right, nums) - solve(left - 1, nums);
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: