如何编写一个Java函数来合并两个有序数组为一个有序数组?
发布时间:2023-10-01 14:34:32
要编写一个Java函数来合并两个有序数组为一个有序数组,可以采用以下步骤:
1. 创建一个新的数组来存储合并后的有序数组。新数组的长度应为两个输入数组的长度之和。
2. 定义三个指针,分别指向两个输入数组的开头和新数组的开头。初始时两个指针指向输入数组的 个元素,新数组的指针指向新数组的 个位置。
3. 使用一个循环来比较两个输入数组当前指针所指向的元素的大小。如果 个数组的当前元素较小,就将其复制到新数组中,并将 个数组的指针向后移动一位。如果第二个数组的当前元素较小,就将其复制到新数组中,并将第二个数组的指针向后移动一位。如果两个数组的当前元素相等,则任意选择一个复制到新数组中,并将两个数组的指针都向后移动一位。
4. 当某个输入数组的指针达到数组末尾时,将另一个输入数组剩下的元素依次复制到新数组中。
5. 返回新数组作为合并后的有序数组。
下面是一个示例实现:
public static int[] mergeArrays(int[] arr1, int[] arr2) {
int length1 = arr1.length;
int length2 = arr2.length;
int[] merged = new int[length1 + length2];
int i = 0, j = 0, k = 0;
while (i < length1 && j < length2) {
if (arr1[i] < arr2[j]) {
merged[k++] = arr1[i++];
} else if (arr1[i] > arr2[j]) {
merged[k++] = arr2[j++];
} else {
merged[k++] = arr1[i++];
merged[k++] = arr2[j++];
}
}
while (i < length1) {
merged[k++] = arr1[i++];
}
while (j < length2) {
merged[k++] = arr2[j++];
}
return merged;
}
这个函数接收两个有序数组作为输入,并返回一个合并后的有序数组。在函数体内,我们使用三个指针来比较两个输入数组的元素,并根据大小选择复制到新数组中。最后,我们将剩下的元素复制到新数组中,然后返回这个新数组。
