Leetcode3206:交替组 I

发布于:2024-11-28 ⋅ 阅读:(13) ⋅ 点赞:(0)

题目描述:

给你一个整数数组 colors ,它表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] 

colors[i] == 0 表示第 i 块瓷砖的颜色是 红色 。
colors[i] == 1 表示第 i 块瓷砖的颜色是 蓝色 。
环中连续 3 块瓷砖的颜色如果是 交替 颜色(也就是说中间瓷砖的颜色与它 左边 和 右边 的颜色都不同),那么它被称为一个 交替 组。

请你返回 交替 组的数目。

注意 ,由于 colors 表示一个 环 ,第一块 瓷砖和 最后一块 瓷砖是相邻的。

代码思路:

这个代码的目的是计算在一个由整数数组 colors 表示的环形序列中,有多少个“交替颜色组”。每个“交替颜色组”由三个连续的元素组成,且满足以下条件:第一个元素的颜色不同于第二个元素的颜色,同时第二个元素的颜色也不同于第三个元素的颜色。由于序列是环形的,数组末尾的元素与数组开头的元素被视为相邻。

以下是代码的详细思路:

  1. 初始化变量
    • i:用于遍历数组的索引。
    • a:表示当前索引 i 的下一个索引(即 i+1),但由于是环形数组,使用取模运算 (i + 1) % colorsSize 来确保索引不会超出数组边界。
    • b:表示当前索引 i 的下两个索引(即 i+2),同样使用取模运算 (i + 2) % colorsSize 来处理环形结构。
    • count:用于记录满足条件的“交替颜色组”的数量,初始化为 0。
  2. 遍历数组
    • 使用一个 for 循环遍历数组 colors,循环次数为数组的长度 colorsSize
  3. 计算下一个和下两个索引
    • 在每次循环中,通过 (i + 1) % colorsSize 和 (i + 2) % colorsSize 计算当前元素 colors[i] 的下一个元素 colors[a] 和下两个元素 colors[b] 的索引。
  4. 判断交替颜色条件
    • 检查当前元素 colors[i] 的颜色是否不同于下一个元素 colors[a] 的颜色,并且下一个元素 colors[a] 的颜色是否也不同于下两个元素 colors[b] 的颜色。
    • 如果这两个条件都满足,说明找到了一个“交替颜色组”,此时将 count 加 1。
  5. 返回结果
    • 循环结束后,返回 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;
}