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  <----

你可能感兴趣的:(LeetCode刷题,算法)