Leetcode—合并两个有序数组
题目描述
思路
思路:创建三个指针,L1指向num1最后一个有效数据的位置,L2指向num2最后一个有效数据的位置,L3指向num1最后一个位置。比较L1和L2位置的数据,谁大,谁往L3的位置放数据。
画图解释
创建三个指针,L1指向num1最后一个有效数据的位置,L2指向num2最后一个有效数据的位置
L3指向num1最后一个位置
比较L1和L2位置的数据,谁大,谁往L3的位置放数据。
case1:L2先小于0(L2<0)不需要处理
上面是此题的一种情况,下面我们来看此题另一种情况
case2:L1先小于0,(L1<0)需要处理
综上,结束条件:要么L1<0,要么L2<0
若L1先小于0,(L1<0)需要处理,要把num2中的数据循环放到num1;
若L2先小于0,则不要处理,因为此时num2中的数据已经有序的放到num1。
完整代码
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int L1=m-1;
int L2=n-1;
int L3=m+n-1;
while(L1>=0&&L2>=0)
{
if(nums1[L1]>nums2[L2])
{
nums1[L3--]=nums1[L1--];
}
else
{
//要么L1==L2,要么L2>L1
nums1[L3--]=nums2[L2--];
}
}
//跳出while有两种情况:1.L1<0(需要处理); 2.L2<0(不需要处理)
while(L2>=0)
{
nums1[L3--]=nums2[L2--];
}
}