刷题方法:多路归并
Posted MISAYAONE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题方法:多路归并相关的知识,希望对你有一定的参考价值。
理解多路归并和归并的区别,其实也没有区别:
1,2,3,4,5
1,3,5
两个增序数组合并,归并排序,两个指针分别指向两个数组的头结点,对比遍历即可。
但如果是多行数组呢?
1,2,3,5,6
2,3,4,4,5
3,4,4,4,7
1,1,2,4
....
它们的合并显然不能用以上方法来完成。这里就要用到多路归并了。
多路归并的思想:每个排序数组的第一个元素导入堆中,初始化好,当弹出元素属于第 i 个数组的时候,压入第 i 个数组的下一个元素。
这里要用到 python 中的最小堆。heapq,记住这三个核心操作即可。
(核心:以数组元素的第一个值大小来组建堆,因此后面的堆中存储的元素为(sum,i,j))
import heapq
a = [1,2,3,2,4,2,5,6]
#初始化最小堆
heapq.heapify(a)
#pop 最小元素
heapq.heappop()
#push 元素
heapq.heappush(a, 2)
例子:
以上是关于刷题方法:多路归并的主要内容,如果未能解决你的问题,请参考以下文章