2025-02-13:交替组Ⅰ。用go语言,给定一个整数数组 colors,它表示一个由红色和蓝色瓷砖组成的环。在这个数组中,colors[i] 的值为:
①.0 表示第 i 块瓷砖是红色。
②.1 表示第 i 块瓷砖是蓝色。
如果连续的三块瓷砖的颜色呈现交替状态(即中间的瓷砖颜色与两侧的瓷砖颜色不同),则称这些瓷砖构成一个“交替组”。
请你计算并返回这个环中交替组的数量。
需要注意的是,由于瓷砖呈环状排列,因此数组的第一块和最后一块瓷砖也是相邻的。
3 <= colors.length <= 100。
0 <= colors[i] <= 1。
输入:colors = [0,1,0,0,1]。
输出:3。
答案2025-02-13:
chatgpt[1]
题目来自leetcode3206。
自然智慧即可。
1.初始化变量 n
为数组 colors
的长度,并初始化变量 res
为交替组的数量,初始值为 0。
2.使用一个循环遍历整个数组 colors
:
2.a.对于每个元素 colors[i]
,判断它与其前一个元素(考虑环形数组情况,需要使用 (i-1+n)%n
)和后一个元素 (i+1)%n
的颜色是否不同。
2.b.如果当前元素与相邻的两个元素颜色都不同,则将交替组的数量 res
自增 1。
3.遍历完成后,返回交替组的数量 res
。
总体时间复杂度为 O(n),其中 n 为数组 colors
的长度。
空间复杂度为 O(1),只使用了常数级别的额外空间。
package main
import (
"fmt"
)
func numberOfAlternatingGroups(colors []int) int {
n := len(colors)
res := 0
for i := 0; i < n; i++ {
if colors[i] != colors[(i-1+n)%n] && colors[i] != colors[(i+1)%n] {
res++
}
}
return res
}
func main() {
colors := []int{0, 1, 0, 0, 1}
result := numberOfAlternatingGroups(colors)
fmt.Println(result)
}
fn number_of_alternating_groups(colors: &[i32]) -> i32 {
let n = colors.len() as i32;
let mut res = 0;
for i in 0..n {
let prev_color = colors[((i - 1 + n) % n)as usize]; // Previous color in circular array
let next_color = colors[((i + 1) % n) as usize]; // Next color in circular array
if colors[i as usize] != prev_color && colors[i as usize] != next_color {
res += 1;
}
}
res
}
fn main() {
let colors = vec![0, 1, 0, 0, 1];
let result = number_of_alternating_groups(&colors);
println!("{}", result);
}
# -*-coding:utf-8-*-
def number_of_alternating_groups(colors):
n = len(colors)
res = 0
for i in range(n):
prev_color = colors[(i - 1 + n) % n] # Previous color in circular array
next_color = colors[(i + 1) % n] # Next color in circular array
if colors[i] != prev_color and colors[i] != next_color:
res += 1
return res
def main():
colors = [0, 1, 0, 0, 1]
result = number_of_alternating_groups(colors)
print(result)
if __name__ == "__main__":
main()
[1]
chatgpt: https://chatbotsplace.com/?rc=nnNWSCJ7EP