嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let's go!
我的博客:yuanManGan
题目来源 力扣 合并两个有序数组
题目理解:
题目很简单,有两个升序的数组,一个大小为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)