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

合并两个有序的数组

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

//这题我的代码确实很水,不过对我这种菜鸡来说不错了
//首先说说这题考点及出处,考点:双指针,出处:数据结构书上单链表应用---一元多项求和其实和这题有异曲同工之妙,都是一样的思想,不会的同学可以拿出数据结构好好复习一下哦
class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        int ap=0,bp=0;
        int ans=m;
        for(ap=0,bp=0;ap<m&&bp<n;)
        {
            if(B[bp]<=A[ap])//如果数组B的值小于等于A的值,即可以把B插入到A中了,此时A中m加一,A,B指针分别后移一位
            {
                for(int i=m-1;i>=ap;i--)
                {
                    A[i+1]=A[i];
                }
                m++;
                A[ap]=B[bp];
                bp++;
                ap++;
            }
            else//如果B的值大于A,则A应该往前移动一位
            {
                ap++;
            }
        }
        if(bp==n)return;//bn==n,说明By已经全部插入到A中了,结束
        else//否则说明此时B[bp]比A中的任何一个值都大(想不通画一画就懂了),所以此时只需把B中剩余元素全部移到A后面即可
        {
            for(int i=m;i<ans+n;i++)//注意这里应该是ans+n,而不是m+n,因为m的值在插入的过程中已经被修改了(被这个卡半天)
            {
                A[i]=B[bp++];
            }
        }
    }
};
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务