795. Number of Subarrays with Bounded Maximum
Problem Description
We are given an array A of positive integers, and two positive integers L and R (L <= R).
Return the number of (contiguous, non-empty) subarrays such that the value of the maximum array element in that subarray is at least L and at most R.
Solution
遍历数组A
,每找到一个符合在[L,R]区间内的数,便把它当作最大值,向左向右分别搜索比它小的数,以他为最大值的子数组的个数即为左边比它小的数目乘以右边比它小的数目。代码如下:
class Solution {
public:
int numSubarrayBoundedMax(vector<int>& A, int L, int R) {
int num = 0;
for (int i=0; i<A.size(); i++) {
if (A[i] >= L && A[i] <= R) {
int lp = i, rp = i;
while (lp-- > 0 && A[lp] <= A[i]);
while (++rp < A.size() && A[rp] < A[i]);
num += (i - lp) * (rp - i);
}
}
return num;
}
};