795. 区间子数组个数
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 <= 105
0 <= nums[i] <= 109
0 <= left <= right <= 109
C代码:双指针
int numSubarrayBoundedMax(int* nums, int numsSize, int left, int right) {int res = 0, last2 = -1, last1 = -1;for (int r = 0; r < numsSize; r++) {if (nums[r] >= left && nums[r] <= right) {last1 = r;} else if (nums[r] > right) {last2 = r;last1 = -1;}if (last1 != -1) {res += last1 - last2;}}return res;
}// 4 1 1 1 3 1 1 2
// | | | |
// 4 1113 <----
// 4 11131
// 4 111311
// 7 1113112 <----