首页 > 技术文章 > lintcode-6-合并排序数组

libaoquan 2017-06-10 19:54 原文

合并排序数组

合并两个排序的整数数组A和B变成一个新的数组。

样例

给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]

挑战

你能否优化你的算法,如果其中一个数组很大而另一个数组很小?

标签

排序数组 数组

思路

题目说明不明确,未保证数组的规模,采用常规的归并排序的方法。若2个数组规模差异较大,且大规模的数组的可以容纳小规模数组的规模,则采取从后向前遍历数组的方法,不开辟新的空间,将小数组融入到大数组中。可参考http://blog.csdn.net/luckyu1/article/details/51203078

code

class Solution {
public:
    /**
     * @param A and B: sorted integer array A and B.
     * @return: A new sorted integer array
     */
    vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) {
        // write your code here
        int sizeA=A.size(), sizeB=B.size();
        int i=0, j=0;

        if(sizeA == 0)
            return B;
        else if(sizeB == 0)
            return A;

        vector<int> result;

        while(i<sizeA && j<sizeB) {
            if(A[i] < B[j]) {
                result.push_back(A[i]);
                i++;
            }
            else if(A[i] > B[j]) {
                result.push_back(B[j]);
                j++;
            }
            else {
                result.push_back(A[i]);
                i++;
                result.push_back(B[j]);
                j++;
            }
        }

        while(i<sizeA) {
            result.push_back(A[i]);
            i++;
        }
        while(j<sizeB) {
            result.push_back(B[j]);
            j++;
        }
        return result;
    }
};

推荐阅读