正在准备面试?你需要了解这14种编程模式 (4)

当你被给出了 K 个经过排序的数组时,你可以使用 Heap 来有效地执行所有数组的所有元素的排序遍历。你可以将每个数组的最小元素推送至 Min Heap 以获得整体最小值。在获得了整体最小值后,将来自同一个数组的下一个元素推送至 heap。然后,重复这一过程以得到所有元素的排序遍历结果。

正在准备面试?你需要了解这14种编程模式

准备程序员面试?你需要了解这 14 种编程面试模式

该模式看起来像这样:

1.将每个数组的第一个元素插入 Min Heap

2.之后,从该 Heap 取出最小(顶部的)元素,将其加入到合并的列表。

3.在从 Heap 移除了最小的元素之后,将同一列表的下一个元素插入该 Heap

4.重复步骤 2 和 3,以排序的顺序填充合并的列表

如何识别 K 路合并模式:

具有排序数组、列表或矩阵的问题

如果问题要求你合并排序的列表,找到一个排序列表中的最小元素

K 路合并模式的问题:

合并 K 个排序的列表(中等)

找到和最大的 K 个配对(困难)

14. 拓扑排序

拓扑排序可用于寻找互相依赖的元素的线性顺序。比如,如果事件 B 依赖于事件 A,那么 A 在拓扑排序时位于 B 之前。

这个模式定义了一种简单方法来理解执行一组元素的拓扑排序的技术。

该模式看起来是这样的:

1.初始化。a)使用 HashMap 将图(graph)存储到邻接的列表中;b)为了查找所有源,使用 HashMap 记录 in-degree 的数量

2.构建图并找到所有顶点的 in-degree。a)根据输入构建图并填充 in-degree HashMap

3.寻找所有的源。a)所有 in-degree 为 0 的顶点都是源,并会被存入一个队列

4.排序。a)对于每个源,执行以下操作:i)将其加入到排序的列表;ii)根据图获取其所有子节点;iii)将每个子节点的 in-degree 减少 1;iv)如果一个子节点的 in-degree 变为 0,将其加入到源队列。b)重复 (a),直到源队列为空。

正在准备面试?你需要了解这14种编程模式

准备程序员面试?你需要了解这 14 种编程面试模式

如何识别拓扑排序模式:

处理无向有环图的问题

如果你被要求以排序顺序更新所有对象

如果你有一类遵循特定顺序的对象

拓扑排序模式的问题:

任务调度(中等)

一个树的最小高度

接下来?

在 LeetCode 上殚精竭虑?学习过这 14 种模式之后,你能对各种问题的解决方案有一个更全面的认知。
现在都说互联网寒冬,其实只要自身技术能力够强,咱们就不怕!我这边专门针对Android开发工程师整理了一套【Android进阶学习视频】、【全套Android面试秘籍】、【Android知识点PDF】。如有需要获取资料文档的朋友,可以点击我的GitHub免费获取!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpydws.html