转载作者:
Faldict
转载地址:https://blog.youkuaiyun.com/Faldict/article/details/79480925
转载地址:https://blog.youkuaiyun.com/Faldict/article/details/79480925
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;
}
};
本文介绍了一种算法,用于计算一个整数数组中,以某个元素为最大值且该最大值位于指定区间的子数组数量。通过遍历数组并使用左右搜索的方法来高效解决问题。
1万+

被折叠的 条评论
为什么被折叠?



