Grokking编码模式有哪些

发布时间:2021-11-03 13:47:47 作者:iii
来源:亿速云 阅读:191

本篇内容主要讲解“Grokking编码模式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Grokking编码模式有哪些”吧!

1.推拉窗

滑动窗口模式用于对给定数组或链接列表的特定窗口大小执行所需的操作,例如查找包含全1的最长子数组。  滑动窗口从第一个元素开始,一直向右移动一个元素,并根据要解决的问题调整窗口的长度。  在某些情况下,窗口大小保持不变,而在其他情况下,窗口大小会增大或缩小。

Grokking编码模式有哪些

以下是一些可以确定给定问题可能需要滑动窗口的方式:

您将滑动窗口模式用于以下常见问题:

2.两个指针或迭代器

"两个指针"是一种模式,其中两个指针串联遍历数据结构,直到其中一个或两个指针都达到特定条件为止。 在排序数组或链表中搜索对时,两个指针通常很有用;  例如,当您必须将数组的每个元素与其他元素进行比较时。

需要两个指针,因为仅使用指针,您将不得不不断地循环遍历数组以找到答案。  用单个迭代器来回进行此操作对于时间和空间复杂度而言效率低下-一种称为渐近分析的概念。  尽管使用1个指针的强力或朴素的解决方案将起作用,但它会产生类似于O(n²)的线。  在许多情况下,两个指针可以帮助您找到具有更好空间或运行时复杂性的解决方案。

Grokking编码模式有哪些

确定何时使用"两指针"方法的方法:

以下是具有两个指针模式的一些问题:

3.快速和慢速指针

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

通过以不同的速度移动(例如,在循环链表中),该算法证明两个指针必然会合。 一旦两个指针都处于循环循环中,快速指针应捕获慢速指针。

Grokking编码模式有哪些

您如何确定何时使用快速和慢速模式?

什么时候应该在上面提到的"两指针"方法上使用它?

具有快速和慢速指针模式的问题:

4.合并间隔

合并间隔模式是处理重叠间隔的有效技术。 在很多涉及间隔的问题中,您需要找到重叠的间隔,或者如果它们重叠,则需要合并间隔。 该模式如下所示:

给定两个间隔(" a"和" b"),这两个间隔可以通过六种不同的方式相互关联:

Grokking编码模式有哪些

了解和认识这六个情况将帮助您解决从插入间隔到优化间隔合并的各种问题。

您如何确定何时使用"合并间隔"模式?

合并间隔问题模式:

5.循环排序

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

Grokking编码模式有哪些

如何识别这种模式?

具有循环排序模式的问题:

6.就地反转链表

在很多问题中,可能会要求您反向链接列表的一组节点之间的链接。 通常,约束是您需要就地执行此操作,即使用现有的节点对象并且不使用额外的内存。  这是上面提到的模式有用的地方。

此模式一次反转一个节点,其中一个变量(当前)指向链接列表的开头,而一个变量(上一个)将指向您已处理的上一个节点。  以锁定步骤的方式,您可以通过将当前节点指向上一个节点来反转该节点,然后再移动到下一个节点。 另外,您将更新变量"  previous"以始终指向您已处理的上一个节点。

Grokking编码模式有哪些

如何确定何时使用此模式:

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

7.树BFS

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

Tree BFS模式的工作原理是将根节点推送到队列,然后不断迭代直到队列为空。 对于每次迭代,我们都删除队列开头的节点,然后"访问"该节点。  从队列中删除每个节点后,我们还将其所有子节点插入队列。

如何识别Tree BFS模式:

具有Tree BFS模式的问题:

8.树DFS

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

您可以使用递归(或使用堆栈进行迭代)在遍历时跟踪所有先前的(父)节点。

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

如何识别Tree DFS模式:

具有Tree DFS模式的问题:

9.两堆

在许多问题中,我们被赋予一组元素,以便可以将它们分为两部分。 为了解决该问题,我们有兴趣知道一个部分中的最小元素,而另一部分中的最大元素。  这种模式是解决此类问题的有效方法。

该模式使用两个堆; 最小堆可查找最小元素,最大堆可查找最大元素。  该模式通过将数字的前半部分存储在最大堆中而起作用,这是因为您要在前半部分中找到最大的数字。  然后,您想将数字的后半部分存储在最小堆中,因为您希望在后半部分找到最小的数字。 在任何时候,都可以从两个堆的顶部元素计算当前数字列表的中位数。

识别两个堆模式的方法:

问题特点

10.子集

大量的编码面试问题涉及处理给定元素集的置换和组合。 模式子集描述了一种有效的广度优先搜索(BFS)方法来处理所有这些问题。

该模式如下所示:

给定一组[1、5、3]

这是子集模式的直观表示:

Grokking编码模式有哪些

如何识别子集模式:

具有子集模式的问题:

11.修改后的二进制搜索

每当给您排序数组,链接列表或矩阵,并且要求您查找某个元素时,可以使用的最佳算法是二进制搜索。  此模式描述了一种有效的方法来处理涉及二进制搜索的所有问题。

对于升序设置,模式如下所示:

这是"修改后的二进制搜索"模式的直观表示:

Grokking编码模式有哪些

具有修改后的二进制搜索模式的问题:

12.前K个元素

任何要求我们在给定集合中找到顶部/最小/频率最高的" K"元素的问题都属于此模式。

跟踪" K"元素的最佳数据结构是堆。 此模式将利用堆来解决一组给定元素中一次处理" K"元素的多个问题。 该模式如下所示:

Grokking编码模式有哪些

不需要排序算法,因为堆将为您跟踪元素。

如何识别最主要的" K"元素模式:

出现" K"元素排行榜前的问题:

13. K-way合并

K-way Merge可帮助您解决涉及一组排序数组的问题。

只要获得" K"个排序数组,就可以使用堆来有效地对所有数组的所有元素进行排序遍历。 您可以将每个数组中的最小元素推入最小堆中,以获取整体最小值。  获得总最小值后,将下一个元素从同一数组推到堆中。 然后,重复此过程以对所有元素进行排序遍历。

Grokking编码模式有哪些

该模式如下所示:

如何识别K-way合并模式:

K-way合并模式的问题:

14.拓扑排序

拓扑排序用于查找相互依赖的元素的线性顺序。 例如,如果事件" B"依赖于事件" A",则按照拓扑顺序," A"排在" B"之前。

该模式定义了一种简单的方法,可以理解用于对一组元素进行拓扑排序的技术。

该模式如下所示:

Grokking编码模式有哪些

如何识别拓扑排序模式:

具有拓扑排序模式的问题:

到此,相信大家对“Grokking编码模式有哪些”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. Eclipse编码设置技巧有哪些
  2. Python 编码规范有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:如何使用C#读取文件更有效率

下一篇:如何使用Hibernate 3二级缓存

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》