题目:
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 arem and n respectively.
//思路:为了不另外开辟空间,可以从右向左进行归并,类似与剑指offer中的先计算出末尾元素的位置loc,然后
//进行归并排序
贴上AC代码如下:
class Solution {
public:
//思路:为了不另外开辟空间,可以从右向左进行归并,类似与剑指offer中的先计算出末尾元素的位置loc,然后
//进行归并排序
void merge(int a[], int m, int b[], int n) {
if(n==0)
return;
if(m==0)
{
for(int i=0;i<n;i++)
a[i]=b[i];
return;
}
int i=m-1;
int j=n-1;
int loc=m+n-1;
while(i>=0 && j>=0)//保证两个数组都没有归并完成
{
if(a[i]>=b[j])
{
a[loc--]=a[i--];
}
else
{
a[loc--]=b[j--];
}
}
//如果最后是剩下的a中元素,则直接返回,如果是B中的元素则需要将元素全部移动到a中
if(j>=0)//注意j可以等于0,因为这时候b中剩下一个元素
{
for(int k=0;k<=j;k++)
{
a[k]=b[k];
}
}
}
};