题目:合并两个排序的整数数组A和B变成一个新的数组。你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。
分析:采用归并排序的方法,首先开辟一个额外空间,大小是两个数组之和,存放排序后的数组。
也可以不使用额外空间,如果数组为一长一短且长的数组能容纳所有元素的话,可以从数组末尾开始遍历,进行归并排序。
//额外的空间,从前往后遍历 public void mergeSortedArray(int[] A, int m, int[] B, int n) { // write your code here int[] res=new int[m+n]; int a=0,b=0,index=0; while(a<m&&b<n){ if(A[a]<B[b]){ res[index++]=A[a++]; }else{ res[index++]=B[b++]; } } while(a<m){ res[index++]=A[a++]; } while(b<n){ res[index++]=B[b++]; } for(int i=0;i<m+n;i++) A[i]=res[i]; } //不需要额外的空间,从后往前遍历 public void mergeSortedArray1(int[] A, int m, int[] B, int n) { int a=m-1,b=n-1,index=m+n-1; while(a>=0&&b>=0){ if(A[a]>B[b]){ A[index--]=A[a--]; }else{ A[index--]=B[b--]; } } while(a>=0){ A[index--]=A[a--]; } while(b>=0){ A[index--]=B[b--]; } }