题解 | #合并两个有序的数组#

合并两个有序的数组

http://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665

题目描述:
给出一个整数数组 和有序的整数数组 ,请将数组 合并到数组 中,变成一个有序的升序数组
注意:
1.可以假设 数组有足够的空间存放 数组的元素, 和 中初始的元素数目分别为 和 的数组空间大小为 
2.不要返回合并的数组,返回是空的,将数组 的数据合并到里面就好了
3.数组在[0,m-1]的范围也是有序的

解法一:暴力法(不推荐)
将B中所有元素直接插入A的尾部,再用选择排序将A中元素从小到大进行排序
class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        for(int i=0;i<n;i++)
            A[m+i]=B[i];
        for(int i=0;i<m+n-1;i++)
            for(int j=i+1;j<m+n;j++)
                if(A[i]>A[j])
                {
                    int temp=A[i];
                    A[i]=A[j];
                    A[j]=temp;
                }
    }
};
解法二:倒序插入法
从A与B的尾部开始逐个比较,较大者插入A的尾部,较小者留下继续进行比较,保证所有数据均被插入
class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        int temp=m+n-1;
        m--;
        n--;
        while(m>=0&&n>=0)
        {
            if(A[m]>B[n]) A[temp--]=A[m--];
            else A[temp--]=B[n--];
        }
        while(n>=0) A[temp--]=B[n--];
    }
};

全部评论

相关推荐

吃不饱的肱二头肌很想退休:tnnd 我以为选妹子呢,亏我兴高采烈的冲进来😠
投递快手等公司10个岗位
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务