📅  最后修改于: 2023-12-03 15:12:40.730000             🧑  作者: Mango
有两个排序后的整数数组A和B,A数组的长度为m,B数组的长度为n。将这两个数组合并成一个新的数组C,使得C数组的长度为m+n,并且C数组也是一个排序数组。请实现该函数,要求算法的时间复杂度为O(m+n)。
函数原型:int* merge(int A[], int m, int B[], int n);
对于已排序的数组A和B,我们可以用类似归并排序的方式将它们合并成一个有序数组C。具体的合并过程如下:
i
和j
分别指向数组A和B的第一个元素;int* merge(int A[], int m, int B[], int n) {
int* C = (int*)malloc(sizeof(int) * (m + n));
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (A[i] < B[j]) {
C[k++] = A[i++];
} else {
C[k++] = B[j++];
}
}
while (i < m) {
C[k++] = A[i++];
}
while (j < n) {
C[k++] = B[j++];
}
return C;
}
该算法的时间复杂度为O(m+n),空间复杂度为O(m+n)。因为需要创建一个新的数组C来存储合并后的结果。