LeetCode —— 88. 合并两个有序数组

在这里插入图片描述
请添加图片描述

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️
💥个人主页:🔥🔥🔥大魔王🔥🔥🔥
💥所属专栏:🔥魔王的修炼之路–力扣🔥
如果你觉得这篇文章对你有帮助,请在文章结尾处留下你的点赞👍和关注💖,支持一下博主。同时记得收藏✨这篇文章,方便以后重新阅读。

88. 合并两个有序数组

88. 合并两个有序数组

题目:
在这里插入图片描述
在这里插入图片描述

//从后往前放,时间复杂度为 O(n),不是从前往后,不用一直挪数据。直接从后往前从大到小覆盖就行(非递减顺序,所以不会覆盖到没用过的数据)。
// void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
//     int dst = m + n - 1;
//     int src1 = m - 1;
//     int src2 = n - 1;
//     while (src1 >= 0 && src2 >= 0)
//     {
//         if (nums1[src1] > nums2[src2])
//         {
//             nums1[dst] = nums1[src1];
//             src1--;
//             dst--;
//         }
//         else
//         {
//             nums1[dst] = nums2[src2];
//             src2--;
//             dst--;
//         }
//     }
//     if (src1 == -1)
//     {
//         while (src2 >= 0)
//         {
//             nums1[dst--] = nums2[src2--];
//         }
//     }
// }

//方法2:通过新建一个数组,根据快慢指针将元素放进去,最后让其内存拷贝到 nums1 中,因为如果从前往后操作 nums1 效率太低,每次都要移动数据,时间复杂都就是O(N^2),新建一个数组的话时间复杂度为O(n)
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    int* nums3 = malloc(sizeof(int)*(m+n));
    int n1 = 0;
    int n2 = 0;
    int n3 = 0;
    while(n1 < m && n2 < n)
    {
        if(nums1[n1]<nums2[n2])
        {
            nums3[n3] = nums1[n1];
            n1++;
            n3++;
        }
        else
        {
            nums3[n3] = nums2[n2];
            n2++;
            n3++;
        }
    }
    if(n1==m)
    {
        while(n2<n){
        nums3[n3] = nums2[n2];
        n2++;
        n3++;
        }
    }
    else
    {
        while(n1<m)
        {
            nums3[n3] = nums1[n1];
            n1++;
            n3++;
        }
    }
    memcpy(nums1,nums3,sizeof(int)*(m+n));
}

  • 博主长期更新,博主的目标是不断提升阅读体验和内容质量,如果你喜欢博主的文章,请点个赞或者关注博主支持一波,我会更加努力的为你呈现精彩的内容。

🌈专栏推荐
😈魔王的修炼之路–C语言
😈魔王的修炼之路–数据结构
😈魔王的修炼之路–C++
😈魔王的修炼之路–QT
😈魔王的修炼之路–算法
😈魔王的修炼之路–力扣
😈魔王的修炼之路–牛客
😈魔王的修炼之路–剑指offer
😈魔王的修炼之路–Linux
更新不易,希望得到友友的三连支持一波。收藏这篇文章,意味着你将永久拥有它,无论何时何地,都可以立即找到重新阅读;关注博主,意味着无论何时何地,博主将永久和你一起学习进步,为你带来有价值的内容。

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大魔王(已黑化)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值