题目描述:
合并两个排序的整数数组A和B变成一个新的数组。
注意事项
你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。
样例
给出 A = [1, 2, 3, empty, empty]
, B = [4, 5]
合并之后 A 将变成 [1,2,3,4,5]
class Solution { /** * @param A: sorted integer array A which has m elements, * but size of A is m+n * @param B: sorted integer array B which has n elements * @return: void */ public void mergeSortedArray(int[] A, int m, int[] B, int n) { // write your code here int i=0,j=0,q=0,p=0; if(m==0){ for(int o=0;o<n;o++) A[m++] = B[o]; }else{ int minA = A[0],maxA = A[m-1]; for(q=0;q<n;q++){ //找出B中比A中最小的数还小的 if(B[q] >= minA) break; } for(p=0;p<n;p++){ //找出B中比A中最大的数还大的 if(B[p] >= maxA) break; } if(q!=0){ //把B中比A中最小的数还小的数放到A的最前面,A的长度增加 for(int o=m-1;o>=0;o--) A[o+q] = A[o]; for(int o=0;o<q;o++) A[o] = B[o]; m = m+q; } if(p != n){ //把B中比A中最大的数还大的数放到A的最后面,A的长度增加 for(int o=p;o<n;o++) A[m++] = B[o]; n = p; } for(i=0;i<m-1;i++){ for(j=q;j<n;j++){ if(B[j]>=A[i] && B[j]<A[i+1]){ int insertNum = 1; for(int k=j+1;k<n;k++){ if(B[k]<=A[i+1]) insertNum++; } //B中元素插入A中 for(int o=m-1;o>i;o--){ A[o+insertNum] = A[o]; } for(int t=0;t<insertNum;t++){ A[i+1+t] = B[j+t]; } i = i+insertNum; q = q+insertNum; m = m+insertNum; break; }else{ break; } } } } } }