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.
对于该题,考虑从前往后比较,这样的话免去了大量数据的移动,提高了效率,代码如下:
class Solution
{
public:
void merge(int A[], int m, int B[], int n)
{
int i = m-1;
int j = n - 1;
while ((i >= 0) || ( j >= 0))
{
if ((i>= 0) && ( j >= 0))
{
if (A[i] > B[j])
{
A[i+j+1] = A[i];
i--;
}
else
{
A[i+j+1] = B[j];
j--;
}
}
else if (j >= 0)
{
A[j] = B[j];
j--;
}
else
break;
}
}
};