首页 > 解决方案 > 对齐数组的算法

问题描述

给定 2 个相同长度的双精度数组(“主”数组“A”和辅助“B”)。我想编写一个将B“对齐”到A的函数。

我定义了对齐方式,对于 A 的每个元素,如果 B 包含该元素,则该元素应放置在与 A 相同的索引处。

A 和 B 的一些特殊性:

Ex1 :
A = [10, 11, 12, 13]
B = [10, 12, 14, 16] (初始)
= > [10, 16, 12, 14] B 最终 ([10, 14, 12, 16]也是有效的,只有元素'10'和'12'的位置是相关的(其他元素不在A中))

例 2:
A = [10, 11, 12, 13]
B = [08, 09, 10, 11](初始)
= > [10, 11, 08, 09] B 最终

我写了两种不同的方法:一种是用字典来保存现有元素的位置,另一种是用两个串联的指针。但是,我发现代码对于它应该做的事情相当复杂/混乱。

有人知道这方面的现有算法或干净有效的方法吗?

标签: c#algorithm

解决方案


这是一种方法。不是最优的,但代码还不错。

private static double[] align(double[] A, double[] B)
{
    var extras = B.Where(b => !A.Contains(b)).ToArray();
    int i = 0;
    var result = A.Select(a => B.Contains(a) ? a : extras[i++]).ToArray();
    return result;
}

推荐阅读