题目:
给你一个二进制数组nums
。如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况,我们称这样的子数组为 交替子数组 。返回数组 nums
中交替子数组的数量。
示例 1:
输入: nums = [0,1,1,1]
输出: 5
解释:
以下子数组是交替子数组:
[0]
、[1]
、[1]
、[1]
以及[0,1]
。
示例 2:
输入: nums = [1,0,1,0]
输出: 10
解释:
数组的每个子数组都是交替子数组。可以统计在内的子数组共有 10 个。
提示:
1 <= nums.length <= 105
nums[i]
不是0
就是1
。
思路:
遍历数组,记录上一个数的数值和当前最长交替子数组的长度。如果当前数和之前的数不一样,则交替子数组的长度加一,否则交替子数组长度为一。
当前最长交替子数组的长度,即是以当前元素为结尾的交替子数组的个数,累加到答案当中。
最后返回结果即可。
代码:
class Solution {
public:
long long countAlternatingSubarrays(vector<int>& nums) {
long long res = 0, cur = 0;
int pre = -1;
for (int a : nums) {
cur = (pre != a) ? cur + 1 : 1;
pre = a;
res += cur;
}
return res;
}
};