您说两个数组都已排序,我假设合并后的数组也需要排序。
这里是代码。解释如下。
(注意:由于 OP comment 已编辑代码。)
import java.util.Arrays;
public class Test {
private static int[] mergeSortedArrays(int[] a, int[] b) {
int[] temp = new int[a.length + b.length];
int i = 0;
int j = 0;
int k = 0;
while (i < a.length) {
if (j < b.length) {
if (a[i] < b[j]) {
temp[k++] = a[i++];
}
else if (a[i] == b[j]) {
temp[k++] = a[i++];
j++;
}
else {
temp[k++] = b[j++];
}
}
else {
temp[k++] = a[i++];
}
}
if (j < b.length) {
for (; j < b.length; j++) {
temp[k++] = b[j];
}
}
int[] answer = new int[k];
System.arraycopy(temp, 0, answer, 0, k);
/* Added */
System.out.print(answer[0]);
for (i = 1; i < k; i++) {
System.out.print(", " + answer[i]);
}
System.out.println();
/**/
return answer;
}
public static void main(String[] args) {
int[] a = {-19, -5, -4, 3, 7, 8, 11, 21};
int[] b = {-7, -5, -4, 0, 3, 6, 11, 13, 20};
System.out.println(Arrays.toString(mergeSortedArrays(a, b)));
}
}
我们将第一个数组中的一个元素与第二个数组中的一个元素进行比较。两者中较小的一个被复制到结果数组中。然后我们增加其元素被复制到结果数组的数组的索引。如果元素相等,我们[任意]从第一个数组复制元素并增加两个数组的索引。这可以防止结果数组包含重复项。
如果数组的元素数量不相等,那么当我们用完一个数组时,我们只需将较长数组中的所有剩余元素复制到结果数组中。
因此结果数组包含两个数组中的所有元素,没有重复,已排序。
这是我运行上述代码时的输出。
-19, -7, -5, -4, 0, 3, 6, 7, 8, 11, 13, 20, 21
[-19, -7, -5, -4, 0, 3, 6, 7, 8, 11, 13, 20, 21]