将两个不同长度的数组合并在一起以便将它们均匀分布在新数组中的最佳方法是什么?
说我有以下数组
String[] array1 = new String[7];
String[] array2 = new String[2];
String[] mergedArray = new String[array1.length + array2.length];
我希望mergedArray具有以下元素
array1 array1 array1 array2 array1 array1 array1 array2 array1
但如果我要将数组的大小更改为
String[] array1 = new String[5];
String[] array2 = new String[3];
String[] mergedArray = new String[array1.length + array2.length];
然后我希望它是
array1 array2 array1 array2 array1 array2 array1 array1
基本上如果可以帮助每个array2
元素不应该相互接触;如果array2
的尺寸大于array1
,则会出现例外情况。
答案 0 :(得分:1)
我会将较大数组的大小除以较小数组的大小。获得的值将是第二个数组元素的位置。
在你的第一个例子中 - 较大数组的大小为7,较小数组的大小为2.因此它将是7/2 = 3.因此第二个数组的元素将位于第3和第6位合并后的数组。
答案 1 :(得分:1)
我同意用户Junaid的回答。我们的想法是,通过转义恒定数量的元素,将较小数组的元素分配到较大的数组中。如果数组大小相等,则在较大数组的所有连续元素之间分配较小数组的元素,以下是实现,请按照以下步骤操作:
String[] array1 = new String[]{"d", "e", "f", "g", "h", "j", "k", "m"};
String[] array2 = new String[]{"a", "b", "c"};
int l1 = array1.length;
int l2 = array2.length;
int sectionSize = l1 / l2 + 1;
String[] mergedArray = new String[l1 + l2];
String[] larger = l1 > l2 ? array1 : array2;
String[] smaller = l1 < l2 ? array1 : array2;
int j = 0, k = 0;
for (int i = 1; i <= mergedArray.length; i++) {
if (i % sectionSize == 0)
mergedArray[i - 1] = smaller[j++];
else
mergedArray[i - 1] = larger[k++];
}
答案 2 :(得分:0)
假设array1
中的 m 元素和array2
中的 n 元素。您要做的是为array2
中的每个 m / n 元素添加array1
元素。
在你的第一个例子中:
m = 7,n = 2 - 您为array2
中的每个7/2 = 3个元素添加了array1
的元素。
在第二个例子中:
m = 5,n = 3 - 您为array2
中每个5/3 = 1个元素添加了array1
的元素。
您可以这样做:
int counter = array1.length/array2.length;
int m = -1, j = 0;
for(int i=0, c=0;i<array1.length;i++, c++) {
m++;
if(c == counter) {
resArray[m] = array2[j];
j++;
c = 0;
continue;
}
resArray[m] = array1[i];
}
答案 3 :(得分:0)
一种选择是从array1.length / array2.length
插入array1
来自array2
插入的每个元素,但这可能会留下一长串array1
个元素在新数组的末尾,如果数组不均匀分配(意味着它们的长度比不是整数 - 长度比将被截断为整数,并且您将不会插入足够的{{1}因此,元素)。
另一种方法是使用随机数生成器来选择要选择的阵列:选择array1
,如果结果数小于rand(array1.length + array2.length)
则从array1
中选择,否则选择来自array1.length
;要使其工作,您应该更新每次迭代的长度(所以它是array2
)