lintcode-6-合並排序數組


合並排序數組

合並兩個排序的整數數組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;
    }
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM