劍指offer面試題5延展題:
問題:有兩個排序的陣列a1和a2,內存在a1的末尾有足夠多的空間容納a2。請實現乙個函式,把a2中所有數字插入a1中,並且所有的數字是排序(預設公升序)的。
思路:在合併兩個陣列(包括字串)時,從前往後複製每個數字(或字元)則需要重複移動數字(或字元)多次,則考慮從後往前複製就可以減少移動的次數,從而提高效率。
1.n1,n2分別指向陣列a1和a2的尾部,strnew指向合併後的陣列的尾部;
2.當陣列名是乙個程式設計客棧nullptr指標,或者a1陣列是乙個空陣列則返回;
3.當陣列a1[ida]>=a2[idb]或者idb程式設計客棧<0時,則複製ida指標所指的數到strnew指向的位置,ida向前移動1格,strnew向前移動1格;
4.當陣列a1[ida]
5.直到strnew<0則停止迴圈。
注意:輸入的n1,n2為陣列的長度,作指標時都要-1;
迴圈終止的條件從合併陣列指標入手,合併結束迴圈終止,即strnew<0;
注意形參和實參的傳遞,陣列傳入函式的三種宣告func(int *arr), func(int arr[n]), func(int arr),返回陣列指標的函式int * func( )
#include
#include
using namespace std;
int * insert(int *str1, int *str2, int n1, int n2,int length)
int strnew = n1 + n2 - 1;
int ida = n1-1;
int idb = n2-1;
while(strnew >= 0)
else if(str1[ida] < str2[idb] || ida<0)
} return st程式設計客棧r1;
//return dest;
}int main()
for(int i=0;i>b[i];
}www.cppcns.com
//int *c;
//c = insert(a, b, n1, n2, 100);
insert(a, b, n1, n2, 100);
for(int i=0;i
本文標題: c++實現兩個有序陣列的合併
本文位址:
合併兩個有序陣列 c
題目描述 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。說明 示例 輸入 nums1 1,2,3,0,0,0 m 3 nums2 2,5,6 n 3輸出 1,2,2,3,5,6 思路1 建立乙個新的向量陣列,很常規的乙個思...
合併兩個有序陣列C
題目描述 有兩個排序的陣列a1和a2,內存在a1的末尾有足夠的空餘空間容納a2。請實現乙個函式,把a2中的所有數字插入到a1中,並且所有的數字是排序的。思路分析 從尾到頭邊比較,邊移入正確的位置,時間複雜度為o n include using namespace std void combin2ar...
合併兩個有序陣列(C )
合併兩個有序陣列 思路兩個陣列都非空 記兩個陣列分別為v1,v2,合併後的陣列為vc,設定兩個指標i j分別指向陣列v1,v2,令i j 0,若v1 i v2 j 則可以一直新增v1的元素到合併後的陣列vc直到條件不滿足,同時修改i 新增v2的元素到vc 如果乙個陣列被遍歷完,則應該終止 新增未遍歷...