//双指针法,从A、B数组的末尾开始遍历,将较大者保存到另一个指针指向的新A数组的末尾:
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int *p = &A[m - 1], *q = &B[n - 1], *r = &A[m + n - 1]; //注意数组指针的定义和赋值!!
while (m + n > 0) //求和 大于0,说明这两个数组还没走完,具体是都没走完,还是单个没走完,需要进一步判断
{
if (m > 0 && n > 0) //都没走完
{
if (*p > *q)
{
*r = *p;
p--;
r--;
m--;
}
else {
*r = *q;
r--;
q--;
n--;
}
}
else
{
//走完一个了,还剩一个 。具体剩哪个,需要进一步判断
{
while (m--)
{
*r = *p;
r--;
p--;
}
while (n--)
{
*r = *q;
r--;
q--;
}
}
}
}
};