AI 刷题 14. 数组元素之和最小化 题解 | 豆包MarsCode AI刷题

31 阅读2分钟

解题思路

为了构造一个包含n个元素的数组,且满足所有元素两两不同、最大公约数为k,并且数组元素之和尽可能小,我们可以按照以下步骤进行:

  1. 确定数组元素的公约数 :由于所有元素的最大公约数为k,因此我们可以将每个元素表示为k的倍数。
  2. 选择最小的n个不同的k的倍数 :为了使数组元素之和尽可能小,我们选择最小的n个不同的k的倍数。
  3. 计算数组元素之和 :将这些最小的n个不同的k的倍数相加,得到数组元素之和的最小值。

代码实现

下面是Python代码实现上述思路:

def min_sum_array(n, k):

选择最小的n个不同的k的倍数

elements = [k * (i + 1) for i in range(n)]

计算数组元素之和

min_sum = sum(elements)

return min_sum

测试样例

print(min_sum_array(3, 1)) # 输出:6

print(min_sum_array(2, 2)) # 输出:6

print(min_sum_array(4, 3)) # 输出:30

代码解释

  1. 选择最小的n个不同的k的倍数

    elements = [k * (i + 1) for i in range(n)]

    这里我们生成一个列表elements,其中包含n个最小的不同的k的倍数。i + 1确保我们选择的倍数从k开始,依次为2k, 3k, ..., nk

  2. 计算数组元素之和

    min_sum = sum(elements)

    将生成的n个元素相加,得到数组元素之和的最小值。

  3. 返回结果

    return min_sum

    返回数组元素之和的最小值。

方法总结

本题的核心在于构造一个满足特定条件的数组,并使得数组元素之和尽可能小。通过将每个元素表示为k的倍数,并选择最小的n个不同的k的倍数,我们可以确保数组中的所有元素两两不同且最大公约数为k。具体步骤如下:

  1. 确定公约数 :由于所有元素的最大公约数为k,因此每个元素必须是k的倍数。
  2. 选择最小倍数 :为了使数组元素之和最小,我们选择最小的n个不同的k的倍数,即k, 2k, 3k, ..., nk
  3. 计算和 :将这些最小的n个不同的k的倍数相加,得到数组元素之和的最小值。

通过选择最小的n个不同的k的倍数,我们成功地构造了一个满足条件的数组,并且使得数组元素之和尽可能小。该方法的时间复杂度为O(n),空间复杂度为O(n),适用于中等规模的输入。