合并兩個(gè)排序的整數(shù)數(shù)組A和B變成一個(gè)新的數(shù)組型酥。
注意事項(xiàng)
你可以假設(shè)A具有足夠的空間(A數(shù)組的大小大于或等于m+n)去添加B中的元素。
樣例
給出A = [1, 2, 3, empty, empty], B = [4, 5]
合并之后 A 將變成 [1,2,3,4,5]
這個(gè)主要是要求原位操作庐完,并且給的是數(shù)組形式而不是vector的羞芍。
三指針+從后向前
因?yàn)橐徊僮鞴磁詻](méi)有額外的空間,需要從后向前荒椭,兩根指針?lè)謩e指向兩個(gè)數(shù)組的末尾谐鼎,另外一根指針指向A的末尾(題目假設(shè)有這么多的空間只是沒(méi)有賦值)。然后比較兩個(gè)數(shù)組指向?qū)ο蟮拇笮∪せ荩鶕?jù)不同大小的情況決定把那個(gè)放入A的末尾该面,這樣就能保證不會(huì)把未放入的覆蓋掉,極限情況是B的所有的數(shù)都比A 的大信卡,這樣也不會(huì)覆蓋掉A的最后一個(gè)數(shù)隔缀,寫(xiě)起來(lái)也比較簡(jiǎn)單:注意完了之后處理一下沒(méi)有遍歷完的那一個(gè)數(shù)組。
void mergeSortedArray(int A[], int m, int B[], int n) {
//三個(gè)指針
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
}
};