# Merge Sorted Array

## Question

Given two sorted integer arrays A and B, merge B into A as one sorted array.

Example
A = [1, 2, 3, empty, empty], B = [4, 5]

After merge, A will be filled as [1, 2, 3, 4, 5]

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.


## 题解

### Python

class Solution:
"""
@param A: sorted integer array A which has m elements,
but size of A is m+n
@param B: sorted integer array B which has n elements
@return: void
"""
def mergeSortedArray(self, A, m, B, n):
if B is None:
return A

index = m + n - 1
while m > 0 and n > 0:
if A[m - 1] > B[n - 1]:
A[index] = A[m - 1]
m -= 1
else:
A[index] = B[n - 1]
n -= 1
index -= 1

# B has elements left
while n > 0:
A[index] = B[n - 1]
n -= 1
index -= 1


### C++

class Solution {
public:
/**
* @param A: sorted integer array A which has m elements,
*           but size of A is m+n
* @param B: sorted integer array B which has n elements
* @return: void
*/
void mergeSortedArray(int A[], int m, int B[], int n) {
int index = m + n - 1;
while (m > 0 && n > 0) {
if (A[m - 1] > B[n - 1]) {
A[index] = A[m - 1];
--m;
} else {
A[index] = B[n - 1];
--n;
}
--index;
}

// B has elements left
while (n > 0) {
A[index] = B[n - 1];
--n;
--index;
}
}
};


### Java

class Solution {
/**
* @param A: sorted integer array A which has m elements,
*           but size of A is m+n
* @param B: sorted integer array B which has n elements
* @return: void
*/
public void mergeSortedArray(int[] A, int m, int[] B, int n) {
if (A == null || B == null) return;

int index = m + n - 1;
while (m > 0 && n > 0) {
if (A[m - 1] > B[n - 1]) {
A[index] = A[m - 1];
m--;
} else {
A[index] = B[n - 1];
n--;
}
index--;
}

// B has elements left
while (n > 0) {
A[index] = B[n - 1];
n--;
index--;
}
}
}