题解 | #合并两个有序的数组#
合并两个有序的数组
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++]; } } } };