题目链接:https://leetcode-cn.com/problems/merge-sorted-array
解题思路:三指针
先创建三个指针,一个指针 i 指向nums1的m-1处,一个指针 j 指向nums2的n-1处,一个指针dest指向nums1的m+n-1处,然后让 i 与 j 比较,将较大的往dest处放
i和j比,i小于j,所以dest=j,dest--,j--
i和j比,i小于j,所以dest=j,dest--,j--
i和j比,i大于j,所以dest=i,dest--,i--
i和j相等,放谁都可以,所以dest=j,dest--,j--
而此时的j结束了,所以循环结束,但是这里要注意一个问题,就是如果要是nums1的m个元素要是都大于nums2,就会出现如下情况,i走完了,但是j一步没走,所以跳出循环后,必须要判断j是否小于0,如果小于,则需要将j放入nums1中
代码如下:
//注:这里的nums1Size和nums2Size多余没用
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
int i = m - 1;
int j = n - 1;
int dest = m + n - 1;
while (i >= 0 && j >= 0)
{
//当i大于j时,将i赋值给dest
if (nums1[i] > nums2[j])
{
nums1[dest--] = nums1[i--];
}
//当i小于j时,将j赋值给dest
else
{
nums1[dest--] = nums2[j--];
}
}
//当出现nums1数组中的所有元素大于nums2数组的全部的元素时
while (j >= 0)
{
nums1[dest--] = nums2[j--];
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)