将整数集添加到数组中,每个集的大小减半

Adding sets of integers to an array decreasing size of each set added by half

我有两个数组,我想将第一个数组的位插入第二个

数组 1:{1,2,3,4,5,6}

array2: {-1,-1,-1,-1,-1,-1,-1}

我的目标是在第一次迭代中将第一个数组中的数字的一半+1 添加到第二个数组中 然后每次进一步迭代的剩余数字的一半: 例如

第一次迭代:{-1,-1,-1,1,2,3,4}

第二次迭代:{-1,5,6,1,2,3,4}

待处理的输入数据正好由N个正整数组成,其中 N = 2^M − 2 且 M = 3, 4, 5。即 N = {6, 14, 30}。

我有创建第一次迭代的代码: 例如

for (int i1 = 0, i2 = Array2.length/2; i1 < ((Array2.length/2)+1) && i2 >=0 ;i1++, i2++) {
            Array2[i2] = Array1[i1];
        } 

然而,要生成第二次迭代,我遇到了很多麻烦。 如果有人可以就如何实现这一点给我一些建议,我将不胜感激!

当项目插入到 Array2 时,您可以从 Array1 中删除这些项目,留下 (5,6)。对于下一次迭代,您可以从 length/4 循环到 length/2。从理论上讲,应该这样做。 所以

for (int i1=0, i2 = Array2.length/4; i1<((Array2.length/4)+1 && i2>0;i1++,i2++)

如果有帮助请告诉我。

你可以做得更简单,试试这个:

    int[] array1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
    int[] array2 = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};

    int a1 = array1.length;
    int a2 = array2.length - 1;
    int j = 0;

    while (a1 > 1) {
        a1 = a1 / 2;
        int l = j;
        for (int i = j; i <= l + a1;) {
            array2[a2 - i] = array1[2*l + a1 - i];
            j = ++i;
        }
    }
    System.out.println(Arrays.toString(array2));

输出: [-1, 13, 14, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8].

注意:您可能需要检查第二个数组的长度是否大于第一个,我假设是这样。