给定两个排序的整数数组A和B,将B合并为一个排序的数组。
注意:
您可能假设A有足够的空间来容纳B中的其他元素。在A和B中初始化的元素数分别为m和n。
分析
解决此问题的关键是将A和B的元素向后移动。如果在完成A之后B还剩下一些元素,则也需要处理这种情况。
从这个问题中获得的重要信息是循环条件。这种条件也用于合并两个排序的链表。
Java解决方案1
public class Solution {
public void merge(int A[], int m, int B[], int n) {
while(m > 0 && n > 0){
if(A[m-1] > B[n-1]){
A[m+n-1] = A[m-1];
m--;
}else{
A[m+n-1] = B[n-1];
n--;
}
}
while(n > 0){
A[m+n-1] = B[n-1];
n--;
}
}
}
Java解决方案2
循环条件也可以使用m + n,如下所示。
public void merge(int A[], int m, int B[], int n) {
int i = m - 1;
int j = n - 1;
int k = m + n - 1;
while (k >= 0) {
if (j < 0 || (i >= 0 && A[i] > B[j]))
A[k--] = A[i--];
else
A[k--] = B[j--];
}
}