合并两个排序的整数数组A和B变成一个新的数组。
注意事项
你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。
样例
给出A = [1, 2, 3, empty, empty], B = [4, 5]
合并之后 A 将变成 [1,2,3,4,5]
这个主要是要求原位操作,并且给的是数组形式而不是vector的。
三指针+从后向前
因为要原位操作,所以没有额外的空间,需要从后向前,两根指针分别指向两个数组的末尾,另外一根指针指向A的末尾(题目假设有这么多的空间只是没有赋值)。然后比较两个数组指向对象的大小,根据不同大小的情况决定把那个放入A的末尾,这样就能保证不会把未放入的覆盖掉,极限情况是B的所有的数都比A 的大,这样也不会覆盖掉A的最后一个数,写起来也比较简单:注意完了之后处理一下没有遍历完的那一个数组。
void mergeSortedArray(int A[], int m, int B[], int n) {
//三个指针
int pos=m+n-1;
int posA=m-1;
int posB=n-1;
while(posA>=0&&posB>=0)
{
if(A[posA]>B[posB])
{
A[pos]=A[posA];
posA--;
pos--;
}
else if(A[posA]<B[posB])
{
A[pos]=B[posB];
posB--;
pos--;
}
else
{
A[pos]=A[posA];
pos--;
posA--;
A[pos]=B[posB];
pos--;
posB--;
}
}
while(posA>=0)
{
A[pos]=A[posA];
pos--;
posA--;
}
while(posB>=0)
{
A[pos]=B[posB];
pos--;
posB--;
}
// write your code here
}
};
网友评论