题目描述:
代码实现:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int x=0;
if(m==0)//如果nums1为空,而nums2不为空,则将nums2拷贝至nums1
{
while(nums1Size--)
{
nums1[x]=nums2[x];
x++;
}
}
if(n==0)//如果nums2为0,直接返回
return;
int cur=m+n-1;
int n1=m-1;
int n2=n-1;
while(n1>=0&&n2>=0)//两者都不为空,进行合并操作//若直接写成cur>=0可能造成非法访问
{
if(nums1[n1]>nums2[n2])
{
nums1[cur]=nums1[n1];
cur--;
n1--;
}
else
{
nums1[cur]=nums2[n2];
cur--;
n2--;
}
}
//如果是因为n2<0停止,n1顺序是正确的,因此不需要进行其他操作
while(n2>=0)//如果是因为n1<0停止,nums2中还有数据没有拷贝至nums1,因此需要另外拷贝至nums1
{
nums1[cur]=nums2[n2];
n2--;
cur--;
}
}