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

快速和慢速指针方法也被称为 Hare & Tortoise 算法,该算法会使用两个在数组(或序列/链表)中以不同速度移动的指针。该方法在处理循环链表或数组时非常有用。

通过以不同的速度进行移动(比如在一个循环链表中),该算法证明这两个指针注定会相遇。只要这两个指针在同一个循环中,快速指针就会追赶上慢速指针。

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

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

如何判别使用快速和慢速模式的时机?

处理链表或数组中的循环的问题

当你需要知道特定元素的位置或链表的总长度时

何时应该优先选择这种方法,而不是上面提到的二指针方法?

有些情况不适合使用二指针方法,比如在不能反向移动的单链接链表中。使用快速和慢速模式的一个案例是当你想要确定一个链表是否为回文(palindrome)时。

下面是一些满足快速和慢速指针模式的问题:

链表循环(简单)

回文链表(中等)

环形数组中的循环(困难)

4.合并区间

合并区间模式是一种处理重叠区间的有效技术。在很多涉及区间的问题中,你既需要找到重叠的区间,也需要在这些区间重叠时合并它们。该模式的工作方式为:

给定两个区间(a 和 b),这两个区间有 6 种不同的互相关联的方式:

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

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

理解并识别这六种情况有助于你求解范围广泛的问题,从插入区间到优化区间合并等。

那么如何确定何时该使用合并区间模式呢?

如果你被要求得到一个仅含互斥区间的列表

如果你听到了术语「重叠区间(overlapping intervals)」

合并区间模式的问题:

区间交叉(中等)

最大 CPU 负载(困难)

5. 循环排序

这一模式描述了一种有趣的方法,处理的是涉及包含给定范围内数值的数组的问题。循环排序模式一次会在数组上迭代一个数值,如果所迭代的当前数值不在正确的索引处,就将其与其正确索引处的数值交换。你可以尝试替换其正确索引处的数值,但这会带来 O(n^2) 的复杂度,这不是最优的,因此要用循环排序模式。

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

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

如何识别这种模式?

涉及数值在给定范围内的排序数组的问题

如果问题要求你在一个排序/旋转的数组中找到缺失值/重复值/最小值

循环排序模式的问题:

找到缺失值(简单)

找到最小的缺失的正数值(中等)

6.原地反转链表

在很多问题中,你可能会被要求反转一个链表中一组节点之间的链接。通常而言,你需要原地完成这一任务,即使用已有的节点对象且不占用额外的内存。这就是这个模式的用武之地。该模式会从一个指向链表头的变量(current)开始一次反转一个节点,然后一个变量(previous)将指向已经处理过的前一个节点。以锁步的方式,在移动到下一个节点之前将其指向前一个节点,可实现对当前节点的反转。另外,也将更新变量「previous」,使其总是指向已经处理过的前一个节点。

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

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

如何识别使用该模式的时机:

如果你被要求在不使用额外内存的前提下反转一个链表

原地反转链表模式的问题:

反转一个子列表(中等)

反转每个 K 个元素的子列表(中等)

7.树的宽度优先搜索(Tree BFS)

该模式基于宽度优先搜索(BFS)技术,可遍历一个树并使用一个队列来跟踪一个层级的所有节点,之后再跳转到下一个层级。任何涉及到以逐层级方式遍历树的问题都可以使用这种方法有效解决。

Tree BFS 模式的工作方式是:将根节点推至队列,然后连续迭代知道队列为空。在每次迭代中,我们移除队列头部的节点并「访问」该节点。在移除了队列中的每个节点之后,我们还将其所有子节点插入到队列中。

如何识别 Tree BFS 模式:

如果你被要求以逐层级方式遍历(或按层级顺序遍历)一个树

Tree BFS 模式的问题:

二叉树层级顺序遍历(简单)

之字型遍历(Zigzag Traversal)(中等)

8.树的深度优先搜索(Tree DFS)

Tree DFS 是基于深度优先搜索(DFS)技术来遍历树。

你可以使用递归(或该迭代方法的技术栈)来在遍历期间保持对所有之前的(父)节点的跟踪。

Tree DFS 模式的工作方式是从树的根部开始,如果这个节点不是一个叶节点,则需要做三件事:

1.决定现在是处理当前的节点(pre-order),或是在处理两个子节点之间(in-order),还是在处理两个子节点之后(post-order)

为当前节点的两个子节点执行两次递归调用以处理它们

如何识别 Tree DFS 模式:

如果你被要求用 in-order、pre-order 或 post-order DFS 来遍历一个树

如果问题需要搜索其中节点更接近叶节点的东西

Tree DFS 模式的问题:

路径数量之和(中等)

一个和的所有路径(中等)

9. Two Heaps

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

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