Very ugly (but work) solution:
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
vector<int> result;
int i = 0, j = 0;
while(i < m || j < n) {
if(i < m && j < n) {
if(A[i] <= B[j]) {
result.emplace_back(A[i]);
i++;
} else {
result.emplace_back(B[j]);
j++;
}
} else
if(i < m) {
result.emplace_back(A[i]);
i++;
} else
if(j < n) {
result.emplace_back(B[j]);
j++;
}
}
for(int i = 0; i < result.size(); ++i) {
A[i] = result[i];
}
}
};
A muce better solution, the key is to insert to A backward
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
while(m > 0 && n > 0) {
if(A[m - 1] > B[n - 1]) {
A[m + n - 1] = A[m - 1];
m--;
} else {
A[m + n - 1] = B[n - 1];
n--;
}
}
while(n > 0) {
A[n - 1] = B[n - 1];
n--;
}
}
};
No comments:
Post a Comment