给定两个正数阵列,重新排列它们以形成结果数组,结果数组包含相同给定序列中的元素

时间:2015-06-07 00:30:37

标签: algorithm

更清晰理解的示例。

数组A - [1,2]

数组B - [3,4]

结果阵列 - [1,2,3,4],[1,3,2,4],[1,3,4,2],[3,4,1,2],[3,1] ,4,2],[3,1,2,4]

结果数组包含A,B的元素,其顺序与给定的相同。 (2总是在1之后,4总是在3之后) 我们必须打印可能的组合总数以获得结果数组。

在这种情况下是6。

注意:数组元素按递增顺序给出,它应该在结果数组中以相同的顺序出现。

我想我可以在这里使用DP,但我不确定,

EG。基本情况是,如果任何数组为空,那么只有一个可能的结果数组,非空数组本身。 但是我无法继续这个基本案例。任何指导都将深表感谢。 好吧,我甚至可以确定DP是否合适,或许还有其他可能的方法来解决问题。

不,这不是作业。

1 个答案:

答案 0 :(得分:0)

让A的元素个数为M,并且让B的元素个数为N.输出数组由数组中的M + N个位置由A的元素填充唯一确定。我们可以从M + N个位置产生M的所有可能选择,并且对于每个选择,将A的元素分配给那些位置,将B的元素分配给其他位置,并输出该数组。例如,在Python中:

import itertools
def merges(a, b):
    output_len = len(a) + len(b)
    for positions in itertools.combinations(range(output_len), len(a)):
        position_set = set(positions)
        a_iter, b_iter = iter(a), iter(b)
        yield [next(a_iter) if i in position_set else next(b_iter)
               for i in xrange(output_len)]