给你两个按 非递减顺序 排列的整数数组 nums1
和 nums2
,另有两个整数 m
和 n
,分别表示 nums1
和 nums2
中的元素数目
请你 合并 nums2
到 nums1
中,使合并后的数组同样按 非递减顺序 排列(nums1
的初始长度为 m + n)。
eg1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6]
思路:设置定位指针
其中l3用于存放数据,l1和l2用于比较数据大小,因为数组本身就是升序,故其最后的位置为这个数组的最大值,将l1,l2较大的值放到l3处。
此处较大值为l2
之后将l2,l3往前移动;继续将l1,l2进行比较
此时l2已经移出了数组,l1变为有序
eg2:
此时l1已经小于0,但是数组并没有合并,则需要判断一下l2是否小于0,若l2大于等于0,则要将剩余nums2中的内容拷贝到nums1中。
code:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int l1=m-1;
int l2=n-1;
int l3=n+m-1;
while(l1>=0&&l2>=0)
{
if(nums1[l1]>nums2[l2])
{
nums1[l3]=nums1[l1];
l3--;
l1--;
}
else
{
nums1[l3]=nums2[l2];
l3--;
l2--;
}
}
while(l2>=0)
{
nums1[l3]=nums2[l2];
l2--;
l3--;
}
}