合并两个有序数组

来源:1-4 如何回答算法面试问题

慕粉3884565

2020-06-30

http://img.mukewang.com/szimg/5efb579f0963023914490633.jpg

我对这个没啥思路求老师讲解下他的意思是从m开始,第三个之后元素不要然后将num2中的前三个添加进去,是吧?对这个没思路,不知道怎么做

写回答

2回答

v不离不弃v

2020-07-01

因为题目上说将nums2合并到nums1中,所以最后我们返回的是数组nums1,又nums1的空间是>=nums2的空间的,因此我们不必担心空间不足的问题。因此我们可以设定2个指针p1和p2分贝指向nums1 和nums2的有效元素的最后一个位置,分别从后向前遍历,依次比较大小,将大的数填入nums1的 m + n - 1处的位置,如果nums1的指针先遍历完(p1 = - 1)则将剩下的nums2依次填入nums1的剩余位置,如果p2先遍历完,由于我们是在nums1中操作的,则直接返回nums1即可。

1
1
慕粉3884565
非常感谢!
2020-07-14
共1条回复

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 是复杂度最优的解法,其实就是归并排序算法中的归并过程。


继续加油!:)

0
1
慕粉3884565
这个排序没学习过学习下
2020-07-01
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7410 学习 · 1150 问题

查看课程