执行结果:通过
执行用时和内存消耗如下:
代码如下:
int numberOfAlternatingGroups(int* colors, int colorsSize) {
int res = 0;
for (size_t i = 0; i < colorsSize; i++) {
if (colors[i] != colors[(i - 1 + colorsSize) % colorsSize] && colors[i] != colors[(i + 1) % colorsSize]) {
res += 1;
}
}
return res;
}
解题思路:
这段代码的目的是计算一个数组 colors
中交替出现颜色组的数量。这里“交替出现颜色组”的定义是指某个颜色的元素,其相邻的元素(无论是前一个还是后一个)的颜色都与它不同。具体思路如下:
- 初始化结果变量:
- 定义一个整数变量
res
,用于存储交替出现颜色组的数量,初始值为0。
- 定义一个整数变量
- 遍历数组:
- 使用一个
for
循环遍历数组colors
,其中i
是当前元素的索引。 - 由于数组是循环的(即首尾相连),所以在比较当前元素与其前一个元素时,需要使用取模运算
(i - 1 + colorsSize) % colorsSize
来确保索引不会越界。这样做是为了模拟数组是环形或循环的,使得最后一个元素的前一个元素是第一个元素。 - 同样地,比较当前元素与其后一个元素时,使用
(i + 1) % colorsSize
来确保索引不会越界。
- 使用一个
- 检查交替条件:
- 在每次循环中,检查当前元素
colors[i]
是否与其前一个元素colors[(i - 1 + colorsSize) % colorsSize]
和后一个元素colors[(i + 1) % colorsSize]
的颜色都不同。 - 如果当前元素确实与相邻的两个元素颜色都不同,则满足交替出现的条件,将
res
的值加1。
- 在每次循环中,检查当前元素
- 返回结果:
- 循环结束后,返回
res
的值,即交替出现颜色组的数量。
- 循环结束后,返回