通过最接近值的索引匹配两个数字列表

时间:2021-03-13 07:23:04

标签: arrays list algorithm

我知道已经有类似的问题(123),但它们都是用 Python 编写的,不符合我的需要。

给定两个排序列表,比如 1, 6, 13, 21, 282, 15, 20。返回第一个数组中最接近数字的索引,不重复(与上面的链接 1 不同),在本例中为 0, 2, 3

棘手的一点是,在 1, 4, 66, 67, 68, 7168, 68, 68, 82, 82 的情况下,返回 2, 3, 4, 5, 11, 2, 3, 4, 5 更可取。

有可能第一个列表的长度<第二个列表的长度。 1, 7, 116, 24, 28, 32, 34 应该返回 0, 1, 2, X, X,其中 X 可以是除 0、1 和 2 之外的任何整数。(0, 1, 2, -1, -10, 1, 2, 3, 4可以接受。)

编辑:只需交换两个列表并返回 0, 1, 2

最好使用类 C 语言或伪代码给出的代码。

有什么比蛮力搜索更好的主意吗?


编辑

给定的示例可能不是最佳解决方案,例如最后的(删除线)示例可以返回 1, 0, 2 (1, 0, 2, X, X)。

1 个答案:

答案 0 :(得分:0)

让第一个数组为 a,第二个为 b

让将索引 i 分配给 b[j] 的成本为 abs(a[i] - b[j])。然后我们可以通过在 O(nr2) 时间内将问题建模为 unbalanced assignment problem 来找到解决方案,其中 r 是最小数组的大小,n 最大的。

相关问题