题目:合并两个排序好的数组,要求新数组也是有序的
分析:假设两个数组为A和B,新数组为C。A和B的元素比较,小的放在C中,并且指针+1。临界条件很重要:假设A的指针越界(退出循环的条件),那么B的指针肯定没有越界(为什么?看代码),并且B未比较的元素一定比A所有元素大(A指针都越界了,说明A最后一个元素进入新数组了,说明这个元素比B某个元素小),所以直接将B剩下的元素添加到C中。
代码:
public class Solution {
/*
* @param A: sorted integer array A
* @param B: sorted integer array B
* @return: A new sorted integer array
*/
public int[] mergeSortedArray(int[] A, int[] B) {
// write your code here
int[] result = new int[A.length + B.length];
int i = 0;
int a = 0;
int b = 0;
while (a < A.length && b < B.length) {
// 如果a和b都不越界,那么执行比较操作
if (A[a] < B[b]) {
// 如果A[a]比B[b]小,那么放A[a]
result[i] = A[a];
a++;
} else {
// 反之,放B[b]
result[i] = B[b];
b++;
}
i++;
}
// 此时,一定有某个数组的数全部比较完了,一定有一个数组还有数没比较,并且这些数比
// 另一个数组大
while (a < A.length) {
// 如果A数组没越界,说明还有数没比较,直接添加到新数组
result[i] = A[a];
a++;
i++;
}
while (b < B.length) {
// 同理
result[i] = B[b];
b++;
i++;
}
return result;
}
}