public int numSubarrayBoundedMax(int[] nums, int left, int right) {
int n = nums.length, ans = 0, i0 = -1, i1 = -1;
//满足条件的子数组一定至少包含一个区间内的数,不包含大于区间的数
//遍历数组右端点,记录两个值,那么左端点可以落在[i0+1,i1]
for (int i = 0; i < n; ++i) {
if (nums[i] > right) i0 = i;//记录最近的大于区间的数
if (nums[i] >= left) i1 = i;//记录最近的区间内的数,如果大于区间则两个值相等,不会计入答案
ans += i1 - i0;
}
return ans;
}
04-06
349
09-25
1734
09-28
130