返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Grokking编码模式有哪些
  • 930
分享到

Grokking编码模式有哪些

2024-04-02 19:04:59 930人浏览 独家记忆
摘要

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

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

1.推拉窗

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

Grokking编码模式有哪些

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

  • 问题输入是线性数据结构,例如链表,数组或字符串

  • 要求您找到最长/最短的子字符串,子数组或所需的值

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

  • 大小为" K"的最大总和子数组(简单)

  • 带有" K"个不同字符的最长子字符串(中)

  • 字谜(硬)

2.两个指针或迭代器

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

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

Grokking编码模式有哪些

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

  • 在处理排序数组(或链接列表)并且需要找到一组满足某些约束的元素时,它将遇到一些问题。

  • 数组中的元素集是一对,三元组甚至是子数组

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

  • 平方排序数组(简单)

  • 总计为零的三元组(中)

  • 比较包含退格键的字符串(中)

3.快速和慢速指针

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

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

Grokking编码模式有哪些

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

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

  • 当您需要知道某个元素的位置或链表的总长度时。

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

  • 在某些情况下,您不应该使用"两指针"方法,例如在单链列表中,您不能向后移动。  何时使用快速和慢速模式的一个例子是,当您尝试确定链接列表是否是回文。

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

  • 链接列表周期(简单)

  • 回文链接列表(中)

  • 循环循环阵列(硬)

4.合并间隔

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

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

Grokking编码模式有哪些

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

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

  • 如果要求您仅以互斥间隔生成列表

  • 如果您听到术语"重叠间隔"。

合并间隔问题模式:

  • 区间相交(中)

  • 最大CPU负载(硬)

5.循环排序

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

Grokking编码模式有哪些

如何识别这种模式?

  • 它们将是涉及编号在给定范围内的排序数组的问题

  • 如果问题要求您在排序/旋转数组中查找缺失/重复/最小的数字

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

  • 查找丢失的号码(简单)

  • 查找最小的遗漏正数(中)

6.就地反转链表

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

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

Grokking编码模式有哪些

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

  • 如果要求您在不占用额外内存的情况下反向链接列表

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

  • 撤消子列表(中)

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

7.树BFS

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

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

如何识别Tree BFS模式:

  • 如果要求您逐级遍历一棵树(或逐级遍历)

具有Tree BFS模式的问题:

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

  • 锯齿形遍历(中)

8.树DFS

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

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

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

  • 决定是立即处理当前节点(预订),还是在处理两个子节点之间(按顺序),还是在处理两个子节点之后(后处理)。

  • 对当前节点的两个子节点进行两次递归调用以处理它们。

如何识别Tree DFS模式:

  • 如果系统要求您按顺序,预定或后置DFS遍历一棵树

  • 如果问题需要在节点更靠近叶子的位置进行搜索

具有Tree DFS模式的问题:

  • 路径数总和(中)

  • 求和的所有路径(中)

9.两堆

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

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

识别两个堆模式的方法:

  • 在诸如"优先级队列","计划"之类的情况下很有用

  • 如果问题表明您需要找到集合中最小/最大/中值的元素

  • 有时,对于解决具有二叉树数据结构的问题很有用

问题特点

  • 查找数字流的中位数(中)

10.子集

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

该模式如下所示:

给定一组[1、5、3]

  • 从一个空集开始:[[]]

  • 将第一个数字(1)添加到所有现有子集以创建新的子集:[[],[1]];

  • 将第二个数字(5)添加到所有现有子集:[[],[1],[5],[1,5]];

  • 将第三个数字(3)添加到所有现有子集:[[],[1],[5],[1,5],[3],[1,3],[5,3],[1, 5,3]]。

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

Grokking编码模式有哪些

如何识别子集模式:

  • 您需要查找给定集合的组合或排列的问题

具有子集模式的问题:

  • 重复子集(简单)

  • 更改大小写的字符串排列(中)

11.修改后的二进制搜索

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

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

  • 首先,找到开始和结束的中间位置。 查找中间值的简单方法是:middle =(start +  end)/2。但这很有可能产生整数溢出,因此建议将中间值表示为:Middle = start +(end-start) / 2

  • 如果键等于索引中间的数字,则返回中间

  • 如果"键"不等于中间索引:

  • 检查键

  • 检查key> arr [middle]。 如果减少,则搜索结束=中间+1

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

Grokking编码模式有哪些

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

  • 与订单无关的二进制搜索(简单)

  • 在排序的无限数组中搜索

12.前K个元素

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

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

  • 根据问题将" K"元素插入最小堆或最大堆。

  • 遍历剩余的数字,如果发现一个大于堆中数字的数字,则删除该数字并插入较大的数字。

Grokking编码模式有哪些

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

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

  • 如果系统要求您查找给定集合中顶部/最小/频繁的" K"元素

  • 如果系统要求您对数组进行排序以查找确切的元素

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

  • 前" K"个数字(简单)

  • 前" K"个常见数字(中)

13. K-way合并

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

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

Grokking编码模式有哪些

该模式如下所示:

  • 将每个数组的第一个元素插入最小堆中。

  • 之后,从堆中取出最小的(顶部)元素并将其添加到合并列表中。

  • 从堆中删除最小的元素后,将相同列表的下一个元素插入堆中。

  • 重复步骤2和3,以按排序顺序填充合并列表。

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

  • 该问题将出现排序的数组,列表或矩阵

  • 如果问题要求您合并排序列表,请在排序列表中找到最小的元素。

K-way合并模式的问题:

  • 合并K个排序列表(中)

  • K对最大和(硬)

14.拓扑排序

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

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

