6207. 统计定界子数组的数目
https://leetcode.cn/problems/count-subarrays-with-fixed-bounds/
Solution
每次找到一个满足的 [minK, maxK]
区间, 然后加上以该区间为结尾的所有组合数:
a
和 b
分别表示当前找到的等于 minK
和 maxK
的索引值。
class Solution {
public long countSubarrays(int[] nums, int minK, int maxK) {
long ans = 0;
int n = nums.length;
int pre = -1;
int a = -1, b = -1;
// 找到一个满足的 [minK, maxK] 区间, 然后加上以该区间为结尾的所有组合
for (int i = 0; i < n; i++) {
if (nums[i] > maxK || nums[i] < minK) {
a = b = -1;
pre = i;
} else {
if (nums[i] == minK) {
a = i;
}
if (nums[i] == maxK) {
b = i;
}
if (a != -1 && b != -1) {
ans += Math.min(a, b) - pre;
}
}
}
return ans;
}
}