Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
题意:给定两个有序数组:nums1 和nums2,将两个数组合为一个,其中nums1有足够的空间容纳两个数组。
如果不创建新的数组,那么就直接在nums1上处理,只需要在空间末尾一次次地保留nums1数组末尾和nums2数组末尾的较大值即可,代码如下:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
int help=n+m-1;//num1所存的数组长度能够容纳两个数组
int i=m-1;
int j=n-1;
while(i>=0&&j>=0)//当两个数组都有剩余的时候
{
if(nums1[i]>nums2[j])//将较大的数字放到后面
{
nums1[help--]=nums1[i--];
}
else {
nums1[help--]=nums2[j--];
}
}
while(j>=0)//若剩余的数走在第二个数组,则需要放在nums1上
{
nums1[help--]=nums2[j--];
}
return ;
}