合併排序陣列(LintCode)
阿新 • • 發佈:2019-01-31
題目來源:LintCode
原題地址:http://www.lintcode.com/zh-cn/problem/merge-sorted-array-ii/
題目:
難度級別:
容易
思路分析:
我採用的比較常規的思路,用的就是歸併排序的方法。
首先開闢一個新的空間,其大小是兩個陣列的總和,來存放合併排序之後的陣列。
然後就是歸併的常規思路了。
對於挑戰的意思,我的理解是否是要想辦法來降低所需的額外空間呢? 還是要更快的進行合併排序呢?
如果是降低所需的額外空間的話,那麼如果陣列是一大一小,且大的陣列是能夠容納所有的元素的話。
那麼,我們可以從陣列的末尾開始從遍歷,進行歸併操作。當較小的陣列元素全部歸併結束之後,成像就可以停止歸併了。
實現程式碼:
程式碼說明:
上述程式碼採用的常規的思路,因為題中並未保證原陣列的大小。
原題地址:http://www.lintcode.com/zh-cn/problem/merge-sorted-array-ii/
題目:
合併兩個排序的整數陣列A和B變成一個新的陣列。
您在真實的面試中是否遇到過這個題? Yes 樣例給出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]
挑戰你能否優化你的演算法,如果其中一個數組很大而另一個數組很小?
難度級別:
容易
思路分析:
我採用的比較常規的思路,用的就是歸併排序的方法。
首先開闢一個新的空間,其大小是兩個陣列的總和,來存放合併排序之後的陣列。
然後就是歸併的常規思路了。
對於挑戰的意思,我的理解是否是要想辦法來降低所需的額外空間呢? 還是要更快的進行合併排序呢?
如果是降低所需的額外空間的話,那麼如果陣列是一大一小,且大的陣列是能夠容納所有的元素的話。
那麼,我們可以從陣列的末尾開始從遍歷,進行歸併操作。當較小的陣列元素全部歸併結束之後,成像就可以停止歸併了。
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) { vector<int> result(A.size()+B.size(), 0); int i = 0, j = 0; int k = 0; while (i < A.size() && j < B.size()) { if (A[i] > B[j]) { result[k++] = B[j++]; } else { result[k++] = A[i++]; } } while (i < A.size()) { result[k++] = A[i++]; } while (j < B.size()) { result[k++] = B[j++]; } return result; } };
程式碼說明:
上述程式碼採用的常規的思路,因為題中並未保證原陣列的大小。