3206. 交替组 I
题目描述
给你一个整数数组 colors ,它表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] :
colors[i] == 0表示第i块瓷砖的颜色是 红色 。colors[i] == 1表示第i块瓷砖的颜色是 蓝色 。
环中连续 3 块瓷砖的颜色如果是 交替 颜色(也就是说中间瓷砖的颜色与它 左边 和 右边 的颜色都不同),那么它被称为一个 交替 组。
请你返回 交替 组的数目。
注意 ,由于 colors 表示一个 环 ,第一块 瓷砖和 最后一块 瓷砖是相邻的。
示例 1:
示例 2:
提示:
3 <= colors.length <= 1000 <= colors[i] <= 1
解法
方法一:一次遍历
思考
\(n\le 100\) 且组长度固定为 \(3\),枚举每个起点再检查三格是否交替即可。环上越界需要取模,写法略繁。
将环展开为长度 \(2n\) 的线性扫描后,用 \(\textit{cnt}\) 记录当前交替段长度,相邻同色则重置。仅当 \(i\ge n\) 且 \(\textit{cnt}\ge 3\) 时计入,从而每个原位置作为组的右端点恰好统计一次,额外空间 \(O(1)\)。
我们令 \(k = 3\),表示交替组的长度为 \(3\)。
为了方便处理,我们可以将环展开成一个长度为 \(2n\) 的数组,然后从左到右遍历这个数组,用一个变量 \(\textit{cnt}\) 记录当前交替组的长度,如果遇到了相同的颜色,就将 \(\textit{cnt}\) 重置为 \(1\),否则将 \(\textit{cnt}\) 加一。如果 \(\textit{cnt} \ge k\),并且当前位置 \(i\) 大于等于 \(n\),那么就找到了一个交替组,答案加一。
遍历结束后,返回答案即可。
时间复杂度 \(O(n)\),其中 \(n\) 为数组 \(\textit{colors}\) 的长度。空间复杂度 \(O(1)\)。
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |




