原题网址:http://www.lintcode.com/zh-cn/problem/merge-two-sorted-arrays/#
合并两个排序的整数数组A和B变成一个新的数组。
样例
给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]
挑战
你能否优化你的算法,如果其中一个数组很大而另一个数组很小?
1 #include <iostream> 2 #include <vector> 3 #include <math.h> 4 #include <string> 5 #include <algorithm> 6 using namespace std; 7 8 //方法1; 9 vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) 10 { 11 int sizeA=A.size(); 12 int sizeB=B.size(); 13 if (sizeA<=sizeB) 14 { 15 for (int i=0;i<sizeA;i++) 16 { 17 B.push_back(A[i]); 18 } 19 sort(B.begin(),B.end()); 20 return B; 21 } 22 else 23 { 24 for (int i=0;i<sizeB;i++) 25 { 26 A.push_back(B[i]); 27 } 28 sort(A.begin(),A.end()); 29 return A; 30 } 31 32 } 33 34 //方法二; 35 vector<int> mergeSortedArray_w(vector<int> &A, vector<int> &B) 36 { 37 int sizeA=A.size(); 38 int sizeB=B.size(); 39 int i=0,j=0; 40 int k=0; 41 vector<int> result1(sizeA+sizeB,0); 42 //vector<int> result2; 43 while(i<sizeA&&j<sizeB) 44 { 45 if (A[i]<B[j]) 46 { 47 result1[k++]=A[i++]; 48 //result2.push_back(A[i++]); 49 } 50 else 51 { 52 result1[k++]=B[j++]; 53 //result2.push_back(B[j++]); 54 } 55 } 56 while(i<sizeA) 57 { 58 result1[k++]=A[i++]; 59 //result2.push_back(A[i++]); 60 } 61 while(j<sizeB) 62 { 63 result1[k++]=B[j++]; 64 //result2.push_back(B[j++]); 65 } 66 return result1; 67 }
参考:
1 https://blog.csdn.net/lyy_hit/article/details/49511839
2 https://blog.csdn.net/guoziqing506/article/details/50949830