LeetCode 3101. 交替子数组计数
3101. 交替子数组计数 - 力扣(LeetCode)
【解析】以 0 1 0 1 为🌰, 按照左端点来算的话
1. 以第一个 0 为左端点:0、0 1、 0 1 0、 0 1 0 1
2. 以第二个 1 为左端点:1、1 0、 1 0 1
3. 以第三个 0 为左端点:0、 0 1
4. 以第四个 1 为左端点:1
我们可以发现其实是 4 + 3 + 2 + 1,也就是 n * (n + 1) / 2
class Solution {
public long countAlternatingSubarrays(int[] nums) {
long res = 0, t = 1;
int n = nums.length, pre = nums[0];
for (int i = 1; i < n; i++) {
if (nums[i] != pre) {
t++;
} else {
System.out.println(t);
res += (t + 1) * t / 2;
t = 1;
}
pre = nums[i];
}
res += (t + 1) * t / 2;
return res;
}
}