给定两个排序后的数组 A 和 B 合并。实现的方法有很多,也是非常常见的操作数组题目。
一、题目
给定两个排序后的数组 A 和 B ,其中 A 的末端有足够的缓冲空间容纳 B 。 编写一个方法,将 B 合并入 A 并排序。
初始化 A 和 B 的元素数量分别为 m 和 n 。
示例:
1 | |
二、思考
- 直接合并后排序。
c++实现:使用c++的 sort 实现排序,而 sort 排序方法是类似于快排的方法,时间复杂度为 n*log2(n)c实现:使用冒泡排序或者快速排序。
- 双指针
- 对两个数组的元素从第一个开始比较,比较结果添加至新的数组中。
- 由于需要新的数组,所以要开辟新的数组空间。
- 逆双指针
- 不需要开辟新的空间。
- 对两个数组从后往前比较,将最大的数依次放置最长数组的末尾。
三、代码实现
直接合并后排序
1 | |
1 | |
- 时间复杂度:O((m+n)log(m+n)))
- 空间复杂度:O(log(m+n)))
双指针
1 | |
- 时间复杂度:O(m+n)
- 空间复杂度:O(m+n)
逆双指针
1 | |
- 时间复杂度:O(m+n)
- 空间复杂度:O(1)