6 合并排序数组 Ⅱ

原题网址: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 }

参考:

https://blog.csdn.net/lyy_hit/article/details/49511839

https://blog.csdn.net/guoziqing506/article/details/50949830

posted @ 2018-03-23 20:20  eeeeeeee鹅  阅读(137)  评论(0编辑  收藏  举报