题目:
代码:
class Solution {
public:
int numSubarrayBoundedMax(vector<int>& A, int L, int R) {
int n=A.size();
int ans;
if(n%2==0) {ans=n/2;ans*=(n+1);}
else{ ans=(n+1)/2;ans*=n; }
bool flag=false;
int count=0;
int count1=-1;
for(int i=0;i<n;i++){
if(A[i]>R) {
ans-=(i-count1)*(n-i);
count1=i;
ans-=count*(count+1)/2;
count=0;
}
else if(A[i]<L){
count++;
}
else{
ans-=count*(count+1)/2;
count=0;
}
}
ans-=count*(count+1)/2;
return ans;
}
};
思路:先计算总子数组个数,再依次减去不符合条件的数组,分三种情况讨论,大于R,小于L,其他。
榜首解答:
class Solution {
public:
int numSubarrayBoundedMax(vector<int>& A, int L, int R) {
int cur = 0, result = 0, pos = -1;
for (int i = 0; i < A.size(); ++i) {
if (A[i] > R) {
cur = 0;
pos = i;
} else if (A[i] >= L) {
cur = i - pos;
}
result += cur;
}
return result;
}
};