如何在保持相同的相对顺序的同时合并两个列表(或数组)?

时间:2016-06-10 15:19:23

标签: merge

例如,

A = [A,B,C,d]

B = [1,2,3,4]

我的问题是:如何生成合并A和B的所有可能方法,以便在新列表中我们可以在 b 之前出现 a b 出现在 c 之前, 1 出现在 2 之前, 2 出现在 2 之前强> 3 下,等等。?

我可以想到一个实现:

我们从8中选择4个时段,然后对于每个可能的选择,有两种可能的方式 - 第一个或B优先。

我想知道有更好的方法吗?

编辑: 我刚刚学会了一种更直观的方法 - 使用递归。 对于每个点,有两种可能的情况,取自A或取自B;继续递归,直到A或B为空,并连接剩余的。

1 个答案:

答案 0 :(得分:0)

如果相对顺序不同于排序列表的构成(假设它是,因为否则它不会成为问题),那么您需要形式化初始顺序。多种方法。最容易记住每个列表中每个元素的索引。示例:在第一个数组[...]

中a的有效位置为1

然后你可以继续加入列表,然后生成所有元素的排列。任何有效的排列都是保持新索引与您存储的顺序的顺序关系的排列 一个有效置换数组的示例 a12b3cd4 你可以知道并检查这是否是有效的排列,因为元素'a'的索引小于b的索引,依此类推。并且您知道索引必须更小,因为这是您在第一步中制定的

simmilarly一个无效的排列数组 ba314cd2,同样的检查方式