简述Java实现有序数组合并 ?
参考答案:
在Java中,有多种方法可以实现有序数组合并。以下是一种简单且直观的方法,使用了Java的Arrays.sort()
函数进行排序后合并,但这种方法在大数据集上可能效率不高。另一种更高效的方法是使用双指针技术,该技术在合并两个有序数组时无需进行排序。
方法一:排序后合并
import java.util.Arrays;
public class MergeSortedArrays {
public static void main(String[] args) {
int[] arr1 = {1, 3, 5, 7};
int[] arr2 = {2, 4, 6, 8};
int[] mergedArr = mergeSortedArrays(arr1, arr2);
System.out.println(Arrays.toString(mergedArr)); // 输出:[1, 2, 3, 4, 5, 6, 7, 8]
}
public static int[] mergeSortedArrays(int[] arr1, int[] arr2) {
int[] mergedArr = new int[arr1.length + arr2.length];
System.arraycopy(arr1, 0, mergedArr, 0, arr1.length);
System.arraycopy(arr2, 0, mergedArr, arr1.length, arr2.length);
Arrays.sort(mergedArr);
return mergedArr;
}
}
方法二:双指针技术
public class MergeSortedArrays {
public static void main(String[] args) {
int[] arr1 = {1, 3, 5, 7};
int[] arr2 = {2, 4, 6, 8};
int[] mergedArr = mergeSortedArrays(arr1, arr2);
System.out.println(Arrays.toString(mergedArr)); // 输出:[1, 2, 3, 4, 5, 6, 7, 8]
}
public static int[] mergeSortedArrays(int[] arr1, int[] arr2) {
int[] mergedArr = new int[arr1.length + arr2.length];
int i = 0, j = 0, k = 0;
// 比较两个数组的元素,并将较小的元素放入mergedArr中
while (i < arr1.length && j < arr2.length) {
if (arr1[i] < arr2[j]) {
mergedArr[k++] = arr1[i++];
} else {
mergedArr[k++] = arr2[j++];
}
}
// 将剩余的元素(如果有的话)放入mergedArr中
while (i < arr1.length) {
mergedArr[k++] = arr1[i++];
}
while (j < arr2.length) {
mergedArr[k++] = arr2[j++];
}
return mergedArr;
}
}
第二种方法的时间复杂度为O(n+m),其中n和m分别是两个输入数组的长度,因为它只遍历了这两个数组一次。而第一种方法的时间复杂度为O((n+m)log(n+m)),因为Arrays.sort()
函数的时间复杂度通常为O(nlogn)。因此,对于大数据集,第二种方法通常更有效率。