arrays - 如何从两个数组中选择元素,使它们的总和最小?

标签 arrays algorithm sorting dynamic-programming greedy

我有两个等长的数组,里面填满了整数(可以是正数也可以是负数,但绝不能为 0)。在每个索引处,我可以选择 array1 或 array2 中的元素,并且这些元素之和的绝对值应该是最小值。

例如:

a1 = [2, 2, 1]
a2 = [-3, -3, -4]

正确的答案应该是这样选择:

At index 0 : -3 from a2
At index 1 : 2 from a1
At index 2 : 1 from a1

因此,最终总和将为 0。

最佳答案

首先,简化问题:

  • 创建数组b,其中b[i] = a1[i] - a2[i]
  • sumA1 = a1 中每个元素的总和。

那么问题就变成了:

Find a sub array from b, mark as c, mark its sum as sumC which should be closest to sumA1.

Or, you can also say it should have minimal Math.abs(sumC - sumA1).

BTW, if c is empty, it's also valid, which means choose all indices from a1.

那么这个问题类似于这个问题:Given an input array find all subarrays with given sum K

或者,引用这篇文章:

然后,回到 OP 的问题:

  • b 中选取的任何索引都用于 a2
  • b 中未选取的任何索引均用于 a1

关于arrays - 如何从两个数组中选择元素,使它们的总和最小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54505682/

相关文章:

C_(视觉)_调试错误_运行时检查失败#2 -S

c - 检查值是否在数组中的函数

java - 我怎样才能使这段代码更有效地找到一对总和?

python - 基于Key对Python字典进行排序?

c++ - 将元素分配给数组不起作用(使用 OpenMP 的并行合并排序)

bash - 按字符数和字母顺序对列表进行排序

C# 将 View 状态转换为 bool 数组

java - 如何将充满标记的 Object[] 转换为整数数组?

sql - 展平相交的时间跨度

python - 如何访问所有计算机内核以在 python 脚本中进行计算?