题目
给出两个有序的整数数组 A和B ,请将数组 合并到数组 A中,变成一个有序的数组
注意:
可以假设 数组有足够的空间存放 B数组的元素,A 和B 中初始的元素数目分别为 m和n。
分析
这道题的不同之处在于其合并到一个已知的数组中,如果我们从小到大合并数组的话,显然是无法合并的,因此可以从大到小合并,利用数组A后面的空间。
代码
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int p = m + n - 1;
int pa = m-1;
int pb = n-1;
while(pa >= 0 && pb >= 0) {
if(A[pa] > B[pb]) {
A[p--] = A[pa--];
} else {
A[p--] = B[pb--];
}
}
while(pa >= 0) {
A[p--] = A[pa--];
}
while(pb >= 0) {
A[p--] = B[pb--];
}
}
}
时间复杂度:o(m+n)