描述
合并两个排序的整数数组A和B变成一个新的数组。
您在真实的面试中是否遇到过这个题? 是
样例
给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]
初步思路:新创建一个数组C,将B数组中数字从大到小逐个与A中数组从大到小进行比较,较大者从后往前向C数组中放置。
由于是排序的数组,故A或B中元素比较完毕后另一个数组中还剩余1个及以上的元素,则全部按原顺序放置于C数组。
public class Solution {
/**
* @param A: sorted integer array A
* @param B: sorted integer array B
* @return: A new sorted integer array
*/
public int[] mergeSortedArray(int[] A, int[] B) {
// write your code here
int a=A.length;
int b=B.length;
int[]C=new int[a+b];
int i=a-1,j=b-1,k=a+b-1;//i-A,j-B,k-C
while(i>=0&&j>=0){
if(A[i]>=B[j]){
C[k]=A[i];
i--;
}
else{
C[k]=B[j];
j--;
}
k--;
}
while(i>=0){
C[k]=A[i];
k--;
i--;
}
while(j>=0){
C[k]=B[j];
k--;
j--;
}
return C;
}
}
时间消耗1820ms 空间消耗14.65MB 有待改进
挑战
你能否优化你的算法,如果其中一个数组很大而另一个数组很小?