题目描述:
给你一个整数数组 colors 和一个整数 k ,colors表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] :
colors[i] == 0 表示第 i 块瓷砖的颜色是 红色 。colors[i] == 1 表示第 i 块瓷砖的颜色是 蓝色 。
环中连续 k 块瓷砖的颜色如果是 交替 颜色(也就是说除了第一块和最后一块瓷砖以外,中间瓷砖的颜色与它 左边 和 右边 的颜色都不同),那么它被称为一个 交替 组。
请你返回 交替 组的数目。
注意 ,由于 colors 表示一个 环 ,第一块 瓷砖和 最后一块 瓷砖是相邻的。
代码思路:
这个代码的目的是计算在一个环形数组中,有多少长度为 k 的交替颜色组。环形数组意味着数组末尾和开头是相连的。函数的参数包括一个整数数组 colors,数组的大小 colorsSize,以及目标长度 k。下面是这个代码的思路分析:
代码实现:
int numberOfAlternatingGroups(int* colors, int colorsSize, int k) {
//可以将前k-1个加在最后,以第i块开头为标记
int l = 0;
int r = 1;
int cnt = 1; //交替颜色的长度,起始为1
int ret = 0;
while (r < colorsSize + k - 1) {
if (colors[(r % colorsSize)] ^ colors[(r - 1) % colorsSize]) {
cnt++;
if (cnt == k) {
ret++;
l++;
cnt--;
}
} else {
l = r;
cnt = 1;
}
r++;
}
return ret;
}