Merge Sorted Array
Q:
Given two sorted integer arrays A and B, merge B into A as one sorted array.
Note:
You may assume that A has enough space to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.
A:
原题已经说了A有足够的空间存储B,我为自己写出了如此sb的代码而感到羞愧。记录下来以做纪念。
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int* C = new int[m + n];
int i = 0;
int j = 0;
int k = 0;
while (i < m && j < n) {
if (A[i] < B[j]) {
C[k++] = A[i];
++i;
} else {
C[k++] = B[j];
++j;
}
}
for (; i < m; ++i) {
C[k++] = A[i];
}
for (; j < n; ++j) {
C[k++] = B[j];
}
for (int l = 0; l < m + n; ++l) {
A[l] = C[l];
}
delete [] C;
}
};
最好的做法如下,烦躁阿,如此清晰的代码,come on!
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
while (n > 0) {
if (m <= 0 || A[m - 1] <= B[n - 1]) {
A[m + n - 1] = B[--n];
} else {
A[m + n - 1] = A[--m];
}
}
}
};

浙公网安备 33010602011771号