数组元素之和最小化 | MarsCode AI刷题

5 阅读2分钟

问题描述

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

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

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


测试样例

样例1:

输入:n = 3 ,k = 1
输出:6

样例2:

输入:n = 2 ,k = 2
输出:6

样例3:

输入:n = 4 ,k = 3
输出:30

思路过程:1.数组中的所有元素两两不同,就是告诉所有元素都不一样。 2.数组所有元素的最大公约数为 k,就是告诉所有整数共有约数中最大的一个就是K。 都能被整除,又要最小,那必然第一个元素就是这个最大公约数的本身,又因为都得被K整除,也必然是K的整数倍。

代码实现:

def solution(n: int, k: int) -> int:
    # 初始化一个空数组
    arr = []

    # 将k添加到数组中
    arr.append(k)

    # 循环n次,每次将当前最大公约数加上k,并添加到数组中
    for i in range(n - 1):
        arr.append(arr[-1] + k)

    # 返回数组之和
    return sum(arr)


if __name__ == '__main__':
    print(solution(n=3, k=1))  # 输出:6
    print(solution(n=2, k=2))  # 输出:6
    print(solution(n=4, k=3))  # 输出:30

思路过程

  1. 初始化:首先创建一个空列表 arr 用于存储结果。
  2. 添加初始值:将 k 作为第一个元素添加进列表 arr 中。
  3. 构建数组:通过循环 n-1 次(因为已经添加了第一个元素),每次都将当前列表最后一个元素与 k 相加的结果追加到列表中。
  4. 计算总和:使用 Python 内置函数 sum() 计算列表 arr 中所有元素之和,并将其作为函数的返回值。

代码实现过程

  • arr = [] 初始化一个空列表。

  • arr.append(k) 将 k 作为首个元素添加至列表。

  • for i in range(n - 1): 开始一个循环,循环次数为 n-1,这是因为我们已经在列表中添加了第一个元素。

    • arr.append(arr[-1] + k) 在每次循环中,获取列表中的最后一个元素(即 arr[-1])然后加上 k,并将结果追加到列表尾部。
  • return sum(arr) 使用 sum() 函数计算列表内所有数值的总和,并返回这个总和。

使用感受和问题

就是点击一个题目,如果再点击另一个题目,新开的窗口和现有的窗口题目会变得一致,而不是两个一样的题目,字节是为了我们专注一道题目的目的设计的吗?就是多开题目做不到,而且开多了不关会卡,在初始化进入之前启动速度有点慢,还有卡顿的现象,不过总体的刷题体验还是没问题的。