【你问我答】用2种方法实现k路归并

问题描述:

用2种方法实现k路归并。

回答有奖:

选取一位认真回答问题的牛友,赠送200牛币!
▶回答尽量有自己的思考,不要单纯的只是复制粘贴定理定义,或者他人blog哦~

你问我答问题汇总:点击进入
关注你问我答栏目:点击关注

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个面试中真实遇到的问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!

#你问我答##算法工程师#
全部评论
1. 循环遍历  :首先,我们比较所有k个数组的头一个元素,找到最小的那一个,然后取出来。我们在该最小元素所在的数组取下一个元素,然后重复前面的过程去找最小的那个。这样依次循环直到找到所有的元素。 2. 最小堆k路归并排序    利用最小堆的特性,首先从k路序列中都取一个元素出来,因为所有的都是已经按照从小到大排序,不需要考虑其他的。每个序列里取出来的肯定是他们这个序列里最小的。那么要做的就是在这些最小元素里找到全局最小的那个。    在取出当前最小元素后要接着取这个元素所在序列的后面一个元素。如果这个序列后面没有元素了,该怎么办呢?如果还有的话,该怎么调整? 1. 假定在处理元素的过程中,某个序列的元素取光了。可以在开始的时候针对所有序列的最后都加一个表示无穷大的数值。这样如果取完这个序列之后可以保证它后续肯定不会被选择到。 2. 将该元素用堆最后的元素替换,然后调整堆的属性并将堆的大小减1。这个大小为k的堆慢慢会变成k-1, k-2...1这些个长度的堆。一直到这些堆里序列的元素处理完。
点赞
送花
回复
分享
发布于 2020-03-10 17:38

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务