LintCode: 合并两个排序好的数组

题目:合并两个排序好的数组,要求新数组也是有序的

分析:假设两个数组为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;
    }
}

猜你喜欢

转载自blog.csdn.net/cblstc/article/details/79147485