题目
虽然时间复杂度O(m+n)已经最优,但由于空间复杂度为O(N)不符合条件,于是本着优化空间复杂度,有了思路二
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int end1 = m - 1;//第一个数组的小标
int end2 = n - 1;//第二个数组的小标
int end = m + n - 1;//合并之后最后一个元素的下标
while(end1 >= 0 && end2 >= 0)//一个结束就结束,所以一定是&&且
{
if(nums1[end1] > nums2[end2])
{
nums1[end--] = nums1[end1--];
}
else
{
nums1[end--] = nums2[end2--];
}
}
while(end2 >= 0)//如果是end2还没结束,有数据,要继续挪动过去
{
nums1[end--] = nums2[end2--];
}
//如果是end1还有数据则不需要挪动,因为本来就在nums1中
}