将整数集添加到数组中,每个集的大小减半
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]
.
注意:您可能需要检查第二个数组的长度是否大于第一个,我假设是这样。
我有两个数组,我想将第一个数组的位插入第二个
数组 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]
.
注意:您可能需要检查第二个数组的长度是否大于第一个,我假设是这样。