题解 | #合并两个有序的数组#
合并两个有序的数组
https://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665?tpId=196&&tqId=37061&rp=1&ru=/ta/job-code-total&qru=/ta/job-code-total/question-ranking
合并两个有序的数组
描述
给出一个整数数组 和有序的整数数组 ,请将数组 合并到数组 中,变成一个有序的升序数组
注意:
1.可以假设 数组有足够的空间存放 数组的元素, 和 中初始的元素数目分别为 和 ,的数组空间大小为 +
2.不要返回合并的数组,返回是空的,将数组 的数据合并到里面就好了
3.数组在[0,m-1]的范围也是有序的
例1:
A: [1,2,3,0,0,0],m=3
B: [2,5,6],n=3
合并过后A为:
A: [1,2,2,3,5,6]
思路
运用辅助数组C,将A,B数组按顺序放入C,再进行深拷贝给数组A。
public void merge(int A[], int m, int B[], int n) {
//安全性分析
if (m+n==0) {
return;
}
int indexA = 0;
int indexB = 0;
int indexC = 0;
int[] C = new int[n+m];
while (indexA<m && indexB<n) {
if (A[indexA]<=B[indexB]) {
C[indexC] = A[indexA];
indexA++;
indexC++;
}else {
C[indexC] = B[indexB];
indexB++;
indexC++;
}
}
while (indexA==m && indexB<n) {
C[indexC] = B[indexB];
indexB++;
indexC++;
}
while (indexA<m && indexB==n) {
C[indexC] = A[indexA];
indexA++;
indexC++;
}
A = C.clone();
}