一、题目介绍
二、数组拷贝解法
2.1 解法介绍
因为数组 1 的总长度是大于等于 m+n 的,所以把数组 2 的元素都拷贝到数组1中。数组 1 中的元素有 m 个,所以数组 2 中的第一个元素拷贝到数组 1 中对应的下标就是m,第二个元素拷贝过来对应的下标是 m+1,一直到 m+n-1 拷贝完后,将数组 1 整体排序一遍就搞定了,这里用了 Arrays.sort()
内部为快速排序,时间复杂度为 O((n+m) * log(n+m)),空间复杂度 O(1)。这种方法没有利用两个数组本身已经有序这一点。
2.2 java 代码
/**
* 数组拷贝后进行排序
*/
public static void merge1(int[] nums1, int m, int[] nums2, int n) {
for (int i = m, j = 0; i < n + m; i++, j++) {
nums1[i] = nums2[j];
}
Arrays.sort(nums1);
}
三、双指针解法(从前到后)
3.1 解法介绍
这里用两个指针分别指向数组1的开头,和数组2的开头。跟链表合并不同,如果往数组中插入一个元素,为了保证整体的顺序性,需要挪动前后的元素,所以我们需要再新建一个数组。之后比较两个数组中的元素 nums1[i] 和 nums2[j],将其放到新数组中。
这种两两合并的好处是可以免掉排序了,比较完之后再放到新数组中&#