Leetcode 合并有序数组

Day3 合并数组

题目(88)

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
在这里插入图片描述

思路一:这直接补齐,然后排序不就完事了吗。事实证明,你能第一时间想到的,大家也能想到。并且,由于我懒得排序,直接调用了sort方法排序。别看代码简洁,是因为人家java底层把排序给你写好了,你去调用而已。
在这里插入图片描述
由于测试集的数组长度不一,所以底层调用的排序方法也不一样。
具体可以去看看sort的底层源码。这里就放一下各排序的时间复杂度
在这里插入图片描述
图是偷的= =。看了一下 如果数组长度较短,是用插入排序,很长的话用的是归并排序或者快排。所以时间复杂度自行校对哈。
在这里插入图片描述

思路二:由于数组是有序的,所以我们可以从两个数组的最后一个开始比较,谁大我们就放到数组的最末尾,这个末尾的索引用一个变量记录,一被赋值就-1,同样的,两个数组的末尾的索引也可以用变量记录,哪个数组的值被拿去就-1。最后,判断一哈nums1数组是不是先赋值完了,因为len1如果小于0,说明nums2数组剩下的全部都小于nums1最小的那个元素。然后相应的赋值就行了。len2小于0就说明nums2的元素都已经合并到nums1了。
在这里插入图片描述
时间复杂度应该是O(m+n)
在这里插入图片描述
事实证明,代码简洁不能说明什么 = =。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值