给定一个元素都是正整数的数组A ,正整数 L 以及 R (L <= R)。
求连续、非空且其中最大元素满足大于等于L 小于等于R的子数组个数。
例如 :
输入:
A = [2, 1, 4, 3]
L = 2
R = 3
输出: 3
解释: 满足条件的子数组: [2], [2, 1], [3].
注意:
L, R 和 A[i] 都是整数,范围在 [0, 10^9]。
数组 A 的长度范围在[1, 50000]。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/number-of-subarrays-with-bounded-maximum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目要求的等效于:count(最大元素<=R) - count(最大元素<L)
class Solution {
public:
int numSubarrayBoundedMax(vector<int>& A, int L, int R) {
int l = -1, r = 0, ct1 = 0, ct2 = 0;
for( ; r < A.size(); ++r)
{
if(A[r] <= R)
{
ct1 += r-l;
}
else
l = r;
}
l = -1;
for(r = 0; r < A.size(); ++r)
{
if(A[r] < L)
{
ct2 += r-l;
}
else
l = r;
}
return ct1-ct2;
}
};
128 ms 30.5 MB