合并两个排序的整数数组A和B变成一个新的数组。
class Solution {
public:
/**
* @param A: sorted integer array A
* @param B: sorted integer array B
* @return: A new sorted integer array
*/
vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) {
// write your code here
if(A.empty())
return B;
if(B.empty())
return A;
vector<int> ret;
// A[last] <= B[first],A先插入
int i = 0, j = 0;
if (A[A.size() - 1] <= B[0]) {
while (i < A.size())
ret.push_back(A[i++]);
while (j < B.size())
ret.push_back(B[j++]);
}
// B[last] <= A[first],B先插入
if(B[B.size()-1] <= A[0]) {
while (j < B.size())
ret.push_back(B[j++]);
while (i < A.size())
ret.push_back(A[i++]);
}
// 混合交叉
while(i<A.size() && j<B.size()) {
if(A[i] < B[j]) {
ret.push_back(A[i]);
i++;
}
else if(A[i] > B[j]) {
ret.push_back(B[j]);
j++;
}
else {
ret.push_back(A[i]);
ret.push_back(B[j]);
i++,j++;
}
}
// a走完,剩下的b全部push_back
if(i==A.size() && j< B.size()) {
while (j < B.size())
ret.push_back(B[j++]);
}else if(i!=A.size() && j==B.size()) {
// b走完,剩下的a全部push_back
while (i < A.size())
ret.push_back(A[i++]);
}
return ret;
}
};