题山采玉:合并两个有序数组

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let's go!

我的博客:yuanManGan

我的专栏:C++入门小馆 C言雅韵集 数据结构漫游记  闲言碎语小记坊 题山采玉

题目来源 力扣 合并两个有序数组

题目理解:

题目很简单,有两个升序的数组,一个大小为m+ n但后n个不存储有效信息全是0,讲两个数组以升序合并到一起,并且合并到第一个数组。

思路讲解:

利用辅助数组:

什么辅助数组啊,通俗一点将两个数组合并到这个新数组之中,而要实现这一切,不得不使用三指针,定义三个指针,分别指向三个数组的首元素,比较前两个数组的大小,谁小谁移动到新数组中,基本思路就是这样,大家注意看代码实现的时候有很多小细节,一个细节没注意到,可能就完蛋了,够你调试半天的了。

原地进行操作:

如果我们仅仅只定义cur1和cur2,当cur1<cur2时改变,那就会出现覆盖掉要遍历的数的问题。

我们这时就想到了逆序遍历,让cur = m + n,cur1 = m - 1. cur2 = n -1.

然后就比较cur12指向的数组元素的大小,如果按照图中的这种情况来实现一下,然后判断一下结束条件,

如果是这个情况的话,只要cur2 == 0就结束了,但还有令一种情况。

当cur1或者cur2有一个为0时都会结束,但cur1为0时要将cur2剩下的全部拷贝到第一个数组中。

代码实现

代码实现

方法一

时间复杂度O(n)

空间复杂度O(n)

方法二

时间复杂度O(n)

空间复杂度O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值