第一版,使用库函数
class Solution {
public:
void merge(vector<int>& A, int m, vector<int>& B, int n) {
copy(B.begin(),B.begin() + n,A.begin() + m);
sort(A.begin(),A.end());
}
};
第二版,逆向双指针
class Solution {
public:
void merge(vector<int>& A, int m, vector<int>& B, int n) {
int pA = m-1;
int pB = n-1;
int tail = m + n - 1;
int cur = 0;
while(tail >= 0){
if(pA == -1){
cur = B[pB--];
}else if(pB == -1){
cur = A[pA--];
}else if(A[pA] > B[pB]){
cur = A[pA];
pA--;
}else {
cur = B[pB];
pB--;
}
A[tail--] = cur;
}
}
};