1. 官方描述
给你一个二进制数组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
。
2. 个人分析
可能大部分人一开始看题意不是很容易理解,我们接下来画图表示:
上图是一个数组,内部数据包含{1,0,0,1,0,1,1},第一个数与第二个数构成了一个子数组:{1,0},程序读取到第三个值时,它与第二个值是一样的,那么第三个值为一个单的子数组,以此类推,从第三到第六的数值构成了子数组{0,1,0,1},最后一个数值构成了一个数组{1}.
那么由上面信息,我们可以得出总数=(1+2)+(1+2+3+4)+1=14
3. 代码实现
cpp
class Solution {
public:
long long countAlternatingSubarrays(vector<int>& nums) {
long long sum = 1 , temp = 1;
int i = 0;
while (i < nums.size()-1)
{
if (nums[i] == nums[++i])
{
sum += 1;
temp = 1;
}else{
temp++;
sum += temp;
}
}
return sum;
}
};