题目:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组,注意:初始化 nums1 和 nums2 的元素数量分别为 m 和 n,但 nums1 的实际长度为 m+n 即可以容纳下两个数组的所有值。本篇经验将分享类似插入排序的合并算法和类似归并排序的合并函数算法,并对比两者的复杂度。
工具/原料
1
Eclipse
2
JDK1.8
方法/步骤
1
实现类似插入排序的合并算法,其原理是:嵌套循环两个数组,对于第二个数组中的每一个值,在第一个数组中移动获取其位置,并放到该位置上即可。
2
编写并运行测试方法,观察控制台输出,符合预期,测试通过。
3
平台提交该算法,测试通过,该算法时间复杂度为 O(n*m) , 其中 n, m 为两个数组的实际元素数量;空间复杂度为 O(1) 。
4
实现类似归并排序的合并函数算法,算法思想:因为两个数组有序,所以声明两个数组索引指针,分别遍历两个数组,比较值的大小,将较小的值放到目标数组中,继续遍历比较即可。
5
编写并运行测试方法,观察控制台输出,符合预期,本地测试通过。
6
平台提交算法,测试通过,该算法的时间复杂度为 O(m + n) 其中,m, n分别为两个数组有效的元素数量,空间复杂度为 O(m) 。
注意事项
本篇经验的两个算法的时间空间复杂度的差异,提现了空间换时间的算法思想