题目描述
当时想的很简单 就把num2 复制到 num1 的后面,再对 num1 排序
for (int i = 0; i < n; i++){
nums1[m+i] = nums2[i];
}
Arrays.sort(nums1);
sort 的实现其实是快排,时间复杂度是 O((m+n)log(m+n))
虽然通过了,但结果不尽人意
再来看第二种方法,这种就是先使用 num1 后面空的位置,比较两个数组的元素大小,再放进 num1 的空位,这样得到的新的num1 是有序的,时间复杂度是 O(m+n)
import java.util.Arrays;
public class MergeArrays {
public static void merge(int[] nums1, int m, int[] nums2, int n) {
// for (int i = 0; i < n; i++){
// nums1[m+i] = nums2[i];
// }
// Arrays.sort(nums1);
int p = m - 1;
int q = n - 1;
int temp = m + n - 1;
while (p >= 0 || q >= 0){
if (p == -1){
nums1[temp--] = nums2[q--];
}else if (q == -1){
nums1[temp--] = nums1[p--];
}else if (nums1[p] <= nums2[q]){
nums1[temp--] = nums2[q--];
}else {
nums1[temp--] = nums1[p--];
}
}
}
public static void main(String[] args) {
int[] nums1 = {0};
int[] nums2 = {1};
merge(nums1, 0, nums2, 1);
System.out.println(Arrays.toString(nums1));
}
}
【听我 狡辩 解释 !两次错误,emm 都是自己粗心,问题不大】