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