1.描述示例
2.思路:
因为给定的两个数组都是非递减的即是有序的,所以可以用两个指针从后面比较,大的先放入nums1的后面,逆位双指针
3.代码:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int p1=m-1,p2=n-1;
int p=m+n-1;
int cur;
while((p1>=0)||(p2>=0))
{
if(p1==-1)
{
cur=nums2[p2];
p2--;
}
else if(p2==-1)
{
cur=nums1[p1];
p1--;
}
else if(nums1[p1]<nums2[p2])
{
cur=nums2[p2];
p2--;
}
else
{
cur=nums1[p1];
p1--;
}
nums1[p]=cur;
p--;
}
}
4.复杂度分析:
时间复杂度分析:双指针最多移动m+n次
所以时间复杂度为O(m+n)
空间复杂度分析:
未开辟新的空间,所以空间复杂度O(1)