该模式如下所示:

  • 初始化a)使用HashMap将图存储在邻接列表中b)要查找所有源,请使用HashMap保持度数

  • 构建图并找到所有顶点的度数a)从输入中构建图并填充度数HashMap。

  • 查找所有源a)所有度数为" 0"的顶点将作为源,并存储在队列中。

  • Sorta)对于每个来源,请执行以下操作:—i)将其添加到排序列表中。 — ii)从图中获取其所有子级。 — iii)将每个孩子的度数减1。—  iv)如果一个孩子的度数变为" 0",则将其添加到源队列中。b)重复(a),直到源队列为空。

Grokking编码模式有哪些

如何识别拓扑排序模式:

  • 该问题将处理没有定向周期的图

  • 如果系统要求您按排序顺序更新所有对象

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

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

  • 任务计划(中)

  • 最小树高(硬)

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

--结束END--

本文标题: Grokking编码模式有哪些

本文链接: https://lsjlt.com/news/85010.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Grokking编码模式有哪些
    本篇内容主要讲解“Grokking编码模式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Grokking编码模式有哪些”吧!1.推拉窗滑动窗口模式用于对给...
    99+
    2024-04-02
  • vim编辑器模式有哪些
    vim编辑器有以下几种模式:1.命令模式(Command Mode):当你打开vim时,默认进入的就是命令模式。在该模式下,你可以输...
    99+
    2023-08-12
    vim
  • python语言的编程模式有哪些
    python语言的编程模式分为交互式编程和脚本式编程两种交互式编程交互式编程是指直接在终端中运行解释器,而不使用文件名的方式来执行文件,即读取通过输入的内容,执行输入的指令,然后打印执行结果。脚本式编程脚本式编程是通过脚本参数调用解释器执行...
    99+
    2024-04-02
  • linux中vim的编辑模式有哪些
    Vim在Linux中有以下几种编辑模式:1. 命令模式(Command Mode):在该模式下,可以输入Vim的命令,如保存文件、退...
    99+
    2023-08-11
    linux vim
  • WCF模式有哪些
    本篇内容介绍了“WCF模式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!单调和单例模式体现了两种极端的远程对象激活方式,而CAO则是一...
    99+
    2023-06-17
  • RabbitMQ有哪些模式
    本篇内容介绍了“RabbitMQ有哪些模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!RabbitMQ是AMQP的一个典型实现,它消息发布...
    99+
    2023-07-02
  • java中的编码转化方式有哪些
    这篇文章主要介绍“java中的编码转化方式有哪些”,在日常操作中,相信很多人在java中的编码转化方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中的编码转化方式有哪些”的疑惑有所帮助!接下来...
    99+
    2023-06-19
  • JAVA实现Base64编码的方式有哪些
    本篇内容主要讲解“JAVA实现Base64编码的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA实现Base64编码的方式有哪些”吧!定义: 二进制文件可视化Base64 是一种...
    99+
    2023-07-02
  • go实现base64编码的方式有哪些
    本篇内容主要讲解“go实现base64编码的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go实现base64编码的方式有哪些”吧!go的encoding/base64有四种编码方式:...
    99+
    2023-07-05
  • vue-roter有哪些模式
    本篇内容主要讲解“vue-roter有哪些模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue-roter有哪些模式”吧! vu...
    99+
    2024-04-02
  • sql_mode的模式有哪些
    这篇文章主要介绍“sql_mode的模式有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“sql_mode的模式有哪些”文章能帮助大家解决问题。 ...
    99+
    2023-03-20
    sql_mode
  • js对url进行编码解码的方式有哪些
    使用encodeURIComponent()和decodeURIComponent()函数: // 编码 var encoded...
    99+
    2024-03-08
    JS
  • Pandas进行数据编码的方式有哪些
    这篇文章主要介绍“Pandas进行数据编码的方式有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Pandas进行数据编码的方式有哪些”文章能帮助大家解决问题。最近在知乎上看到这样一个问题为了方便...
    99+
    2023-06-30
  • java设计模式有哪些
    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 总体来说设计模式分为三大类23种:创建型模式,共五种:工厂方...
    99+
    2015-05-18
    java 设计模式
  • TypeScript设计模式有哪些
    这篇文章主要讲解了“TypeScript设计模式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“TypeScript设计模式有哪些”吧!设计模式是可以帮...
    99+
    2024-04-02
  • React路由模式有哪些
    今天小编给大家分享一下React路由模式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2024-04-02
  • linux网络模式有哪些
    linux中的网络模式有:1.桥接模式,将主机网卡与虚拟机的虚拟网卡利用虚拟网桥进行通信;2.NAT模式,虚拟NAT设备或虚拟DHCP服务器实现的虚拟机联网;3.仅主机模式,只能访问主机及使用指定网卡虚拟机的网络模式;linux中的网络模式...
    99+
    2024-04-02
  • java单例模式有哪些
    java中的单例模式有:1.懒汉式单例;2.饿汉式单例;3.登记式单例;java中的单例模式有以下几种懒汉式单例java中懒汉式单例是指单例类在第一次调用时进行实例化,不存在多线程同步问题,可以避免synchronized所造成的性能问题。...
    99+
    2024-04-02
  • java工厂模式有哪些
    java中的工厂模式有:1.简单工厂模式;2.工厂方法模式;3.抽象工厂模式;java中的工厂模式有以下几种简单工厂模式java中简单工厂模式是指通过定义一个工厂类来创建其他类的实例,且被创建的实例都具有具有共同的父类。工厂方法模式java...
    99+
    2024-04-02
  • java架构模式有哪些
    java中架构模式有:1.分层模式;2.服务器模式;3.代理模式;4.控制器模式;java中架构模式有以下几种分层模式java中分层模式是指多层体系架构模式,常用于构造一个可以分解为子任务组的程序,且每个子任务都处于一个特定的抽象级别,每个...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作