If use a new array, this problem is fairly easy. The point, to my understanding, is how to do it in place.

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* and *n*respectively.

```
public class Solution {
public void merge(int A[], int m, int B[], int n) {
if (n == 0) return;
int pointer = m + n - 1;
m--;
n--;
while (m >= 0 && n >= 0){
if (A[m] > B[n]) {
A[pointer--] = A[m--];
}else{
A[pointer--] = B[n--];
}
}
while (m >= 0) {
A[pointer--] = A[m--];
}
while (n >= 0) {
A[pointer--] = B[n--];
}
}
}
```

In which, pointer can also be replaced by m+n. Therefore not even using new variables.

Advertisements