温故而知新,LeetCode编程题系列---4.合并排序数组

问题: 合并两个排序的整数数组A和B变成一个新的数组。

样例: 给出A=[1,2,3,4]B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]

分析: 所给的两个数组都是已经排序完毕的数组,那就不需要将两个数组的元素先放入另一个数组再排序.只需每次取出没有被放入新数组的并且是A,B两数组中各自最小的两个元素,比较之后,将小者放入C中,大者进入下一轮比较,直至A或B任一数组的元素全部被放入新数组,最后A或B剩余的元素依次放入新数组即可.

代码如下:

public int[] mergeSortedArray(int[] A, int[] B) {
        // write your code here
        int a = A.length;
        int b = B.length;
        int c = a+b;
        int indexA = 0;
        int indexB = 0;
        int indexC = 0;
        int[] C = new int[c];
        while(indexA != a && indexB != b) {
        	if(A[indexA] < B[indexB]){
                C[indexC++] = A[indexA];
                indexA++;
            }else if(A[indexA] > B[indexB]){
                C[indexC++] = B[indexB];
                indexB++;
            }else{
                C[indexC++] = A[indexA];
                C[indexC++] = B[indexB];
                indexA++;
                indexB++;
            }
        }
        while(indexC != c) {
        	if (indexA == a){
                C[indexC++] = B[indexC-a-1];
            }
            if (indexB == b){
                C[indexC++] = A[indexC-b-1];
            }
        }
        return C;
    }


猜你喜欢

转载自blog.csdn.net/zxuan5h2ljojo/article/details/79260363
今日推荐