一尘不染

可以在O(n)中将两个排序后的数组合并为第三个数组吗?

algorithm

我正在尝试将排序后的数组合并为第三个排序后的数组,但是我看不到任何方法可以做到O(n),仅在O(n*n).A中,我错了吗?有办法做到O(n)吗?

编辑:

其实问题有点不同:

我有2个排序的跳过列表,我想将它们合并到一个新的排序的跳过列表中,而无需更改输入(即两个跳过列表)。

我在想:

  • 将列表放在两个数组中

  • 使用MergeSort合并两个数组(这需要O(n)运行时)

  • 从排序后的数组中构建一个新的跳过列表…。//我不确定其运行时

有任何想法吗 ?

问候


阅读 250

收藏
2020-07-28

共1个答案

一尘不染

您将保持两个循环,并在将每个“边”的值拉入第三个数组时在每个循环之间进行切换。如果arr1的值小于当前的arr2,则将arr1的值填充到arr3中,直到达到相等或变大,然后翻转过程并开始将值从arr2中拉出。然后只是不断地来回弹跳,直到两个源数组中都没有剩余。

得出O(n + m),又称O(n)。

2020-07-28