LeetCode 题解工作台
交替组 II
给你一个整数数组 colors 和一个整数 k , colors 表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] : colors[i] == 0 表示第 i 块瓷砖的颜色是 红色 。 colors[i] == 1 表示第 i 块瓷砖的颜色是 蓝色 。 环中连续 k 块…
2
题型
5
代码语言
3
相关题
当前训练重点
中等 · 滑动窗口(状态滚动更新)
答案摘要
我们可以将环展开成一个长度为 的数组,然后从左到右遍历这个数组,用一个变量 记录当前交替组的长度,如果遇到了相同的颜色,就将 重置为 ,否则将 加一。如果 $\textit{cnt} \ge k$,并且当前位置 大于等于 ,那么就找到了一个交替组,答案加一。 遍历结束后,返回答案即可。
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 滑动窗口(状态滚动更新) 题型思路
题目描述
给你一个整数数组 colors 和一个整数 k ,colors表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] :
colors[i] == 0表示第i块瓷砖的颜色是 红色 。colors[i] == 1表示第i块瓷砖的颜色是 蓝色 。
环中连续 k 块瓷砖的颜色如果是 交替 颜色(也就是说除了第一块和最后一块瓷砖以外,中间瓷砖的颜色与它 左边 和 右边 的颜色都不同),那么它被称为一个 交替 组。
请你返回 交替 组的数目。
注意 ,由于 colors 表示一个 环 ,第一块 瓷砖和 最后一块 瓷砖是相邻的。
示例 1:
输入:colors = [0,1,0,1,0], k = 3
输出:3
解释:

交替组包括:



示例 2:
输入:colors = [0,1,0,0,1,0,1], k = 6
输出:2
解释:

交替组包括:


示例 3:
输入:colors = [1,1,0,1], k = 4
输出:0
解释:

提示:
3 <= colors.length <= 1050 <= colors[i] <= 13 <= k <= colors.length
解题思路
方法一:一次遍历
我们可以将环展开成一个长度为 的数组,然后从左到右遍历这个数组,用一个变量 记录当前交替组的长度,如果遇到了相同的颜色,就将 重置为 ,否则将 加一。如果 ,并且当前位置 大于等于 ,那么就找到了一个交替组,答案加一。
遍历结束后,返回答案即可。
时间复杂度 ,其中 为数组 的长度。空间复杂度 。
class Solution:
def numberOfAlternatingGroups(self, colors: List[int], k: int) -> int:
n = len(colors)
ans = cnt = 0
for i in range(n << 1):
if i and colors[i % n] == colors[(i - 1) % n]:
cnt = 1
else:
cnt += 1
ans += i >= n and cnt >= k
return ans
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | O(n + k) |
| 空间 | O(1) |
面试官常问的追问
外企场景- question_mark
The candidate should focus on a sliding window approach rather than brute-force checking of all possible groups.
- question_mark
They should demonstrate an understanding of the circular nature of the problem and how to handle the edge cases effectively.
- question_mark
Look for clear, incremental updates to the window state and a focus on efficiency rather than recalculating the entire window on each iteration.
常见陷阱
外企场景- error
Failing to handle the circular nature of the problem, resulting in incorrect group counting when crossing the array's boundary.
- error
Not updating the window state efficiently, leading to unnecessary recomputations.
- error
Incorrectly assuming that the first and last tiles in the group do not need to alternate in color when checking for groups.
进阶变体
外企场景- arrow_right_alt
Adjusting the group size k dynamically based on input constraints.
- arrow_right_alt
Expanding the problem to handle groups with more than two colors.
- arrow_right_alt
Optimizing the approach further for arrays with larger sizes, using parallel processing techniques.