首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >64. 合并排序数组 II 三指针+从后向前

64. 合并排序数组 II 三指针+从后向前

作者头像
和蔼的zhxing
发布2018-09-04 11:44:58
4000
发布2018-09-04 11:44:58
举报

合并两个排序的整数数组A和B变成一个新的数组。 注意事项 你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。 样例 给出A = [1, 2, 3, empty, empty], B = [4, 5] 合并之后 A 将变成 [1,2,3,4,5]

这个主要是要求原位操作,并且给的是数组形式而不是vector的。

三指针+从后向前

因为要原位操作,所以没有额外的空间,需要从后向前,两根指针分别指向两个数组的末尾,另外一根指针指向A的末尾(题目假设有这么多的空间只是没有赋值)。然后比较两个数组指向对象的大小,根据不同大小的情况决定把那个放入A的末尾,这样就能保证不会把未放入的覆盖掉,极限情况是B的所有的数都比A 的大,这样也不会覆盖掉A的最后一个数,写起来也比较简单:注意完了之后处理一下没有遍历完的那一个数组。

 void mergeSortedArray(int A[], int m, int B[], int n) {
       //三个指针
        int pos=m+n-1;
        int posA=m-1;
        int posB=n-1;
        while(posA>=0&&posB>=0)
        {
            if(A[posA]>B[posB])
            {
                A[pos]=A[posA];
                posA--;
                pos--;
            }
            else if(A[posA]<B[posB])
            {
                A[pos]=B[posB];
                posB--;
                pos--;
            }
            else
            {
                A[pos]=A[posA];
                pos--;
                posA--;
                A[pos]=B[posB];
                pos--;
                posB--;
            }
            
        }
        while(posA>=0)
        {
            A[pos]=A[posA];
            pos--;
            posA--;
        }
        while(posB>=0)
        {
            A[pos]=B[posB];
            pos--;
            posB--;
        }
        // write your code here  
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.12.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三指针+从后向前
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档