数组元素之和最小化和字符串修改最少次数计算的GO语言解法| 豆包MarsCode AI刷题

52 阅读3分钟

本文希望通过尝试用分析两道题用go语言语法来完成,来提升使用go语言的熟练性。

数组元素之和最小化

首先分析题目

小C希望构造一个包含n个元素的数组,且满足以下条件:

  1. 数组中的所有元素两两不同。
  2. 数组所有元素的最大公约数为 k
  3. 数组元素之和尽可能小。

任务是输出该数组元素之和的最小值。

  1. 所有元素两两不同且最大公约数为k
    • 这意味着数组中的每个元素都必须是 k 的倍数,不相同。
  2. 数组元素之和尽可能小
    • 为了使数组元素之和最小,则从最小的k开始,依次乘以自然数1 ,2,一直到n。

算法步骤

  1. 初始化一个变量 sum 用于存储数组元素之和。
  2. k 开始,每次增加 k,直到数组中有 n 个元素。
  3. 将每个元素累加到 sum 中。
  4. 返回 sum

伪代码

1,首先用var初始化一个int型的变量a 2,使用for循环,从k开始每次增加k,直到加到n。 3,将每个元素累加到a。 4.返回a

代码

import "fmt"

func solution(n int, k int) int {
    var a int
    for i := 1; i <= n; i++ {
        a += i * k
    }
    return a
}

测试

package main
func main() {
    fmt.Println(solution(3, 1) == 6)
    fmt.Println(solution(2, 2) == 6)
    fmt.Println(solution(4, 3) == 30)
}

字符串修改最少次数计算

首先分析题目

小C有一个由数字字符组成的字符串,她想对这个字符串进行修改,使修改后的字符串中没有连续相同的字符。她需要计算至少进行多少次修改,才能确保字符串中的每两个连续字符不同。

  1. 遍历字符串:从第二个字符开始,逐个检查当前字符是否与前一个字符相同。
  2. 计数修改次数:如果当前字符与前一个字符相同,则需要进行一次修改,并将计数器加一。
  3. 修改字符:为了确保修改后的字符串中没有连续相同的字符,你可以将当前字符修改为一个与前后字符都不同的字符。

算法步骤

  1. 定义计数器为0
  2. 将字符串转换为 rune 切片,因为字符串可能包含多字节字符,注意定义切片的格式。
  3. 遍历字符串. 如果当前字符与前一个字符相同,则将 count 加一,并将当前字符修改为一个与前后字符都不同的字符。
  4. 返回count。

代码框架

func solution(s string) int {
	count := 0
	// 将字符串转换为 rune 切片,因为字符串可能包含多字节字符
	runes := []rune(s)
	for i := 1; i < len(runes); i++ {
		if runes[i] == runes[i-1] {
			runes[i] = 'a'
			count++
		}
	}
	// 将 rune 切片转换回字符串
	return count
}

测试

package main
func main() {
	fmt.Println(solution("111222333") == 3)
	fmt.Println(solution("11551111") == 4)
	fmt.Println(solution("1234567890") == 0)
}