数据结构初阶之顺序表数组OJ题三——合并两个有序数组

数据结构初阶之顺序表数组OJ题三——合并两个有序数组,第1张

题目链接: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--];
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/607889.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-14
下一篇 2022-04-14

发表评论

登录后才能评论

评论列表(0条)

保存