这题补的是我们的基本功,数组merge,不要总想着正向走,还有逆着呢。
两种解法,一个正向,太复杂了,一个逆向,我们得掌握的。补欠账!!
/**
* @param A: sorted integer array A which has m elements,* but size of A is m+n
* @param B: sorted integer array B which has n elements
* @return: void
*/
public void mergeSortedArray(int[] A, int m, int[] B, int n) {
// write your code here
int i = m - 1, j = n - 1, index = m + n - 1;
while (i >= 0 && j >= 0) {
if (A[i] > B[j]) {
A[index--] = A[i--];
} else {
A[index--] = B[j--];
}
}
while (i >= 0) {
A[index--] = A[i--];
}
while (j >= 0) {
A[index--] = B[j--];
}
// int []results = new int[m + n];
// //if (A == null || m == 0 || B == null || n == 0) {
// if (A == null || B == null) {
// //return results;
// return ;
// }
// int index = 0;
// int i = 0, j = 0;
// for (; i < m && j < n;) {
// if (A[i] == B[j]) {
// results[index++] = A[i++];
// results[index++] = B[j++];
// } else if (A[i] > B[j]) {
// results[index++] = B[j++];
// } else {
// results[index++] = A[i++];
// }
// }
// while (i < m) {
// results[index++] = A[i++];
// }
// while (j < n) {
// results[index++] = B[j++];
// }
// //for (int i = 0; i < m + n; i++) {
// // A[i] = results[i];
// for (int k = 0; k < m + n; k++) {
// A[k] = results[k];
// }
}