力扣88.合并两个有序数组【顺序表】


🙈个人主页阿伟@t
👉系列专栏【C语言–大佬之路】
🎈今日心语:你所看到的惊艳,都曾被平庸所历练。



前言:

适合学习了数据结构顺序表后做,此题虽然简单,但是必须结合画图进行分析,同时要仔细阅读题目。



题目要求:


题目分析:

思路:

但是题目中并没有让我们合并到新数组中,而是要求合并到nums1中,题目中已经将空间开好

思路2:采用三指针,i1和i2从后往前进行比较,例如开始时:

i1指向nums1中的3,i2指向nums2末尾的6,j指向nums1末尾的0;

3<6,将i2指向的值给了j,然后i2–,j–;

i1暂时不需要向前偏移,将继续和i2指向的下一个位置进行比较

如上图,我们采取,指针从后逐渐向前偏移的方式,使得nums2从后往前放到nums1后面,但是通过画图,我们发现会出现两种情况:

1.当i2先走完,这时nums1中的元素就是合并后的结果。

2.当i1先走完,这时,需要将nums2中剩余的值放到nums1中,此时的nums1才是最后的结果。


最终代码:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
    int i1 = m-1,i2 = n-1;
    int j = m+n-1;
    while(i1 >= 0 && i2 >=0)//不满足一个条件就结束
    {
        if(nums1[i1] > nums2[i2])
        {
            nums1[j--] = nums1[i1--];
            //相当于
            //nums1[j] = nums1[i1];
            //j--;
            //i1--;
        } 
        else
        {
            nums1[j--] = nums2[i2--];
        }
    }
    while(i2 >=0)//当i1走完,i2未走完
    {
        nums1[j--] = nums2[i2--];
    }
}

结语:

这里本章内容就介绍完了,文章中某些内容我们之前有介绍,所以只是一笔带过,还请谅解。

希望以上内容对大家有所帮助👀,如有不足望指出🙏

前路漫漫!努力变强💪💪 吧!!


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿伟@t

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

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

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

打赏作者

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

抵扣说明:

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

余额充值