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 to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.
====================
Analysis:
1. Structure of array cannot be changed after creation. ==>array.length is meaning less, we should use the number of elements given by the question and change this number ourselves during program process.
2. Insert elements of array B to array A.
Other implementation keys:
Implement 2 pointer one for array A, another for array B. if the current element of array A less or equal to array B, then pointer of array A +1. Otherwise,
1. Move the current element and following elements of array A forward
2. Insert current element of array B to array A
Finally, if all the elements of array B has been processed, just let it be. While if all the original elements of array A has been processed, merge the remaining elements of array B to array A.
public class Solution {
public void merge(int A[], int m, int B[], int n) {
// Array A empty
if(n == 0) A = B;
int i = 0; // Array A pointer
int j = 0; // Array B pointer
// Insert array B to array A
while (i < m && j < n){
if(A[i] <= B[j]){
i++;
}
else{
for (int k=m-1; k>=i; k--){
// A[i] move backward
A[k+1] = A[k];
}
// insert B[j] to array A
A[i] = B[j];
i++;
j++;
m++;
}
}
// Array A reached end
if (i == m){
while (j < n){
A[i] = B[j];
i++;
j++;
}
}
}
}