【刷题之路】有序数组组合问题

来源:互联网 发布:手机壳效果图软件 编辑:程序博客网 时间:2024/06/10 01:18

有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。

因为A末尾有足够空间,所以应从后往前遍历这样就不用开辟新的空间来存放数组。

首先比较AB最后一个数字,大的放入A最后一个位置,不断遍历。如果B遍历完了,直接返回A,如果A遍历完了,则将B按顺序放入A前面空出来的位置。

class Merge {
public:
    int* mergeAB(int* A, int* B, int n, int m) {
        // write code here
        int right=m+n-1,i=n,j=m;
        while(i>=0&&j>=0){
            if(A[i-1]>B[j-1]){  //比较AB最后数字,大的放入A末尾,同时相应数组往前移一位继续比较
                A[right]=A[i-1];
                --i;
            }
            else{
                A[right]=B[j-1];
                --j;
            }
            --right;
        }
        while(j>=0){  //如果B遍历完了,直接返回A,如果B没有遍历完,则将B继续放入A中
            A[right]=B[j];
            --j;
            --right;
        }
        return A;
    }
};


0 0
原创粉丝点击