【问题标题】:Matching two list of numbers by the index of closest value通过最接近值的索引匹配两个数字列表
【发布时间】:2021-06-11 03:04:21
【问题描述】:

我知道已经有类似的问题(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, 11 和 6, 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)。

【问题讨论】:

    标签: arrays list algorithm


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了。但在最后一个示例中,我可能会得到0, 2, 1, X, X 而不是0, 1, 2, X, X,因为这两个结果的成本相同。 (当我改用平方距离时,第二个例子出错了。)你能给出一个 C# 中的示例代码吗?有没有不需要三次时间复杂度的方法?
    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2015-04-18
    相关资源
    最近更新 更多