合并两个有序数组
来源:1-4 如何回答算法面试问题
慕粉3884565
2020-06-30
我对这个没啥思路求老师讲解下他的意思是从m开始,第三个之后元素不要然后将num2中的前三个添加进去,是吧?对这个没思路,不知道怎么做
写回答
2回答
-
因为题目上说将nums2合并到nums1中,所以最后我们返回的是数组nums1,又nums1的空间是>=nums2的空间的,因此我们不必担心空间不足的问题。因此我们可以设定2个指针p1和p2分贝指向nums1 和nums2的有效元素的最后一个位置,分别从后向前遍历,依次比较大小,将大的数填入nums1的 m + n - 1处的位置,如果nums1的指针先遍历完(p1 = - 1)则将剩下的nums2依次填入nums1的剩余位置,如果p2先遍历完,由于我们是在nums1中操作的,则直接返回nums1即可。
112020-07-14 -
liuyubobobo
2020-07-01
简单来说,nums1 中有 m 个有效元素,m + n 个空间; nums2 中有 n 个有效元素。让你将所有的 m + n 个有效元素都放到 nums1 中(因为 nums1 中给了 m + n 个空间),之后,nums1 中的所有元素是有序的。
这个问题是典型的归并排序算法中的归并过程(merge),建议复习一下归并排序算法。
我的参考代码:https://github.com/liuyubobobo/Play-Leetcode/tree/master/0088-Merge-Sorted-Array/cpp-0088
main 的思路能让你理解这个问题到底要干什么;
main2 是复杂度最优的解法,其实就是归并排序算法中的归并过程。
继续加油!:)
012020-07-01
相似问题