前言
每天和你一起刷 LeetCode 每日一题~
本期看点:本期无看点,最近日子比较艰难
说好的每天刷每日一题的,昨天线代期中,接下来是高数期中,然后紧接着是大学物理实验期末 . . . 生活略感困苦,时有断更,活着已经很厉害了
LeetCode 启动!
题目:交替组 I
代码与解题思路
先读题:题目给了个环,0 表示红色,1 表示蓝色,出现连续三个相邻元素不同,比如:1 0 1 就计为 1 个交替组,问有多少个交替组
对于环类型的题目,比较方便的首尾相接的方法是直接复制一份原数组追加在后面,然后遍历即可,用 cnt 进行计数,当出现相邻元素相同的情况,cnt 就重新计数,当 cnt >= 3 时,就让交替组数量++
注:在 i >= n 的情况下记录结果,是因为我们拷贝了一份原数组,所以需要进行去重。
具体代码如下:
func numberOfAlternatingGroups(colors []int) (ans int) {
cnt, n := 0, len(colors)
for i := 0; i < n*2; i++ { // 遍历环
if i > 0 && colors[i%n] == colors[(i-1)%n] { // 相邻的瓷砖颜色不能相同
cnt = 0
}
cnt++
if i >= n && cnt >= 3 { // 连续 3 块瓷砖颜色交替
ans++
}
}
return ans
}