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)
事实证明,代码简洁不能说明什么 = =。