2025-02-13:交替组Ⅰ。用go语言,给定一个整数数组 colors,它表示一个由红色和蓝色瓷砖组成的环。在这个数组中,c

举报
福大大架构师每日一题 发表于 2025/02/13 15:54:05 2025/02/13
【摘要】 2025-02-13:交替组Ⅰ。用go语言,给定一个整数数组 colors,它表示一个由红色和蓝色瓷砖组成的环。在这个数组中,colors[i] 的值为:①.0 表示第 i 块瓷砖是红色。②.1 表示第 i 块瓷砖是蓝色。如果连续的三块瓷砖的颜色呈现交替状态(即中间的瓷砖颜色与两侧的瓷砖颜色不同),则称这些瓷砖构成一个“交替组”。请你计算并返回这个环中交替组的数量。需要注意的是,由于瓷砖呈环...

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

题目来自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),只使用了常数级别的额外空间。

Go完整代码如下:

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)
}

在这里插入图片描述

Rust完整代码如下:

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);
}

在这里插入图片描述

Python完整代码如下:

# -*-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()

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。