Given two sorted integer arrays A and B, merge B into A as one sorted array.
Note:
You may assume that A has enough space (size that is greater or equal to m + n)
to hold additional elements from B. The number of elements initialized in A and B are m andn respectively.
方法一:从前往后
public class Solution { //runtime = 247ms
public void merge(int A[], int m, int B[], int n) {
int i = 0;
if (m == 0){
for (i = 0; i < n; i ++){
A[i] = B[i];
}
}
int j = 0;
int l;
int h;
while (i < m && j < n){
if (A[i] > B[j]){
l = i;
h = m;
while (l < h){
A[h] = A[h - 1];
h --;
}
A[i] = B[j];
System.out.print(A[i] + ",");
i ++;
j ++;
m ++;
}
else {
i++;
}
System.out.print(A[i] + ",");
}
while (j < n){ //当A遍历结束而B还没遍历完时,直接将B中剩下的元素赋值给A
A[m] = B[j];
j ++;
m ++;
}
for (i = 0; i < m; i ++){
System.out.print(A[i] + ",");
}
}
}
方法二:从后往前,省去移动的时间
public class Solution { //runtime = 212ms
public void merge(int A[], int m, int B[], int n) {
int k = m + n - 1;
int i = m - 1;
int j = n - 1;
while (j >= 0){
if (i >= 0 && (A[i] > B[j])){
A[k --] = A[i --];
}
else {
A[k --] = B[j --];
}
}
for (i = 0; i < m + n; i ++){
System.out.print(A[i] + ",");
}
}
}