Leetcode3206:交替组 I
题目描述:
给你一个整数数组 colors ,它表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i]
colors[i] == 0 表示第 i 块瓷砖的颜色是 红色 。
colors[i] == 1 表示第 i 块瓷砖的颜色是 蓝色 。
环中连续 3 块瓷砖的颜色如果是 交替 颜色(也就是说中间瓷砖的颜色与它 左边 和 右边 的颜色都不同),那么它被称为一个 交替 组。
请你返回 交替 组的数目。
注意 ,由于 colors 表示一个 环 ,第一块 瓷砖和 最后一块 瓷砖是相邻的。
代码思路:
这个代码的目的是计算在一个由整数数组 colors
表示的环形序列中,有多少个“交替颜色组”。每个“交替颜色组”由三个连续的元素组成,且满足以下条件:第一个元素的颜色不同于第二个元素的颜色,同时第二个元素的颜色也不同于第三个元素的颜色。由于序列是环形的,数组末尾的元素与数组开头的元素被视为相邻。
以下是代码的详细思路:
- 初始化变量:
i
:用于遍历数组的索引。a
:表示当前索引i
的下一个索引(即i+1
),但由于是环形数组,使用取模运算(i + 1) % colorsSize
来确保索引不会超出数组边界。b
:表示当前索引i
的下两个索引(即i+2
),同样使用取模运算(i + 2) % colorsSize
来处理环形结构。count
:用于记录满足条件的“交替颜色组”的数量,初始化为 0。
- 遍历数组:
- 使用一个
for
循环遍历数组colors
,循环次数为数组的长度colorsSize
。
- 使用一个
- 计算下一个和下两个索引:
- 在每次循环中,通过
(i + 1) % colorsSize
和(i + 2) % colorsSize
计算当前元素colors[i]
的下一个元素colors[a]
和下两个元素colors[b]
的索引。
- 在每次循环中,通过
- 判断交替颜色条件:
- 检查当前元素
colors[i]
的颜色是否不同于下一个元素colors[a]
的颜色,并且下一个元素colors[a]
的颜色是否也不同于下两个元素colors[b]
的颜色。 - 如果这两个条件都满足,说明找到了一个“交替颜色组”,此时将
count
加 1。
- 检查当前元素
- 返回结果:
- 循环结束后,返回
count
,即满足条件的“交替颜色组”的总数。
- 循环结束后,返回
代码实现:
int numberOfAlternatingGroups(int* colors, int colorsSize)
{
int i, a, b, count = 0;
for (i = 0; i < colorsSize; i++) //循环次数为数组的长度
{
a = (i + 1) % colorsSize; //中间瓷砖
b = (i + 2) % colorsSize; //求余表示数组循环
if (colors[i] != colors[a] && colors[a] != colors[b]) //判断交替颜色
count++; //计数
}
return count;
}