88. Merge Sorted Array

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:

You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.

把nums2加到nums1中,还要原地算法。

先把nums2直接加到nums1后面,然后排序。

Input: [0]0[1]1
Output: [0,1]
Expected: [1]

题意理解错了,要考虑m和n,不是数组的所有元素都用上了。

用append得到的是None


a+b倒是可以直接接在后面,但是,需要的是原地算法,在nums1中进行改变

用sorted也不管用。

如果直接往nums1中的每个位置放置值,肯定可行,但是,可能放置数字之后,就覆盖了某些还没进行比较的数字,这个问题如何解决?

不能直接加在nums1后面,因为nums1的长度大于等于m+n,后面是一堆0.

先把nums2放到nums1[m:]中?

然后排序。


sort的复杂度分析

Timsort算法



什么是Timsort,请看 wiki的解释:http://en.wikipedia.org/wiki/Timsort

另外,国内有一个文档,适当翻译: Timsort原理介绍 - Data Analytics - 博客频道 - CSDN.NET
这里截取一个不同排序算法比较的图示,就明白sorted的威力了。


作者:挖矿老司机
链接:https://www.zhihu.com/question/36280272/answer/133732536
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



discuss:

从后向前,给每个位子找应该放的数字。


为啥去掉最后一个while还是AC?因为如果是nums1还剩下,那么剩下的这些还是被放到原来的位置

同时,m=0的情况也包含在里面了。


时间复杂度:O(m+n)

空间复杂度O(1)

也可以写成一个循环,其实质是一致的



猜你喜欢

转载自blog.csdn.net/zhangdamengcsdn/article/details/79871930