如何将两个数组合并为两个数均分布的方式?

时间:2017-07-05 18:15:17

标签: arrays algorithm

举一个例子比用文字解释它更容易。 从2个数组开始:

{a,a,a,a,a,a,a}和{ b b b }

我希望输出为:

{A,A,的 B'/ strong>下,A,A,的 B'/ strong>下,A,A,的 B'/ strong>下,一个}

在一点帮助下,我发现了以下内容:

    let result = [];
    let ratio = array1.length / array2.length;
    let pushA = 0;
    while (array2.length >0) {
        pushA+= ratio;
        while (pushA >= 1){
            result.push(array1.pop());
            pushA--;
        }
        result.push(array2.pop());

    }

    return result;

2 个答案:

答案 0 :(得分:1)

略有非传统的方式:

对坐标为(0,0) - (A.Length, B.Length)

的段使用Bresenham algorithm的最简单实现

当x递增时 - 插入“a”,当y - 插入“b”时(通常情况下 - 使用相应数组的下一个索引)

答案 1 :(得分:0)

对于简单的应用程序,您可能会发现两个数组的大小。例如,假设第一阵列的大小为 M ,第二阵列的大小为 N 。还假设 M> = N (如果不是,您可以互换两个数组)。

现在,在插入第二个数组中的一个元素之前,您可以很容易地找到要插入的第一个数组的总元素,它等于: M / N = K ,说)。

因此,在合并时,您可以从First数组插入K个元素,然后从Second数组中插入一个元素,依此类推,直到两个数组都存在。