diff --git a/.DS_Store b/.DS_Store index cb80475d..4cb2147e 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index e64fc393..654feed9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules .idea -website/.vuepress/dist \ No newline at end of file +website/.vuepress/dist +learning \ No newline at end of file diff --git a/1.md b/1.md new file mode 100644 index 00000000..22ee39cf --- /dev/null +++ b/1.md @@ -0,0 +1,32 @@ +##### [点击下载本项目全部内容 提取码:【8f8b】 包括:1、我写的图解算法题典 2、千本开源电子书 3、百张思维导图 4、BAT/TMD 大厂面经 (如果链接失效,上方扫码回复即可)](https://www.geekxh.com/github_click.html?6072) + +#### 本项目还包括 I(支持下载): + +> 千本开源电子书覆盖了你在IT行业发展可以用到的大部分资料,百张思维导图按照专题对各类计算机知识进行了整合。**由于文件过大,建议通过下方扫码,回复【999】获取** + +- 📚 [一千本开源电子书](https://github.com/geekxh/hello-algorithm/tree/master/%E6%B8%85%E6%99%B0%E7%89%88%E7%94%B5%E5%AD%90%E4%B9%A61000%E6%9C%AC) +- 🐒 [百张思维导图集锦](https://github.com/geekxh/hello-algorithm/tree/master/%E8%B6%85%E6%B8%85%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE100%E5%BC%A0) + +#### 本项目还包括 II(支持下载): + +> 大厂面经汇总覆盖了阿里、京东、华为、字节、滴滴、百度、美团、腾讯 等公司的面试题,按照 公司/专题 两个维度对面试题进行了整合。**由于文件过大,建议通过下方扫码,回复【面经】获取。** + +
+
+ +
+
+ +### 使用指南 + +1、因为本教程完全免费,但现在被一些不良商家拿去卖钱, 所以我需要你先帮我点一个 star ,助力原创,防止更多人上当受骗,也顺便支持我一下。 + +2、算法训练包括三部分:① 算法知识基础 ② 图解算法题典 ③ 算法知识扩展 + +3、如果是以面试为目的,可以直接对第二部分进行学习。如果基础薄弱,建议从第一部分进行学习。第三部分为专题学习,包含大部分算法资料。 + +4、对于其中题目有疑惑,可以加入我们的万人刷题群,群里可内推 BAT。扫上面那只熊,回复【进群】即可。 + +5、当然,也许你就想加我的私人微信: [个人名片](https://www.geekxh.com/contact.jpeg) + +PS:该项目包括了你在 IT 行业发展可以用到的绝大部分资料。但我希望大家不要当收藏党,找到适合自己的才重要。 \ No newline at end of file diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/1_\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/1_\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266/README.md" new file mode 100644 index 00000000..85f23e32 --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/1_\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266/README.md" @@ -0,0 +1,642 @@ +[下载 XMIND + PDF 完整版](https://www.cxyhub.com/all/programming/12460/) + +知识框架梳理(下面的内容是直接导出的,前后顺序可能有点混乱,不妨碍学习。若想保证最好的学习效果,直接下载上方 xmind 体验会更好): + +``` +B树 + 平衡的多叉树 + 性质 + 根结点至少有两个孩子 + 每个非根结点至少有M/2(上取整)个孩子,至多有M个孩子 + 每个非根结点至少有M/2-1(上取整)个关键字,并且以升序排列 + key[i]和key[i+1]之间的孩子结点的值介于key[i]、key[i+1]之间 + 所有的叶子结点都在同一层 + B+树 + 性质 + 其定义基本与B树相同 + 非叶子节点的子树指针与关键字个数相同 + 非叶子结点的子树指针P[i],指向关键字值属于[k[i],k[i+1])的子树 + 为所有叶子节点增加一个链指针 + 所有关键字都在叶子节点出现 + 搜索 + 和B树基本相同 + 特性 + 所有关键字都出现在叶子节点的链表中(稠密索引),且链表中的关键字恰好是有序的 + 不可能在叶子结点命中 + 非叶子节点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层 + 更适合文件索引系统 + B*树 + 在B+树的非根和非叶子结点之间再增加指向兄弟的指针 + 子主题 2 + +哈希 + 搜索(检索) + 在数据元素集合中查找是否存在关键字等于某个给定关键字数据元素的过程 + 结果 + 成功 + 失败 + 搜索结构 + 用于搜索的数据集合 + 搜索的环境 + 静态环境 + 在执行插入和删除等操作的前后搜索结构不会发生改变 + 动态环境 + 为保持较高的搜索效率,搜索结构在执行插入和删除等操作的前后将自动调整,结构可能会发生改变 + 查找 + 静态查找 + 顺序表 + 从前往后依次遍历O(n) + 有序顺序表 + 二分查找O(log(n)) + 索引顺序表 + 动态查找 + 二叉树结构 + 二叉排序树 + 平衡二叉树 + 树结构 + B树 + B+树 + 哈希查找 + 每个元素的关键码和结构中一个唯一的结存储位置相对应 + 散列方法 + 插入和查找数据利用哈希函数求出存储位置再存放或者查找 + 哈希冲突 + 对于两个数据Ki和Kj(i!=j),Ki!=Kj,但是有Hash(Ki)==Hash(Kj) + 散列函数 + 哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0-m-1之间 + 哈希函数计算出来的地址能均匀的分布在整个空间中 + 哈希函数应该比较简单 + 常见哈希函数 + 直接定址法 + 取关键字的某个线性函数为散列地址 + 优点:简单均匀 + 缺点:需要事先直到关键字的分布情况 + 使用场景:适合查找比较小且连续的情况 + 除留余数法 + 设散列中允许的地址数为m,取一个不大于m,但最接近或者等于m的质数p作为除数,按照哈希函数:Hash(key)=key%p,p<=m;将关键码转换成哈希地址 + 平方取中法 + 假设关键字是1234,平方就是1522756,再抽取中间的三位数227作为散列地址 + 折叠法 + 将关键字从左到右分成位数相等的几部分,然后将这几部分叠加求和,并按散列表长,取后几位作为散列地址 + 随机数法 + 选择一个随机函数,取关键字的随机函数值为它的哈希地址 + 数学分析法 + 设有n个d位数,每一位肯能有r种不同的符号,这r种不同的符号在各位上出现的频率不一定相同,可能在某些位上分布比较均匀,可将分布均匀的几位根据开散列的方式作为散列地址 + 散列冲突处理方法 + 闭散列法 + 一旦发生冲突,就去寻找下一个空的散列表地址,只要散列表足够大,空的散列地址总能知道 + 线性探查 + 插入时发现该位置的数据和要插入数据相等,不插入 + 产生冲突,依次查看其后的下一个桶,如果有空位置插入数据 + 二次探查 + 使用二次探查法,在表中寻找下一个空位置的公式是H(i)=(H0+i^2)%m,H(i)=(H0-i^2)%m + 当表的长度为质数且转载因子不超过0.5时,新的表项一定能插入 + 双散列法 + 需要两个散列函数,当一个发生冲突时,利用下一个散列函数计算偏移量 + 载荷因子 + a=填入表中的元素个数/散列表的长度 + 控制在0.7-0.8以下,超过0.8,查表时CPU缓存指数上升 + 开散列法 + 首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点组成一个向量,向量的元素个数与可能的桶数相同 + 布隆过滤器 + 当一个元素被加入集合时,通过k个散列函数将这个元素映射成一个位数组中的k个点,将它们置为1,检索时只要看是不是都是1,就可以,只要有一个零就不是,全是1,可能是 + +排序 + 概念 + 就是将一组杂乱无章的数据按照一定的规律(升序或降序)组织起来 + 数据表 + 待排序数据元素的有限集合 + 排序码 + 通常数据元素有多个属性域,其中有一个数据域可用来区分元素,作为排序依据,该域即为排序码 + 如果在数据表中各个元素的排序码互不相同,这种排序码称为主排序码 + 排序算法的稳定性 + 两个元素R[i]R[j],它们排序码K[i]==K[j],且在排序之前,元素R[i]在R[j]之前,元素在R[i]和R[j]的顺序不变 + 常见排序算法 + 插入排序 + 直接插入排序 + 插入到已排序序列中,先找位置,然后将位置之后得元素后移 + 稳定 + 希尔排序 + 缩小增量排序 + 选择排序 + 选择排序 + 每次把最小的元素换在最前面 + 锦标赛排序 + 一直两两比较找出获胜者,将这个不再比较,其他继续两两比较,取得获胜者,一直循环 + 不稳定 + 堆排序 + 升序创建大堆,否则创建小堆 + 不稳定 + 交换排序 + 冒泡排序 + 稳定 + 依次比较相邻两个元素,不满足条件交换 + 快速排序 + 取一个基准值将比它小得放在左侧,大的放在右侧。左右两部分递归取基准值继续分 + 归并排序 + 归并排序 + 将待排序的序列分成两个等长的子序列,然后将它们合并成一个序列 + 非比较排序 + 计数排序 + 基数排序 + +图 + 由顶点集合及顶点间关系组成的一种数据结构 + 顶点和边 + 顶点 + 图中结点称为结点 + 边 + 顶点与顶点之间有一条边 + 图的分类 + 有向图 + 在有向图中,顶点对是有序的是不同的两条边 + 无向图 + (x,y)(y,x)是一条边 + 完全图 + 在有n个顶点的无向图中,若有n*(n-1)/2条边,即任意两个两个顶点之间有且只有一条边 + 在n个顶点的有向图中,若有n*(n-1)条边,即任意两个顶点之间有且仅有方向相反的边 + 邻接结点 + 在无向图中G中,若(u,v)是E(G)中的一条边,则称u和v互为邻接顶点,并称(u,v)依附于顶点u和v + 在有向图G中,若是E(G)中的一条边,则称顶点u邻接到v,顶点v邻接自顶点u,并称边与顶点u和v相关联 + 顶点的度 + 与它相关联的边的条数 + 在有向图中,顶点的度等于该顶点的入度与出度之和,其中顶点v的入度是以v为终点的有向边的条数,记做indev(v)顶点v的出度是以v为起始点的有向边的条数记做outdev(v) + 无向图的度等于入度和出度 dev(v) = indev(v) = outdev(v) + 路径 + 在图G=(V,E)中,若从顶点vi出发有一组边使其可到达顶点vj,则称顶点vi到vj的顶点序列为从顶点vi到顶点vj的路径 + 权 + 边附带的数据信息 + 路径长度 + 对于不带权的图,一条边的路径长度是指该路径上的边的条数 + 对于带权的图,一条路径的长度是指一条路径的路径长度是指该路径上各个边权值的总和 + 简单路径与回路 + 如路径上各个顶点 均不重复,则称这样的路径是简单路径,若路径上第一个顶点v1和最后一个顶点vm重合,则称这样的路径为回路或环 + 子图 + 设图G={V,E}和图G1={V1.E1},若V1属于V且E1属于E,则称G1是G的子图 + 连通图 + 无向图中,两个顶点之间有路径就是连通的,任一对顶点之间都是连通的则称这个图是连通图 + 强连通图 + 在有向图中,任意一对顶点vi和vj之间都存在一条从vi到vj的路径,也存在一条从vj到vi的一条路径 + 生成树 + 一个连通图的最小连通子图称作该图的生成树,有n个顶点的连通图的生成树有n个顶点和n-1条边 + 图的存储结构 + 邻接矩阵 + 邻接表 + 无向图 + 有向图 + 图的遍历 + 深度优先 + 广度优先 + 连通分量 + 当无向图为非连通图时,从图中某一顶点出发,利用深度优先搜索或广度优先搜索算法无法遍历图的所有顶点,而只能访问到该节点所在的最大连通子图的所有顶点,这些顶点构成一个连通分量 + 最小生成树 + 准则 + 只能使用图中的边来构造最小生成树 + 只能使用恰好n-1条边来连接图中的n个顶点 + 选用的n-1条边不能构成回路 + 贪心算法 + 在问题求解时,总是做出当前看起来最好的选择,也就是局部最优解 + Kruskal算法 + 每次找一条具有最短权值且不再同一连通分量上的边加入生成树 + prime算法 + 挨着找 + 单元最短路径 + 从在带权图的某一顶点出发,找出一条通往另一个顶点的最短路径,最短也即是沿路径各边的权值和最小 + +初识数据结构 + 概念 + 数据 + 描述客观事物的符号,是计算机中可以操作的对象,能被计算机识别,并输入给计算机处理的符号集合 + 数据元素 + 是组成数据的、有一定意义的基本单位,在计算机通常作为整体处理,也被称为记录 + 数据项 + 一个数据元素可以由若干个数据项组成。数据项是数据不可分隔的最小单位 + 数据结构形式 + 数据结构 + 是相互之间存在一种或多种特定关系的数据元素的集合 + 分类 + 逻辑结构 + 集合结构 + 线性结构 + 树形结构 + 图形结构 + 物理结构 + 顺序存储结构 + 链式存储结构 + 具体概念 + 逻辑结构 + 数据对象中数据元素之间的相互关系 + 集合结构 + 集合中的数据元素除了同属一个集合外,它们之间没有其他关系 + 线性结构 + 数据元素之间是一对一的关系 + 树形结构 + 数据元素之间存在的一种一对多的层次关系 + 图形结构 + 数据元素是多对多的关系 + 物理结构 + 数据的逻辑结构在计算机中的存储形式 + 顺序存储结构 + 数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的 + 链式存储结构 + 数据元素存放在任意的存储单元里,存储单元可以是连续的,也可以是不连续的 + 逻辑结构是面向问题的,物理结构是面向计算机的,其基本的目标就是将数据及其逻辑关系存储到计算机的内存中 + 程序 + 算法 + 数据结构 + 算法 + 解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作 + 算法特性 + 输入 + 算法有零个或多个输入 + 输出 + 至少有一个或多个输出 + 有穷性 + 算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且一个步骤在可接受的时间内完成 + 确定性 + 算法的每一个步骤都有确定含义,不会出现二义性 + 可行性 + 算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成 + 设计算法要求 + 正确性 + 可读性 + 健壮性 + 时间效率高 + 且空间使用率低 + 简单性 + +算法的复杂度 + 时间复杂度 + 空间复杂度 + 算法分析的分类 + 平均情况 + 任意输入规模的期望运行次数 + 最坏情况 + 任意输入规模的最大运行次数 + 最好情况 + 任意输入规模的最小运行次数,通常最好情况不会出现 + 时间复杂度--O渐进表示法 + 一般算法O(n)计算法 + 用常数1取代运行时间中的所有加法常数 + 在修改后的运行次数函数中,只保留最高阶项 + 如果最高阶项系数存在且不是1,则去除与这个项相乘的常数 + 分治算法的时间复杂度计算 + 二分搜索算法的时间复杂度是lgN + M分搜索算法的时间复杂度为logM^N + 递归算法的时间复杂度计算 + 递归总次数*每次递归次数 + 递归算法空间复杂度算法 + N*每次递归空间大小 + +递归 + 递归定义 + 若一个对象部分的包含它自己或者用它自己给自己定义,则称这个对象是递归的 + 递归的过程 + 一个过程直接或间接的调用自己 + 递归的思想 + 把问题分解成规模更小的具有与原来问题具有相同解法的小问题 + 递归条件 + 缩小问题规模,使新问题与原问题具有相同的解决方式 + 设置递归的出口 + 递归分类 + 数据结构递归 + 问题解法递归 + 递归调用栈 + 尾递归 + 递归调用返回的结果总被直接返回 + 尾递归的本质 + 将单次计算的结果缓存起来,传递给下一次调用,相当于自动累积 + 时间复杂度 + 递归总次数*每次递归次数 + 回溯法 + 基本思想 + 迷宫算法 + 递归的优缺点 + 优点 + 递归在解决某些问题的时候使得我们思考的方式的以简化,代码也更加简练,容易阅读 + 缺点 + 递归的实质就是自己调用自己,而函数的调用开销是很大的,系统要为每次函数调用分配空间存储空间,并将调用点信息压栈,而在函数的调用结束后,还要释放空间,弹栈恢复断点,如果递归方案的复杂度 + +栈 + 栈的概念 + 一种特殊的线性表,只允许从一端插入和删除数据 + 特点:后进先出 + 顺序栈 + 顺序堆栈和书序表数据成员相同 ,不同之处,顺序堆栈的入栈和出栈操作只允许对当前栈顶进行 + 共享栈 + 一个数组实现两个栈 + 原理 + 既然是两个栈共享一段空间,向中间靠拢,数组两端表示两个栈的栈底,栈顶一直向中间靠近 + 应用场景 + 两个栈空间需求有相反的关系,也就是一个增长一个缩短的场景 + 链式栈 + 头插头删 + 栈的应用 + 括号匹配 + 逆波兰表达式 + 迷宫算法 + +队列 + 只允许在一端插入数据,在另一端删除数据的特殊线性表 + 顺序队列 + 实现方式一 + 队头不动出队列时所有元素向前移动 + 实现方式二 + 出队列时,队头向后移动一个位置 + 假溢出现象 + 多次入队列、出队列操作后出现的尚有存储空间但不能进行入队列操作的溢出 + 真溢出现象 + 最大存储空间已经存储满,继续进行入队列操作 + 循环队列 + 头尾相接的顺序存储队列就是循环队列 + 队列满队列空的判断 + 少用一个存储空间 + 队尾指针加一等于队头指针就是队列满的判断条件 + 判空条件是尾和头相等 + 设计一个标记flag + 初始flag置为0,入队列成功flag=1,出队列成功flag置为0 + 队空条件rear==front&&flag==0, + 堆满条件rear==front&&flag=1 + 设置一个计数器 + 初始时count=0,入队列成功,count+1,出队列成功count-1 + 队列空的条件count==0 + 队列满的条件count>0&&rear==front或者count == MaxSize + 链式队列 + 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进,头出而已 + 优先级队列 + 带有优先级的队列 + 优先级高的先出队列,优先级相同的遵守先进先出规则 + 队列的应用 + 生产者消费者模型 + 消息队列 + 排队现象 + 网络数据传输 + +矩阵 + 特殊矩阵 + 有很多值相同的元素或有许多零元素,且值相同的元素或零元素的分布有一定规律的矩阵 + 对称矩阵 + 一个N*N矩阵,任意Aij = Aji + 对称矩阵压缩存储 + 由于对称矩阵上三角和下三角是相同的所以只需存一半即可 + 对称矩阵和对称压缩存储的关系 + 下三角 + i>jSymmetricMatrix[i][j] == Array[i*(i+1)/2+j] + 稀疏矩阵 + M*N矩阵,矩阵有效值的个数远小于无效值的个数,分布没有规律 + 稀疏矩阵压缩存储 + 只存储少量的有效值 + 使用{row,col,value}三元组按照数组中的位置,以行优先级先后顺序一次存放 + 矩阵逆置 + 行列互换 + 快速逆置 + +初识树 + 树的基本概念 + 由N个节点(N>=0)构成的集合 + 有一个特殊的节点,称为根节点,根节点没有前驱节点 + 除过根节点外,其余节点别分成M个(M>0)个互不相交的集合T1、T2...Tn,其中每一个集合又是一棵与树结构类似的子树 + 树是递归定义的 + 名词解释 + 结点 + 结点包括一个数据元素及若干指向其他子树的分支(指针(索引)) + 结点的度 + 结点所拥有的的子树的个数 + 度为0的结点 + 又称终端节点 + 分支结点 + 度不为零的结点 + 非终端结点 + 祖先结点 + 从根结点到该结点所经分支上的所有结点 + 子孙结点 + 以某结点为根结点的子树中的所有结点 + 双亲结点 + 树中某结点有孩子节点,该结点称为它孩子节点的双亲结点 + 孩子结点 + 树中一个结点的子树的根结点称为该结点的孩子结点 + 兄弟结点 + 具有相同双亲结点的结点 + 树的度 + 树中所有结点的度的最大值 + 结点的层次 + 从根结点到树中某结点所经路径上的分支数 + 树的深度 + 树中所有结点的层次的最大值 + 有序树 + 树中结点的各棵子树T0,T1...是有序的 + 无序树 + 树中结点的各棵子树之间的次序不重要,可以相互交换位置 + 森林 + 树m棵树的集合 + 树的表示方法 + 目录结构 + 集合文氏图 + 树的存储结构 + 双亲表示法 + 用指针表示出每个结点的双亲结点 + 优点 + 寻找一个结点的双亲结点操作实现很方便 + 缺点 + 寻找一个结点的孩子结点很不方便 + 孩子表示法 + 用指针指出每个结点的孩子结点 + 优点 + 寻找一个结点的孩子结点比较方便 + 缺点 + 寻找一个结点的双亲结点很不方便 + 双亲孩子表示法 + 用指针既表示出每个结点的双亲结点,也表示出每个结点的孩子结点 + 孩子兄弟表示法 + 表示出第一个结点的第一个孩子结点,也表示出每个结点的下一个兄弟结点 + 树的应用 + 电脑的目录 + +树之二叉树 + 概念 + 一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的二叉树组成 + 特点 + 每个结点最多有两棵子树 + 二叉树的子树有左右之分,其次序不能颠倒 + 满二叉树 + 所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上 + 完全二叉树 + 如果一棵具有N个结点的二叉树的结构与满二叉树的前N个节点 的结构相同,称为完全二叉树 + 二叉树的性质、 + 若规定根节点的层次为1,则一棵非空二叉树第i层上最多有2^(i-1)(i>=1)个结点 + 若规定只有根节点的二叉树的深度为1,则深度为K的二叉树的最大结点数是2^k-1 (k>=0) + 对任何一棵二叉树,如果其叶结点个数为n0,度为2的非叶结点个数为n2,则有n0 = n2+1 + 具有n个结点的完全二叉树,如果按照从上至下从左到右的顺序对所有结点从0开始编号,则对于序号为i的结点有: + 如果i>0,则序号为i的结点的双亲结点的序号为(i-1)/2,如果i==0,则序号为i的结点为根节点,无双亲结点 + 如果2i+1=n,则序号为i结点无右孩子结点 + 如果2i+2=n,则序号为i结点无右孩子结点 + 二叉树的存储结构 + 顺序存储 + 优点、 + 存储完全二叉树,简单省空间 + 缺点 + 对一般二叉树尤其单支树,存储空间利用不理想 + 链式存储 + 子主题 1 + 仿真指针(静态链表) + 二叉树的基本操作 + 二叉树的创建 + 二叉树的遍历 + 前序 + 中序 + 后序 + 层序 + 初始化一个队列 + 把根节点的指针入队列 + 当队列非空时循环执行 + 出队列取一个节点 + 若该结点的左子树非空,将该节点的左子树指针入队列 + 若该节点的右子树非空将该节点的右子树入队列 + 结束 + +线索化二叉树 + 线索化概念 + 按照二叉树的遍历将二叉树导成一个线性序列 + 普通二叉树可能存在的问题 + 递归遍历有可能导致栈溢出 + 非递归版本可能会降低程序的效率 + 想要找到某种遍历形式下某个节点的前驱还是后继比较难 + 树中有大量的空指针域造成浪费, + 线索化过程 + 当某结点的左指为空时,令该指针指向按照某种方式遍历二叉树时得到该结点的前驱节点 + 当某结点的右指针为空时,令该指针指向按照某种遍历方式遍历二叉树时得到该结点的后继结点 + 线索标志位 + 作用区分是孩子结点还是前驱或者后继 + leftThread + 0 + leftChild + 1 + leftThread + rightThread + 0 + rightChild + 1 + rightThread + 线索 + 结点中指向前驱或者后继结点的指针 + 线索二叉树 + 二叉树的结点加上线索的二叉树 + 对二叉树按照某种方式(前序、中序、后序)遍历使其称为线索二叉树的过程称为按照什么方法对二叉树进行线索化 + +堆 + 堆的概念 + 把所有的元素按照完全二叉树的方式存储在一个一维数组中并满足Ki<=K2*i+1且Ki<=K2*i+2(Ki>=K2*i+1且Ki>=K2*i+2),这个堆称为最小堆(最大堆) + 堆的分类 + 小堆 + 任一节点的关键码均小于它左右孩子的关键码,位于堆顶结点的关键码最小 + 大堆 + 任一结点的关键码均大于它左右孩子的关键码,位于堆顶结点的关键码最大 + 堆的性质 + 如果i=0,结点i是根结点,没有双亲结点,否则结点i的双亲结点为(i-1)/2 + 如果2*i+1>n-1,则结点i无左孩子,否则结点i的左孩子为节点2*i+1 + 如果2*i+1>n-1,则结点i无左孩子,否则结点i的左孩子为节点2*i+2 + 堆的创建 + 从上向下调整 + 堆的插入 + 堆的删除 + 堆的应用 + 优先级队列 + +Huffman树 + 概念 + 路径 + 路径长度 + 把带权路径长度最小的树叫做Huffman树 + 构造huffman树 + 构造n棵只有根结点的二叉树森林,每棵二叉树都只有一个带有权值的根结点 + 重复以下步骤,直到F中只剩下一棵树 + 在二叉树森林中选最小的两个,作为左右子树构建一棵新的二叉树,新二叉树的根结点的权值为左右子树根结点的权值之和 + 在原来二叉树森林里删除这两棵二叉树 + 把新的二叉树加入二叉树森林 + huffman编码 + 编码 + 在数据通信中经常把传输的文字转换成二进制字符0和1组成的二进制串,这叫做编码 + 等长编码 + 不等长编码 + 文件压缩 + +二叉搜索树 + 性质 + 如果左子树不为空,则左子树上所有节点的值都小于根结点的值 + 它的右子树不为空,则右子树上所有节点的值都大于根结点的值 + 它的左右子树也分别为二叉搜索树 + 操作 + 搜索 + 若根结点不为空 + 根结点key==要查找的key,返回true + 根结点key>查找key,在其左子树查找 + 根结点key<查找key,在其右子树查找 + 否则返回false + 插入 + 首先检测这个节点是不是已经存在,要是存在不插入 + 否则将元素插入到找到的位置 + 删除 + 首先判断是否在树中,没有直接返回 + 有的情况 + 要删除的节点没有孩子节点 + 直接删除该结点 + 要删除的节点只有左孩子 + 删除该结点并使被删除结点的双亲结点指向被删除结点的左孩子结点 + 要删除的节点只有右孩子 + 删除该结点并使被删除结点的双亲结点指向被删除结点的右孩子结点 + 要删除的节点有左、右孩子结点 + 在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被删除节点中,再来处理该结点的删除问题 + 二叉搜索树性能分析 + 最坏情况下,平均查找长度为O(n)一般情况下平均长度为O(lgn) + +AVL树 + AVL树性质 + 它的左右子树都是AVL树 + 左子树和右子树高度之差(简称平衡因子)的绝对值不超过1(-1、0、1) + 如果一棵树是高度平衡的,它就是AVL树。如果它有n个节点,其高度可保持在0(lgn),平均搜索复杂度O(lgn) + 平衡化旋转 + 左单旋 + 右单旋 + 左右双旋 + 右左双旋 + AVL树的插入 + 如果是空树,插入后即为根结点,插入后直接返回true + 如果树不空,寻找插入位置,若在查找过程中找到key,则插入失败直接返回false + 插入节点 + 更新平衡因子,对树进行调整 + AVL树的删除 + 被删除结点只有左孩子 + parent的平衡因子为1或者-1,parent高度不变,则从parent到根所有结点高度均不变,不用调整 + 被删除结点只有右孩子 + parent的平衡因子变成0,虽然以parent为根的子树平衡,其高度减1,但需要检查parent的双亲结点的平衡性 + 被删除结点左右孩子都有 + 变为删除中序遍历下的第一个结点q + 结点parent的平衡因子为2或者-2,则较矮子数缩短,parent发生不平衡,需要进行平衡化旋转 + parent较高子树的根为q + 如果q的平衡因子为0,执行单循环恢复parent + 如果q的平衡因子与parent平衡因子(正负)号相同,则执行一个单循环恢复parent + 如果q的平衡因子与parent平衡因子(正负)号相反,则执行一个双旋转恢复parent + +红黑树 + 概念 + 红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示结点的颜色,保证最长路径不超过最短路径的两倍,近似平衡 + 性质 + 每个结点不是红色就是黑色 + 树的根结点是黑色 + 如果一个结点是红色的,则它的两个孩子结点是黑色的(没有连续的两个红色结点) + 对于每个节点,从该结点到其所有后代叶节点的简单路径上,均包含相同数目的黑色结点(每条路径上黑色结点的数量相等) + 每个叶子节点都是黑色的(此处的叶子结点指的是空节点) + 插入实现 + 若树为空,插入后需将新节点改成黑色 + 插入结点的父节点为黑色,不违反任何性质,直接插入 + 情况三 + 情况四 + 情况五 + 删除 + 运用 + C++STL库--map/set multimap multiset + Java库 + linux 内核 + 其他一些库 + 红黑树和AVL树的比较 +``` diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/1_\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266/\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266.pdf" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/1_\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266/\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266.pdf" new file mode 100644 index 00000000..37ef7e51 Binary files /dev/null and "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/1_\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266/\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266.pdf" differ diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/doubly-linked-list/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/doubly-linked-list/README.md" new file mode 100644 index 00000000..03dd53c1 --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/doubly-linked-list/README.md" @@ -0,0 +1,99 @@ +# 双向链表 + +在计算机科学中, 一个 **双向链表(doubly linked list)** 是由一组称为节点的顺序链接记录组成的链接数据结构。每个节点包含两个字段,称为链接,它们是对节点序列中上一个节点和下一个节点的引用。开始节点和结束节点的上一个链接和下一个链接分别指向某种终止节点,通常是前哨节点或null,以方便遍历列表。如果只有一个前哨节点,则列表通过前哨节点循环链接。它可以被概念化为两个由相同数据项组成的单链表,但顺序相反。 + +![Doubly Linked List](https://upload.wikimedia.org/wikipedia/commons/5/5e/Doubly-linked-list.svg) + +两个节点链接允许在任一方向上遍历列表。 + +在双向链表中进行添加或者删除节点时,需做的链接更改要比单向链表复杂得多。这种操作在单向链表中更简单高效,因为不需要关注一个节点(除第一个和最后一个节点以外的节点)的两个链接,而只需要关注一个链接即可。 + + + +## 基础操作的伪代码 + +### 插入 + +```text +Add(value) + Pre: value is the value to add to the list + Post: value has been placed at the tail of the list + n ← node(value) + if head = ø + head ← n + tail ← n + else + n.previous ← tail + tail.next ← n + tail ← n + end if +end Add +``` + +### 删除 + +```text +Remove(head, value) + Pre: head is the head node in the list + value is the value to remove from the list + Post: value is removed from the list, true; otherwise false + if head = ø + return false + end if + if value = head.value + if head = tail + head ← ø + tail ← ø + else + head ← head.next + head.previous ← ø + end if + return true + end if + n ← head.next + while n = ø and value !== n.value + n ← n.next + end while + if n = tail + tail ← tail.previous + tail.next ← ø + return true + else if n = ø + n.previous.next ← n.next + n.next.previous ← n.previous + return true + end if + return false +end Remove +``` + +### 反向遍历 + +```text +ReverseTraversal(tail) + Pre: tail is the node of the list to traverse + Post: the list has been traversed in reverse order + n ← tail + while n = ø + yield n.value + n ← n.previous + end while +end Reverse Traversal +``` + +## 复杂度 + +## 时间复杂度 + +| Access | Search | Insertion | Deletion | +| :-------: | :-------: | :-------: | :-------: | +| O(n) | O(n) | O(1) | O(1) | + +### 空间复杂度 + +O(n) + +## 参考 + +- [Wikipedia](https://en.wikipedia.org/wiki/Doubly_linked_list) +- [YouTube](https://www.youtube.com/watch?v=JdQeNxWCguQ&t=7s&index=72&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/graph/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/graph/README.md" new file mode 100644 index 00000000..49c97715 --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/graph/README.md" @@ -0,0 +1,22 @@ +# 图 + +在计算机科学中, **图(graph)** 是一种抽象数据类型, +旨在实现数学中的无向图和有向图概念,特别是图论领域。 + +一个图数据结构是一个(由有限个或者可变数量的)顶点/节点/点和边构成的有限集。 + +如果顶点对之间是无序的,称为无序图,否则称为有序图; + +如果顶点对之间的边是没有方向的,称为无向图,否则称为有向图; + +如果顶点对之间的边是有权重的,该图可称为加权图。 + + + +![Graph](https://www.tutorialspoint.com/data_structures_algorithms/images/graph.jpg) + +## 参考 + +- [Wikipedia](https://en.wikipedia.org/wiki/Graph_(abstract_data_type)) +- [Introduction to Graphs on YouTube](https://www.youtube.com/watch?v=gXgEDyodOJU&index=9&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) +- [Graphs representation on YouTube](https://www.youtube.com/watch?v=k1wraWzqtvQ&index=10&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/hash-table/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/hash-table/README.md" new file mode 100644 index 00000000..5de3cc5e --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/hash-table/README.md" @@ -0,0 +1,21 @@ +# 哈希表 + +在计算中, 一个 **哈希表(hash table 或hash map)** 是一种实现 *关联数组(associative array)* +的抽象数据;类型, 该结构可以将 *键映射到值*。 + +哈希表使用 *哈希函数/散列函数* 来计算一个值在数组或桶(buckets)中或槽(slots)中对应的索引,可使用该索引找到所需的值。 + +理想情况下,散列函数将为每个键分配给一个唯一的桶(bucket),但是大多数哈希表设计采用不完美的散列函数,这可能会导致"哈希冲突(hash collisions)",也就是散列函数为多个键(key)生成了相同的索引,这种碰撞必须 +以某种方式进行处理。 + + +![Hash Table](https://upload.wikimedia.org/wikipedia/commons/7/7d/Hash_table_3_1_1_0_1_0_0_SP.svg) + +通过单独的链接解决哈希冲突 + +![Hash Collision](https://upload.wikimedia.org/wikipedia/commons/d/d0/Hash_table_5_0_1_1_1_1_1_LL.svg) + +## 参考 + +- [Wikipedia](https://en.wikipedia.org/wiki/Hash_table) +- [YouTube](https://www.youtube.com/watch?v=shs0KM3wKv8&index=4&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/heap/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/heap/README.md" new file mode 100644 index 00000000..bdcb1940 --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/heap/README.md" @@ -0,0 +1,19 @@ +# 堆 (数据结构) + +在计算机科学中, 一个 **堆(heap)** 是一种特殊的基于树的数据结构,它满足下面描述的堆属性。 + +在一个 *最小堆(min heap)* 中, 如果 `P` 是 `C` 的一个父级节点, 那么 `P` 的key(或value)应小于或等于 `C` 的对应值. + +![最小堆](https://upload.wikimedia.org/wikipedia/commons/6/69/Min-heap.png) + +在一个 *最大堆(max heap)* 中, `P` 的key(或value)大于 `C` 的对应值。 + +![堆](https://upload.wikimedia.org/wikipedia/commons/3/38/Max-Heap.svg) + + +在堆“顶部”的没有父级节点的节点,被称之为根节点。 + +## 参考 + +- [Wikipedia](https://en.wikipedia.org/wiki/Heap_(data_structure)) +- [YouTube](https://www.youtube.com/watch?v=t0Cq6tVNRBA&index=5&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/linked-list/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/linked-list/README.md" new file mode 100644 index 00000000..81f036ab --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/linked-list/README.md" @@ -0,0 +1,147 @@ +# 链表 + +在计算机科学中, 一个 **链表** 是数据元素的线性集合, 元素的线性顺序不是由它们在内存中的物理位置给出的。 相反, 每个元素指向下一个元素。它是由一组节点组成的数据结构,这些节点一起,表示序列。 + +在最简单的形式下,每个节点由数据和到序列中下一个节点的引用(换句话说,链接)组成。这种结构允许在迭代期间有效地从序列中的任何位置插入或删除元素。 + +更复杂的变体添加额外的链接,允许有效地插入或删除任意元素引用。链表的一个缺点是访问时间是线性的(而且难以管道化)。 + +更快的访问,如随机访问,是不可行的。与链表相比,数组具有更好的缓存位置。 + +![Linked List](https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg) + +## 基本操作的伪代码 + +### 插入 + +```text +Add(value) + Pre: value is the value to add to the list + Post: value has been placed at the tail of the list + n ← node(value) + if head = ø + head ← n + tail ← n + else + tail.next ← n + tail ← n + end if +end Add +``` + +``` +Prepend(value) + Pre: value is the value to add to the list + Post: value has been placed at the head of the list + n ← node(value) + n.next ← head + head ← n + if tail = ø + tail ← n + end +end Prepend +``` + +### 搜索 + +```text +Contains(head, value) + Pre: head is the head node in the list + value is the value to search for + Post: the item is either in the linked list, true; otherwise false + n ← head + while n != ø and n.value != value + n ← n.next + end while + if n = ø + return false + end if + return true +end Contains +``` + +### 删除 + +```text +Remove(head, value) + Pre: head is the head node in the list + value is the value to remove from the list + Post: value is removed from the list, true, otherwise false + if head = ø + return false + end if + n ← head + if n.value = value + if head = tail + head ← ø + tail ← ø + else + head ← head.next + end if + return true + end if + while n.next != ø and n.next.value != value + n ← n.next + end while + if n.next != ø + if n.next = tail + tail ← n + end if + n.next ← n.next.next + return true + end if + return false +end Remove +``` + +### 遍历 + +```text +Traverse(head) + Pre: head is the head node in the list + Post: the items in the list have been traversed + n ← head + while n != ø + yield n.value + n ← n.next + end while +end Traverse +``` + +### 反向遍历 + +```text +ReverseTraversal(head, tail) + Pre: head and tail belong to the same list + Post: the items in the list have been traversed in reverse order + if tail != ø + curr ← tail + while curr != head + prev ← head + while prev.next != curr + prev ← prev.next + end while + yield curr.value + curr ← prev + end while + yield curr.value + end if +end ReverseTraversal +``` + +## 复杂度 + +### 时间复杂度 + +| Access | Search | Insertion | Deletion | +| :-------: | :-------: | :-------: | :-------: | +| O(n) | O(n) | O(1) | O(1) | + +### 空间复杂度 + +O(n) + +## 参考 + +- [Wikipedia](https://en.wikipedia.org/wiki/Linked_list) +- [YouTube](https://www.youtube.com/watch?v=njTh_OwMljA&index=2&t=1s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/priority-queue/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/priority-queue/README.md" new file mode 100644 index 00000000..caffcd71 --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/priority-queue/README.md" @@ -0,0 +1,15 @@ +# 优先队列 + +在计算机科学中, **优先级队列(priority queue)** 是一种抽象数据类型, 它类似于常规的队列或栈, 但每个元素都有与之关联的“优先级”。 + +在优先队列中, 低优先级的元素之前前面应该是高优先级的元素。 如果两个元素具有相同的优先级, 则根据它们在队列中的顺序是它们的出现顺序即可。 + +优先队列虽通常用堆来实现,但它在概念上与堆不同。优先队列是一个抽象概念,就像“列表”或“图”这样的抽象概念一样; + +正如列表可以用链表或数组实现一样,优先队列可以用堆或各种其他方法实现,例如无序数组。 + + +## 参考 + +- [Wikipedia](https://en.wikipedia.org/wiki/Priority_queue) +- [YouTube](https://www.youtube.com/watch?v=wptevk0bshY&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=6) diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/queue/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/queue/README.md" new file mode 100644 index 00000000..d61a2c7d --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/queue/README.md" @@ -0,0 +1,15 @@ +# 队列 + +在计算机科学中, 一个 **队列(queue)** 是一种特殊类型的抽象数据类型或集合。集合中的实体按顺序保存。 + +队列基本操作有两种:入队和出队。从队列的后端位置添加实体,称为入队;从队列的前端位置移除实体,称为出队。 + + +队列中元素先进先出 FIFO (first in, first out)的示意 + +![Queue](https://upload.wikimedia.org/wikipedia/commons/5/52/Data_Queue.svg) + +## 参考 + +- [Wikipedia](https://en.wikipedia.org/wiki/Queue_(abstract_data_type)) +- [YouTube](https://www.youtube.com/watch?v=wjI1WNcIntg&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=3&) diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/stack/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/stack/README.md" new file mode 100644 index 00000000..bd9bce4b --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/stack/README.md" @@ -0,0 +1,21 @@ +# 栈 + +在计算机科学中, 一个 **栈(stack)** 是一种抽象数据类型,用作表示元素的集合,具有两种主要操作: + +* **push**, 添加元素到栈的顶端(末尾); +* **pop**, 移除栈最顶端(末尾)的元素. + +以上两种操作可以简单概括为“后进先出(LIFO = last in, first out)”。 + +此外,应有一个 `peek` 操作用于访问栈当前顶端(末尾)的元素。 + +"栈"这个名称,可类比于一组物体的堆叠(一摞书,一摞盘子之类的)。 + +栈的 push 和 pop 操作的示意 + +![Stack](https://upload.wikimedia.org/wikipedia/commons/b/b4/Lifo_stack.png) + +## 参考 + +- [Wikipedia](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)) +- [YouTube](https://www.youtube.com/watch?v=wjI1WNcIntg&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=3&) diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/tree/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/tree/README.md" new file mode 100644 index 00000000..9a7bedb0 --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/tree/README.md" @@ -0,0 +1,21 @@ +# 树 + +* [二叉搜索树](https://www.cxyhub.com/all/programming/12460/) +* [红黑树](https://www.cxyhub.com/all/programming/12460/) + +在计算机科学中, **树(tree)** 是一种广泛使用的抽象数据类型(ADT)— 或实现此ADT的数据结构 — 模拟分层树结构, 具有根节点和有父节点的子树,表示为一组链接节点。 + +树可以被(本地地)递归定义为一个(始于一个根节点的)节点集, 每个节点都是一个包含了值的数据结构, 除了值,还有该节点的节点引用列表(子节点)一起。 +树的节点之间没有引用重复的约束。 + +一棵简单的无序树; 在下图中: + +标记为7的节点具有两个子节点, 标记为2和6; +一个父节点,标记为2,作为根节点, 在顶部,没有父节点。 + +![Tree](https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_tree.svg) + +## 参考 + +- [Wikipedia](https://en.wikipedia.org/wiki/Tree_(data_structure)) +- [YouTube](https://www.youtube.com/watch?v=oSWTXtMglKE&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=8) diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/trie/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/trie/README.md" new file mode 100644 index 00000000..bad277d4 --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/2_\345\237\272\347\241\200\347\237\245\350\257\206/trie/README.md" @@ -0,0 +1,16 @@ +# 字典树 + +在计算机科学中, **字典树(trie,中文又被称为”单词查找树“或 ”键树“)**, 也称为数字树,有时候也被称为基数树或前缀树(因为它们可以通过前缀搜索),它是一种搜索树--一种已排序的数据结构,通常用于存储动态集或键为字符串的关联数组。 + +与二叉搜索树不同, 树上没有节点存储与该节点关联的键; 相反,节点在树上的位置定义了与之关联的键。一个节点的全部后代节点都有一个与该节点关联的通用的字符串前缀, 与根节点关联的是空字符串。 + +值对于字典树中关联的节点来说,不是必需的,相反,值往往和相关的叶子相关,以及与一些键相关的内部节点相关。 + +有关字典树的空间优化示意,请参阅紧凑前缀树 + +![Trie](https://upload.wikimedia.org/wikipedia/commons/b/be/Trie_example.svg) + +## 参考 + +- [Wikipedia](https://en.wikipedia.org/wiki/Trie) +- [YouTube](https://www.youtube.com/watch?v=zIjfhVPRZCg&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=7&t=0s) diff --git "a/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/README.md" "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/README.md" new file mode 100644 index 00000000..5c29ccd8 --- /dev/null +++ "b/PART_1_\347\256\227\346\263\225\345\237\272\347\241\200/README.md" @@ -0,0 +1,25 @@ +## PART_1_算法基础 + +[下载 XMIND + PDF 完整版](https://www.cxyhub.com/all/programming/12460/) + +- ①:数据结构知识框架:为了大家更好的掌握数据结构和算法,我把基础知识整理成了一张思维导图,包括下面这些内容 + +[开始学习](./1_数据结构知识框架/README.md) + + + + +

+ +- ②:基础知识 + +* [链表](./2_基础知识/linked-list/README.md) +* [双向链表](./2_基础知识/doubly-linked-list/README.md) +* [队列](./2_基础知识/queue/README.md) +* [栈](./2_基础知识/stack/README.md) +* [哈希表(散列)](./2_基础知识/hash-table/README.md) +* [堆](./2_基础知识/heap/README.md) +* [优先队列](./2_基础知识/priority-queue/README.md) +* [字典树](./2_基础知识/trie/README.md) +* [树](./2_基础知识/tree/README.md) +* [图](./2_基础知识/graph/README.md) diff --git "a/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/README.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/README.md" new file mode 100644 index 00000000..55ce221e --- /dev/null +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/README.md" @@ -0,0 +1,101 @@ +## PART_2_力扣图解 + +| Title | 分类 | 难度 | +|---|---|---| +| [开始学习](http://www.geekxh.com) | 指导 | | +| [阅读指南](http://www.geekxh.com/c99/hello.html)| 指导 | | +| [01.两个数组的交集(350)](http://www.geekxh.com/1.0.数组系列/001.html) | 数组 | | +| [02.最长公共前缀(14)](http://www.geekxh.com/1.0.数组系列/002.html) | 数组 | | +| [03.买卖股票的最佳时机(122)](http://www.geekxh.com/1.0.数组系列/003.html) | 数组 | | +| [04.旋转数组(189)](http://www.geekxh.com/1.0.数组系列/004.html) | 数组 | | +| [05.原地删除(27)](http://www.geekxh.com/1.0.数组系列/005.html) | 数组 | | +| [06.加一(66)](http://www.geekxh.com/1.0.数组系列/006.html) | 数组 | | +| [07.两数之和(1)](http://www.geekxh.com/1.0.数组系列/007.html) | 数组 | | +| [08.三数之和(15)](http://www.geekxh.com/1.0.数组系列/008.html) | 数组 | | +| [09.Z字形变换(6)](http://www.geekxh.com/1.0.数组系列/009.html) | 数组 | | +| [01.删除链表倒数第N个节点(19)](http://www.geekxh.com/1.1.链表系列/101.html) | 链表 | | +| [02.合并两个有序链表(21)](http://www.geekxh.com/1.1.链表系列/102.html) | 链表 | | +| [03.环形链表(141)](http://www.geekxh.com/1.1.链表系列/103.html) | 链表 | | +| [04.两数相加(2)](http://www.geekxh.com/1.1.链表系列/104.html) | 链表 | | +| [01.爬楼梯(70)](http://www.geekxh.com/1.2.动态规划系列/201.html) | 动态规划 | | +| [02.最大子序和(53)](http://www.geekxh.com/1.2.动态规划系列/202.html) | 动态规划 | | +| [03.最长上升子序列(300)](http://www.geekxh.com/1.2.动态规划系列/203.html) | 动态规划 | | +| [04.三角形最小路径和(120)](http://www.geekxh.com/1.2.动态规划系列/204.html) | 动态规划 | | +| [05.最小路径和(64)](http://www.geekxh.com/1.2.动态规划系列/205.html) | 动态规划 | | +| [06.打家劫舍(198)](http://www.geekxh.com/1.2.动态规划系列/206.html) | 动态规划 | | +| [01.反转字符串(344)](http://www.geekxh.com/1.3.字符串系列/301.html) | 字符串 | | +| [02.字符串中的第一个唯一字符(387)](http://www.geekxh.com/1.3.字符串系列/302.html) | 字符串 | | +| [03.实现 Sunday 匹配](http://www.geekxh.com/1.3.字符串系列/303.html) | 字符串 | | +| [04.大数打印](http://www.geekxh.com/1.3.字符串系列/304.html) | 字符串 | | +| [05.验证回文串(125)](http://www.geekxh.com/1.3.字符串系列/305.html) | 字符串 | | +| [06.KMP 精讲](http://www.geekxh.com/1.3.字符串系列/306.html) | 字符串 | | +| [07.旋转字符串(796)](http://www.geekxh.com/1.3.字符串系列/307.html) | 字符串 | | +| [08.最后一个单词的长度(58)](http://www.geekxh.com/1.3.字符串系列/308.html) | 字符串 | | +| [01.最大深度与DFS(104)](http://www.geekxh.com/1.4.二叉树系列/401.html) | 二叉树 | | +| [02.层次遍历与BFS(102)](http://www.geekxh.com/1.4.二叉树系列/402.html) | 二叉树 | | +| [03.BST与其验证(98)](http://www.geekxh.com/1.4.二叉树系列/403.html) | 二叉树 | | +| [04.BST 的查找(700)](http://www.geekxh.com/1.4.二叉树系列/404.html) | 二叉树 | | +| [05.BST 的删除(450)](http://www.geekxh.com/1.4.二叉树系列/405.html) | 二叉树 | | +| [06.平衡二叉树(110)](http://www.geekxh.com/1.4.二叉树系列/406.html) | 二叉树 | | +| [07.完全二叉树(222)](http://www.geekxh.com/1.4.二叉树系列/407.html) | 二叉树 | | +| [08.二叉树的剪枝(814)](http://www.geekxh.com/1.4.二叉树系列/408.html) | 二叉树 | | +| [01.滑动窗口最大值(239)](http://www.geekxh.com/1.5.滑动窗口系列/501.html) | 滑动窗口 | | +| [02.无重复字符的最长子串(3)](http://www.geekxh.com/1.5.滑动窗口系列/502.html) | 滑动窗口 | | +| [03.找到字符串中所有字母异位词(438)](http://www.geekxh.com/1.5.滑动窗口系列/503.html) | 滑动窗口 | | +| [04.和为s的连续正数序列](http://www.geekxh.com/1.5.滑动窗口系列/504.html) | 滑动窗口 | | +| [01.囚徒困境](http://www.geekxh.com/1.6.博弈论系列/601.html) | 博弈论系列 | | +| [02.辛普森悖论](http://www.geekxh.com/1.6.博弈论系列/602.html) | 博弈论系列 | | +| [03.红眼睛和蓝眼睛](http://www.geekxh.com/1.6.博弈论系列/603.html) | 博弈论系列 | | +| [04.海盗分金币](http://www.geekxh.com/1.6.博弈论系列/604.html) | 博弈论系列 | | +| [05.智猪博弈](http://www.geekxh.com/1.6.博弈论系列/605.html) | 博弈论系列 | | +| [06.生男生女的问题](http://www.geekxh.com/1.6.博弈论系列/606.html) | 博弈论系列 | | +| [07.硬币问题](http://www.geekxh.com/1.6.博弈论系列/607.html) | 博弈论系列 | | +| [08.画圈圈的问题](http://www.geekxh.com/1.6.博弈论系列/608.html) | 博弈论系列 | | +| [09.巧克力问题](http://www.geekxh.com/1.6.博弈论系列/609.html) | 博弈论系列 | | +| [10.大鱼和小鱼的问题](http://www.geekxh.com/1.6.博弈论系列/610.html) | 博弈论系列 | | +| [01.使用位运算求和](http://www.geekxh.com/1.8.位运算系列/801.html) | 位运算系列 | | +| [02.2的幂(231)](http://www.geekxh.com/1.8.位运算系列/802.html) | 位运算系列 | | +| [03.返回一个数二进制中1的个数](http://www.geekxh.com/1.8.位运算系列/803.html) | 位运算系列 | | +| [04.只出现一次的数字](http://www.geekxh.com/1.8.位运算系列/804.html) | 位运算系列 | | +| [05.只出现一次的数字Ⅱ](http://www.geekxh.com/1.8.位运算系列/805.html) | 位运算系列 | | +| [06.缺失数字(268)](http://www.geekxh.com/1.8.位运算系列/806.html) | 位运算系列 | | +| [01.爱吃香蕉的珂珂(875)](http://www.geekxh.com/1.9.二分法系列/901.html) | 二分法系列 | | +| [02.x的平方根(69)](http://www.geekxh.com/1.9.二分法系列/902.html) | 二分法系列 | | +| [03.x的平方根(69)](http://www.geekxh.com/1.9.二分法系列/903.html) | 二分法系列 | | +| [04.旋转排序数组中的最小值Ⅰ(153)](http://www.geekxh.com/1.9.二分法系列/904.html) | 二分法系列 | | +| [05.旋转排序数组中的最小值Ⅱ(154)](http://www.geekxh.com/1.9.二分法系列/905.html) | 二分法系列 | | +| [06.供暖器(475)](http://www.geekxh.com/1.9.二分法系列/906.html) | 二分法系列 | | +| [01.螺旋矩阵(54)](http://www.geekxh.com/1.99.其他补充题目/01.html) | 高频面试题目| | +| [02.只有两个键的键盘(650)](http://www.geekxh.com/1.99.其他补充题目/02.html) | 高频面试题目| | +| [03.24点游戏(679)](http://www.geekxh.com/1.99.其他补充题目/03.html) | 高频面试题目| | +| [04.飞机座位分配概率(1227)](http://www.geekxh.com/1.99.其他补充题目/04.html) | 高频面试题目| | +| [05.水分子的产生](http://www.geekxh.com/1.99.其他补充题目/05.html) | 高频面试题目| | +| [06.救生艇(881)](http://www.geekxh.com/1.99.其他补充题目/06.html) | 高频面试题目| | +| [07.救生艇(881)](http://www.geekxh.com/1.99.其他补充题目/07.html) | 高频面试题目| | +| [08.灯泡开关(319)](http://www.geekxh.com/1.99.其他补充题目/08.html) | 高频面试题目| | +| [09.三门问题](http://www.geekxh.com/1.99.其他补充题目/09.html) | 高频面试题目| | +| [10.猜数字游戏(299)](http://www.geekxh.com/1.99.其他补充题目/10.html) | 高频面试题目| | +| [11.LRU缓存机制(146)](http://www.geekxh.com/1.99.其他补充题目/11.html) | 高频面试题目| | +| [12.最小的k个数](http://www.geekxh.com/1.99.其他补充题目/12.html) | 高频面试题目| | +| [13.不同路径](http://www.geekxh.com/1.99.其他补充题目/13.html) | 高频面试题目| | +| [14.不同路径-障碍物](http://www.geekxh.com/1.99.其他补充题目/14.html) | 高频面试题目| | +| [15.连续n个数的和](http://www.geekxh.com/1.99.其他补充题目/15.html) | 高频面试题目| | +| [16.盛水最多的容器](http://www.geekxh.com/1.99.其他补充题目/16.html) | 高频面试题目| | +| [17.扑克牌中的顺子容器](http://www.geekxh.com/1.99.其他补充题目/17.html) | 高频面试题目| | +| [18.整数拆分(343)](http://www.geekxh.com/1.99.其他补充题目/18.html) | 高频面试题目| | +| [19.移动石子到连续(1033)](http://www.geekxh.com/1.99.其他补充题目/19.html) | 高频面试题目| | +| [20.Nim游戏(292)](http://www.geekxh.com/1.99.其他补充题目/20.html) | 高频面试题目| | +| [21.寻找两个正序数组的中位数(4)](http://www.geekxh.com/1.99.其他补充题目/21.html) | 高频面试题目| | +| [22.第k个最大元素(215)](http://www.geekxh.com/1.99.其他补充题目/22.html) | 高频面试题目| | +| [23.镜面反射(858)](http://www.geekxh.com/1.99.其他补充题目/23.html) | 高频面试题目| | +| [25.整数转罗马数字(12)](http://www.geekxh.com/1.99.其他补充题目/25.html) | 高频面试题目| | +| [26.荷兰国旗问题](http://www.geekxh.com/1.99.其他补充题目/26.html) | 高频面试题目| | +| [27.六九问题](http://www.geekxh.com/1.99.其他补充题目/27.html) | 高频面试题目| | +| [28.有效的数独](http://www.geekxh.com/1.99.其他补充题目/28.html) | 高频面试题目| | +| [29.费米估算](http://www.geekxh.com/1.99.其他补充题目/29.html) | 高频面试题目| | +| [30.分发饼干](http://www.geekxh.com/1.99.其他补充题目/30.html) | 高频面试题目| | +| [31.生命游戏(289)](http://www.geekxh.com/1.99.其他补充题目/31.html) | 高频面试题目| | +| [32.搜索二维矩阵(74)](http://www.geekxh.com/1.99.其他补充题目/32.html) | 高频面试题目| | +| [33.子集(78)](http://www.geekxh.com/1.99.其他补充题目/33.html) | 高频面试题目| | +| [34.面试中的智力题](http://www.geekxh.com/1.99.其他补充题目/34.html) | 高频面试题目| | +| [35.旋转图像(48)](http://www.geekxh.com/1.99.其他补充题目/51.html) | 高频面试题目| | \ No newline at end of file diff --git "a/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/1.\345\255\246\344\271\240\351\241\273\347\237\245/01.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/1.\345\255\246\344\271\240\351\241\273\347\237\245/01.md" new file mode 100644 index 00000000..ce70df66 --- /dev/null +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/1.\345\255\246\344\271\240\351\241\273\347\237\245/01.md" @@ -0,0 +1,24 @@ + +## 小浩算法 + + + + +小浩算法是我在疫情期间完成的一部图解算法题典!目前共完成 105道 +高频面试算法题目,全部采用漫画图解的方式。该教程目前共有 11w 人阅读。 +面向 算法小白初中阶读者。所有代码均在 leetcode 上测试运行,可以直接右上角搜索题号。 + +::: danger 重要 +目前该教程全部免费,正因如此被一些不良商家拿去卖钱! 所以我把全部的内容都同步到了 [github](https://github.com/geekxh/hello-algorithm +),希望大家可以帮我点一个 star,防止有更多的人上当受骗! 小浩感激不尽! +::: + +*** + +为了提高大家的学习效率,我做了两件事: + +1、首先创建了万人刷题群,群里无广告,不套路。下方扫码回复【进群】 即可。 + +2、同时我把自己写的所有内容整理成了一本电子书。下方扫码回复【999】 下载。 + +
JPEG
\ No newline at end of file diff --git "a/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/1.\345\255\246\344\271\240\351\241\273\347\237\245/02.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/1.\345\255\246\344\271\240\351\241\273\347\237\245/02.md" new file mode 100644 index 00000000..3d42197e --- /dev/null +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/1.\345\255\246\344\271\240\351\241\273\347\237\245/02.md" @@ -0,0 +1,50 @@ + +## 阅读指南 + + +## 为什么要做这样的一个算法图解合集 + +网上的算法教程杂乱且分散,质量层次不齐,浪费了大家大量宝贵的时间。很多题解,在我掌握题目后去看都费劲,更何况对于一些初学者。 + +## 本教程阅读门槛 + +本教程基本没有学习门槛。因为在每道题目中,我都会尽量去串基础知识,以达到学以致用的效果。 + +## 学完本教程期望达到什么样的目的 + +- 掌握基本的数据结构与算法 +- 掌握各类型高频面试算法题 + +## 本教程有何特色 + +每一道算法题都配有完整图解!仅此一家! + +## 题解是围绕什么编写的 + +掌握!所有的题解都以掌握二字为前提。不会追求过多的奇淫技巧,毕竟我们不是专门研究算法的人。我见过太多算法初学者,一个题解看不懂,转头又去看第二个题解,第二个看不懂,又去看第三个,直到最后放弃掉。浪费了时间,题目还是不会做,这图什么呢?所以本教程所有的题解都是以掌握为目标,尽量把每一道题的思路都讲的明明白白的。 + +## 题解是否严谨 + +绝对严谨,所有的题解都在leetcode上进行过测试运行。 + +## 没学过 java、go 是否可以学习 + +当然可以。我期望大家更多的是去关注算法的本身,而不是语言层面的东西。所以本教程,其实各语言都会使用一些,并不局限于 java、go。但是,我绝对不会使用任何语法特性!我希望大家不要被语言所束缚! + +## 是否可以按照本教程顺序来刷题 + +当然可以。一般刷题我们有两种策略,一种就是刷 leetcode 前一百道题目,另一种就是根据分类刷题。刷 leetcode 前一百道题,是因为这些题目都是经典题目。而根据分类,更适合算法小白和初中阶段读者。所以我在这里选择了根据分类来汇编,这样我们还可以在做一些题目的时候,与前面同类型的题目进行比较。 + +## 这些题目刷完能达到什么效果 + +刷完再说! + +## 你需要做什么 + +开干!奥利给! + +## 看完题目还是不懂怎么办? + +下方扫码,加我微信,我拉你到刷题群。和大家一起交流学习!(备注:进群) + +PNG \ No newline at end of file diff --git "a/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/1.\345\255\246\344\271\240\351\241\273\347\237\245/03.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/1.\345\255\246\344\271\240\351\241\273\347\237\245/03.md" new file mode 100644 index 00000000..857f413a --- /dev/null +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/1.\345\255\246\344\271\240\351\241\273\347\237\245/03.md" @@ -0,0 +1,33 @@ + +## 资源下载 + + +::: danger 重要 + +有一件事想额外告诉大家,我自己写的教程目前是全部免费的,但是近日我发现有人把我的教程拿去贩卖。 +正因如此, 我将我的内容全部放在 github 免费公开,希望大家可以进去帮我点一个 star ,支持一下,也防止有更多的人上当受骗!小浩感激不尽! + +[点这里支持](https://github.com/geekxh/hello-algorithm) +::: +::: tip +[点击即可下载我写的电子书:mx48 (希望下方扫码支持一下,谢谢)](https://pan.baidu.com/s/1Gb8m42Aktl3HYqI5HRmEow) + +扫码回复【999】,下载我整理的 40 张高清思维导图。 + +扫码回复【进群】,加入万人刷题群,群内可 BAT 内推。 + +扫码回复【面试】,下载 BAT 面试汇总题目。 +::: + +
JPEG
+ +思维导图展示(扫码获取): + +
JPEG
+ + + +我写的电子书展示(扫码获取): + +
JPEG
+ diff --git "a/website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701.md" similarity index 85% rename from "website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701.md" index a6d9ffa3..a3b5be88 100644 --- "a/website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701.md" @@ -1,7 +1,7 @@ ---- -title: 按奇偶排序数组(905) + +## 按奇偶排序数组(905) date: 2020-06-14 ---- + > 在本系列中,将为大家讲解**排序算法**相关内容。同时,由于网上排序相关的教程太多了,我会尽可能的讲解一些不一样的内容。而不是按照 排序讲解 标准Titile,什么“十大排序算法”,“经典排序算法”,“排序算法必知必会” 之类的一个一个来进行讲解。所以,如果内容引起不适,概不负责... @@ -9,17 +9,17 @@ date: 2020-06-14 在leetcode中,直接搜索**排序标签**出现的题目有80余道,这是与排序直接相关的题目,不包括其他一些用到排序思想的题目。 -PNG +PNG 同时,各个公司在面试的过程中,或多或少都直接或间接问到过排序相关的内容(毕竟面试官不知道问什么时,都会用排序算法来救救场。不要问我是怎么知道的...),尤其是 **快排、堆排序、全排列** 等 Topic,在面试中屡试不爽。
百度:堆排序
-PNG +PNG
滴滴:全排列
-PNG +PNG 综上,得出结论**:为了offer~排序很重要,我们需要进行掌握。** @@ -31,7 +31,7 @@ date: 2020-06-14 插入排序:就是炸金花的时候,你**接一个同花顺**的过程。(标准定义:在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的) -PNG +PNG 代码示例: @@ -54,7 +54,7 @@ func insert_sort(arr []int) {     输入: -PNG +PNG 讲解完了插入排序,我们根据其思想,完成下面这道题目吧 @@ -81,13 +81,13 @@ func insert_sort(arr []int) {     ## 04、题目图解 -这道题,按照插入排序的思想,很容易可以想到题解。我们只需要遍历数组,当我们**遇到偶数时**,**将其插入到数组前最近的一个为奇数的位置,****与该位置的奇数元素交换**。为了达成该目的,我们引入一个指针 j,来维持这样一个奇数的位置。 +这道题,按照插入排序的思想,很容易可以想到题解。我们只需要遍历数组,当我们**遇到偶数时**,**将其插入到数组前最近的一个为奇数的位置,** **与该位置的奇数元素交换**。为了达成该目的,我们引入一个指针 j,来维持这样一个奇数的位置。
假设我们的数组为:[3,1,2,4] -PNG +PNG 根据以上分析,得到代码: @@ -106,5 +106,5 @@ func sortArrayByParity(A []int) []int { 执行结果: -PNG +PNG diff --git "a/website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/1.jpg" similarity index 100% rename from "website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/1.jpg" diff --git "a/website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/2.jpg" similarity index 100% rename from "website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/2.jpg" diff --git "a/website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/3.jpg" similarity index 100% rename from "website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/3.jpg" diff --git "a/website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/4.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/4.gif" similarity index 100% rename from "website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/4.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/4.gif" diff --git "a/website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/5.jpg" similarity index 100% rename from "website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/5.jpg" diff --git "a/website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/6.jpg" similarity index 100% rename from "website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/6.jpg" diff --git "a/website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/7.jpg" similarity index 100% rename from "website/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/10.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701/7.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801.md" similarity index 93% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801.md" index 300f015c..0ada1f88 100644 --- "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801.md" @@ -1,7 +1,7 @@ ---- -title: 使用位运算求和 + +## 使用位运算求和 date: 2020-06-19 ---- + > 今天为大家分享一道本应很简单的题目,但是却因增加了特殊条件,而大幅增加了难度。话不多说,直接看题。 @@ -58,11 +58,11 @@ class Solution { 利用这一特性,我们**将递归的返回条件取非然后作为 && 的第一个条件,递归主体转换为第二个条件语句**。我知道肯定有人又会懵圈了,所以我们绘图说明。假若这里n=3,大概就是下面这样: -PNG +PNG 这里还有一点要强调的就是,受制于各语言的语法规则,我们需要做一些额外的处理。比如Java,这里如果去掉前面的变量申明,就会直接报错。 -PNG +PNG 但是如果是C 就没有这样的问题: @@ -121,4 +121,4 @@ func sumNums(n int) int { 执行结果: -PNG \ No newline at end of file +PNG \ No newline at end of file diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/1.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/1.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/2.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/2.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/3.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801/3.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802.md" similarity index 80% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802.md" index fdc72829..044f526e 100644 --- "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802.md" @@ -1,7 +1,7 @@ ---- -title: 2的幂(231) + +## 2的幂(231) date: 2020-06-21 ---- + > 今天给大家分享一道比较简单但是很经典的题目。话不多说,直接看题。 @@ -50,17 +50,17 @@ date: 2020-06-21 先观察一些是2的幂的二进制数: -PNG +PNG **可以发现这些数,都是最高位为1,其他位为0**。所以我们把问题转化为“判断一个数的二进制,除了最高位为1,是否还有别的1存在”。然后我们再观察下面这样的一组数,对应着上面的数减去1: -PNG +PNG 我们对两组数求“&”运算: -PNG +PNG -可以看到,对于N为2的幂的数,**都有 N&(N-1)=0 ,**所以这就是我们的判断条件。(这个技巧可以记忆下来,在一些别的位运算的题目中也是会用到的) +可以看到,对于N为2的幂的数,**都有 N&(N-1)=0 ,** 所以这就是我们的判断条件。(这个技巧可以记忆下来,在一些别的位运算的题目中也是会用到的)
@@ -75,7 +75,7 @@ func isPowerOfTwo(n int) bool { 执行结果: -PNG +PNG ## 03、证明过程 @@ -83,9 +83,9 @@ func isPowerOfTwo(n int) bool {
-“阳春白雪,下里巴人”这个比喻虽然有点牵强,但是却难掩位运算的重要性。位运算在整个算法体系里,不少人可能会觉得有点食之无味、弃之可惜的意思。但其实,完全不是这样!有这种想法的,大多是初学者。对于这点,应该C系的玩家,会深有感触。万丈高楼平地起,暂且不说位运算在底层运算中占据了多大比重,单是整个leetcode列表里,打着位运算标签的题目就超过80余道,我想已经说明了问题。**至少,在面试这块,你必须对位运算了如指掌!**所以,今天的题目算是一个引子,后面我会出一个位运算的专题,希望尽我所能,帮助大家攻克这一类型的问题。 +“阳春白雪,下里巴人”这个比喻虽然有点牵强,但是却难掩位运算的重要性。位运算在整个算法体系里,不少人可能会觉得有点食之无味、弃之可惜的意思。但其实,完全不是这样!有这种想法的,大多是初学者。对于这点,应该C系的玩家,会深有感触。万丈高楼平地起,暂且不说位运算在底层运算中占据了多大比重,单是整个leetcode列表里,打着位运算标签的题目就超过80余道,我想已经说明了问题。**至少,在面试这块,你必须对位运算了如指掌!** 所以,今天的题目算是一个引子,后面我会出一个位运算的专题,希望尽我所能,帮助大家攻克这一类型的问题。 -PNG +PNG
diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/1.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/1.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/2.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/2.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/3.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/3.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/4.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/4.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/5.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802/5.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803.md" similarity index 91% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803.md" index ac466a3e..54a842b2 100644 --- "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803.md" @@ -1,7 +1,7 @@ ---- -title: 返回二进制中1的个数(191) + +## 返回二进制中1的个数(191) date: 2020-06-21 ---- + > 今天继续分享一道和位运算有关的题型,同样在难度上属于简单。我们还是从一道题开始吧 @@ -60,15 +60,15 @@ date: 2020-06-21 那如何计算当前是第几位呢,我们可以构造一个掩码来进行,说掩码可能大家听着有点懵逼,其实就是弄个1出来,1的二进制是这样: -PNG +PNG 我们只需要让这个掩码每次向左移动一位,然后与目标值求“&”,就可以判断目标值的当前位是不是1。比如目标值为21,21的二进制是这样: -PNG +PNG 然后每次移动掩码,来和当前位进行计算: -PNG +PNG 根据分析,完成代码: @@ -92,7 +92,7 @@ public class Solution { 执行结果: -PNG +PNG 注意:这里判断 n&mask 的时候,千万不要错写成 (n&mask) == 1,因为这里你对比的是十进制数。(恰好这个题我之前面试别人的时候问到过,对方就直接这么写了...) @@ -104,7 +104,7 @@ public class Solution { 大家是否还记得昨天学会的技巧,昨天的题目我们通过计算 n & n-1 的值,来判断是否是 2 的幂。今天我们继续使用这个技巧,观察一下,**对于任意一个数,将 n 和 n-1 进行 & 运算,我们都可以把 n 中最低位的 1 变成 0**。比如下面这两对数: -PNG +PNG 那下面就简单了,只需要不断进行这个操作就可以了。(翻CPP牌子,有没有好评的?) @@ -126,7 +126,7 @@ public: 肯定有人又是看的一脸懵逼,我们拿 11 举个例子:(注意最后一位1变成0的过程) -PNG +PNG
diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/1.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/1.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/2.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/2.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/3.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/3.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/4.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/4.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/5.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/5.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/6.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803/6.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804.md" similarity index 96% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804.md" index 21b2ec9e..b974ded7 100644 --- "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804.md" @@ -1,7 +1,7 @@ ---- -title: 只出现一次的数字(136) + +## 只出现一次的数字(136) date: 2020-06-23 ---- + > 今天仍然分享一道关于位运算颇为简单的题型,同时,从明天开始将会提高难度,大家做好准备。 @@ -65,7 +65,7 @@ date: 2020-06-23 可能有人直接都不知道异或是什么,所以还是举个例子,比如5异或3,也就是5⊕3,也就是5^3,是下面这样: -PNG +PNG 根据分析,得出代码:(c 版本) @@ -112,7 +112,7 @@ class Solution: 执行结果: -PNG +PNG ## 03、题目进阶 diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804/1.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804/1.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804/2.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804/2.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805.md" similarity index 89% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805.md" index 05af0d24..589c3edd 100644 --- "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805.md" @@ -1,7 +1,7 @@ ---- -title: 只出现一次的数字Ⅱ(137) + +## 只出现一次的数字Ⅱ(137) date: 2020-06-23 ---- + > 昨天我们在“除了某个元素只出现一次以外,其余每个元素均出现二次”的条件下,通过使用“异或”的操作,找到了只出现一次的元素。那对于其余每个元素均出现三次的case,我们应该如何解决呢?一起来看下吧。 @@ -73,7 +73,7 @@ func singleNumber(nums []int) int { 执行结果: -PNG +PNG ## 03、数学方式 @@ -87,7 +87,7 @@ func singleNumber(nums []int) int { 也就是说,如果把**原数组去重、再乘以3得到的值,刚好就是要找的元素的2倍**。举个例子: -PNG +PNG 利用这个性质,进行求解:(python代码如下,这里要注意的是,使用int可能会因为超出界限报错) @@ -99,7 +99,7 @@ class Solution: 执行结果: -PNG +PNG ## 04、位运算 @@ -113,15 +113,15 @@ class Solution: 假如我们有 [21,21,26] 三个数,是下面这样: -PNG +PNG 回想一下,之所以能用“**异或**”,其实我们是完成了一个 **同一位上有2个1清零** 的过程。上面的图看起来可能容易,如果是这样 (下图应为26^21): -PNG +PNG -那对于“每个其余元素,均出现了三次”也是一样,如果我们可以完成 **一个同一位上的三个1清零的过程,**也就是 a ?a ?a = 0,问题则迎刃冰解。那因为各语言中都没有这样一个现成的方法可以使用,所以我们需要构造一个。(想象一下,位运算也是造出来的对不对?) +那对于“每个其余元素,均出现了三次”也是一样,如果我们可以完成 **一个同一位上的三个1清零的过程,** 也就是 a ?a ?a = 0,问题则迎刃冰解。那因为各语言中都没有这样一个现成的方法可以使用,所以我们需要构造一个。(想象一下,位运算也是造出来的对不对?) -PNG +PNG 如何构造,这里先说第一种方法(注意,到这里我们的问题已经转化成了定义一种 a ? a ? a = 0 的运算),观察一下“异或”运算: @@ -130,7 +130,7 @@ class Solution:
0^1=1
是不是可以理解为,其实就是二进制的加法,然后砍掉进位呢? -PNG +PNG **砍掉进位的过程,是不是又可以理解为对 2 进行取模**,也就是取余。到了这里,问题已经非常非常明确了。那我们要完成一个 a ? a ? a = 0 的运算,是不是其实就是让其二进制的每一位数都相加,最后再对 3 进行一个取模的过程呢?(一样,如果要定义一个 a ? a ? a ? a = 0 的运算,那就最后对 4 进行取模就可以了) @@ -154,19 +154,19 @@ func singleNumber(nums []int) int { 如果对上面的代码不能理解,可以看看这个图,假设只有一个数 [21],我们通过不断右移的方式,获取其每一位上的1。当然,这里因为余数都是1,所以肯定都保留了下来,然后与 1 进行 “与”运算,最终再将其放入到对应的位数上。 -PNG +PNG 执行结果: -PNG +PNG 在上面的代码中,**我们通过一个number,来记录每一位数出现的次数**。但是缺点是,我们记录了64位(Go语言中,int为32位以上) -PNG +PNG 那如果我们可以同时对所有位进行计数,是不是就可以简化过程。因为我们的目的是把每一位与3取模进行运算,是不是就可以理解为其实是一个**三进制**。如果大家听不懂三进制的话,可以简单理解为3次一循环,也就是 00 - 01 - 10 - 11。但是又因为对于 11 这种情况,我们需要砍掉(上面已经说过了,相当于 11 - 00 的转化),所以我们就只有3个状态,00 - 01 - 10,所以我们采用 a 和 b 来记录状态。其中的状态转移过程如下: -PNG +PNG 这里 a‘ 和 b’ 的意思代表着 a 和 b 下一次的状态。next 代表着下一个 bit 位对应的值。然后这是什么,不就是状态机嘛。。。我们通过 a 和 b 的状态变化,来完成次数统计。 @@ -220,7 +220,7 @@ class Solution { 当然,这个解法就相当牛皮了,反正我第一次做肯定是想不到的。。。我看了一下,第一个给出这个解法的人,应该是一位国外的工程师(某扣上面有很多人其实都是把题解翻译过来的,当然我有时也会哈哈哈哈,我觉得这某种意义上讲也是一个好的现象,挺好)不过毕竟非原创,还是得说明一下! -PNG +PNG
diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/1.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/1.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/10.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/10.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/11.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/11.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/11.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/11.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/12.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/12.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/12.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/12.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/2.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/2.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/3.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/3.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/4.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/4.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/5.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/5.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/6.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/6.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/7.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/7.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/8.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/8.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/9.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805/9.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806.md" similarity index 93% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806.md" index edceaf62..768526ae 100644 --- "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806.md" @@ -1,7 +1,7 @@ ---- -title: 缺失数字(268) + +## 缺失数字(268) date: 2020-06-24 ---- + > 上一篇题目的难度可能对很多同学引起了不适,今天将回归一道比较简单的题目,大概耗时2-3分钟即可学习! @@ -51,13 +51,13 @@ date: 2020-06-24 > 说高斯公式,估计大家听着懵逼,其实就是那个 1 2 3 ... n = (1 n) * n / 2,即: > -> PNG +> PNG
首先求出数组的和,然后再利用公式求出前n 1项之和,最终求差值,即为缺失的值!比如下面长度为4的数组,缺失4。 -PNG +PNG - 2 + 3 + 1 + 5 = 11 - (1 5) * 5 / 2=15 @@ -87,7 +87,7 @@ class Solution { 执行结果: -PNG +PNG ## 03、位运算求解 diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/1.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/1.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/2.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/2.jpg" diff --git "a/website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/3.jpg" similarity index 100% rename from "website/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/11.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806/3.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901.md" similarity index 94% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901.md" index b327145a..f4f382d0 100644 --- "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901.md" @@ -1,7 +1,7 @@ ---- -title: 爱吃香蕉的珂珂(875) + +## 爱吃香蕉的珂珂(875) date: 2020-06-30 ---- + ## 01、题目示例 @@ -72,15 +72,15 @@ date: 2020-06-30 在最简单的形式中,二分查找对具有指定左索引和右索引的**连续序列**进行操作。我们也称之为**查找空间**。二分查找维护查找空间的左、右和中间指示符,并比较查找目标;如果条件不满足或值不相等,则清除目标不可能存在的那一半,并在剩下的一半上继续查找,直到成功为止。 -PNG +PNG 举例说明:比如你需要找1-100中的一个数字,你的目标是**用最少的次数**猜到这个数字。你每次猜测后,我会说大了或者小了。而你只需要每次猜测中间的数字,就可以将余下的数字排除一半。 -PNG +PNG 不管我心里想的数字如何,你在7次之内都能猜到,这就是一个典型的二分查找。每次筛选掉一半数据,所以我们也称之为 **折半查找**。一般而言,对于包含n个元素的列表,用二分查找最多需要log2n步。 -PNG +PNG 当然,一般题目不太可能给你一个如此现成的题型,让你上手就可以使用二分,所以我们需要思考,如何来构造一个成功的二分查找。大部分的二分查找,基本都由以下三步组成: @@ -151,7 +151,7 @@ public int binarySearch(int[] array, int des) {
-注意,绝大部分**「在递增递减区间中搜索目标值」** 的问题,都可以转化为二分查找问题。并且,二分查找的题目,基本逃不出三种:找特定值,找大于特定值的元素(上界),找小于特定值的元素(下界)。 +注意,绝大部分 **「在递增递减区间中搜索目标值」** 的问题,都可以转化为二分查找问题。并且,二分查找的题目,基本逃不出三种:找特定值,找大于特定值的元素(上界),找小于特定值的元素(下界)。
@@ -224,7 +224,7 @@ public class Solution { 执行结果: -PNG +PNG
diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/1.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/1.gif" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/1.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/1.gif" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/2.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/2.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/3.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/3.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/4.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901/4.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902.md" similarity index 92% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902.md" index dee2c05e..a919e63e 100644 --- "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902.md" @@ -1,7 +1,7 @@ ---- -title: x的平方根(69) + +## x的平方根(69) date: 2020-06-30 ---- + > 今天继续为大家分享二分法系列篇的内容,看一道比较简单的题目。 @@ -35,7 +35,7 @@ Left 设置为 1 比较容易理解,因为我们可以直接处理掉 x 为 0 我们看一下下面这些数的值: -PNG +PNG 很容易观察出,当 x>2 时,它的**整数平方根**一定小于等于 x/2 。即有 0 < 整数平方根 <= x/2。所以我们的问题转化为在 [0,x/2] 中找一个**特定值**,满足二分查找的条件。(当然,如果没有想到使用 x/2 作为 Right 而 直接使用 x ,其实也是可以的) @@ -132,7 +132,7 @@ public class Solution {
-那么问题来了,如何可以彻底掌握二分法?初期我并不建议大家直接去套模板,这样意义不是很大,因为套模板很容易边界值出现错误(当然,也可能我的理解还不够深入,网上有很多建议是去直接套模板的)我的建议是:**去思考二分法的本质,了解其通过收敛来找到目标的内涵****,对每一个二分的题目都进行深度剖析,多分析别人的答案**。你得知道,**每一个答案,背后都是对方的思考过程**。从这些过程中抽茧剥丝,最终留下的,才是二分的精髓。也只有到这一刻,我认为才可以真正的说一句掌握了二分。毕竟模板的目的,也是让大家去思考模板背后的东西,而不是模板本身。 +那么问题来了,如何可以彻底掌握二分法?初期我并不建议大家直接去套模板,这样意义不是很大,因为套模板很容易边界值出现错误(当然,也可能我的理解还不够深入,网上有很多建议是去直接套模板的)我的建议是:**去思考二分法的本质,了解其通过收敛来找到目标的内涵** **,对每一个二分的题目都进行深度剖析,多分析别人的答案**。你得知道,**每一个答案,背后都是对方的思考过程**。从这些过程中抽茧剥丝,最终留下的,才是二分的精髓。也只有到这一刻,我认为才可以真正的说一句掌握了二分。毕竟模板的目的,也是让大家去思考模板背后的东西,而不是模板本身。
diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902/1.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902/1.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903.md" similarity index 96% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903.md" index 1df4f10c..e0e3a046 100644 --- "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903.md" @@ -1,7 +1,7 @@ ---- -title: 第一个错误的版本(287) + +## 第一个错误的版本(287) date: 2020-06-30 ---- + > 如果你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的,所以我们需要回滚代码,那如何能找到错误的版本呢? @@ -51,11 +51,11 @@ public int firstBadVersion(int n) { 我们自然是采用二分的思想,来进行查找。举个例子,比如我们版本号对应如下: -PNG +PNG 如果中间的mid如果是错误版本,那我们就知道 mid 右侧都不可能是第一个错误的版本。那我们就令 right = mid,把下一次搜索空间变成[left, mid],然后自然我们很顺利查找到目标。 -PNG +PNG 根据分析,代码如下: diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903/1.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903/1.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903/2.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903/2.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904.md" similarity index 83% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904.md" index adca910e..b2442064 100644 --- "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904.md" @@ -1,7 +1,7 @@ ---- -title: 旋转排序数组中的最小值Ⅰ(153) + +## 旋转排序数组中的最小值Ⅰ(153) date: 2020-07-03 ---- + > 今天继续为大家讲解二分查找,分享一道知乎面试题。话不多说,直接看题。 @@ -35,29 +35,29 @@ date: 2020-07-03
-当然,本题可以直接暴力搜索,但是这就就会被面试官撵出去。为了不被他撵出去,我们还是使用二分更为稳妥!**在****二分搜索中,我们找到区间的中间点并根据某些条件决定去区间左半部分还是右半部分搜索**。但是麻烦的是,我们的数组被旋转了,因此肯定不能直接使用二分。那我们需要先观察一下,假若我们的原始数组如下: +当然,本题可以直接暴力搜索,但是这就就会被面试官撵出去。为了不被他撵出去,我们还是使用二分更为稳妥!**在二分搜索中,我们找到区间的中间点并根据某些条件决定去区间左半部分还是右半部分搜索**。但是麻烦的是,我们的数组被旋转了,因此肯定不能直接使用二分。那我们需要先观察一下,假若我们的原始数组如下: -PNG +PNG 无论怎么旋转,我们都可以得到一个结论,首元素 > 尾元素,像是下面这样。虽然不知道这个结论有什么用,但是我们先记下来。 -PNG +PNG 继续进行观察,上面其实是两种极端情况,那如果普通的情况旋转,大概是下面这样: -PNG +PNG 问题似乎变得简单了,旋转将原数组一分为二,并且我们已知了首元素值总是大于尾元素,那我们只要找到将其一分为二的那个点(该点左侧的元素都大于首元素,该点右侧的元素都小于首元素),是不是就可以对应找到数组中的最小值。 -PNG +PNG 然后我们通过二分来进行查找,先找到中间节点mid,如果中间元素大于首元素,我们就把mid向右移动。 -PNG +PNG 如果中间元素小于首元素,我们就把mid向左移动。 -PNG +PNG 根据分析,完成题解: @@ -120,7 +120,7 @@ int findMin(int* nums, int numsSize){ 执行结果: -PNG +PNG ## 03、课后思考 diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/1.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/1.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/2.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/2.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/3.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/3.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/4.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/4.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/5.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/5.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/6.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/6.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/7.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904/7.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905.md" similarity index 92% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905.md" index 9af7d12d..90b1c00a 100644 --- "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905.md" @@ -1,7 +1,7 @@ ---- -title: 旋转排序数组中的最小值Ⅱ(154) + +## 旋转排序数组中的最小值Ⅱ(154) date: 2020-07-03 ---- + > 今天继续为大家讲解二分法系列篇 - 旋转排序数组最小值Ⅱ(进阶版)。话不多说,直接看题: @@ -38,9 +38,9 @@ date: 2020-07-03 > 之前我也说过,通过改变题中条件,使得题目难度上升的做法。在算法题目的设计中,是一种非常常见的手段。本题就是这样,从中等变成了困难。 -PNG +PNG -PNG +PNG 在讲解本题之前,首先要对昨天的题目进行一个答疑。昨天有人问我为什么题目中讲的是与left进行比较,但是最后代码中写的时候变成了和right比较。这个确实是我讲的时候讲忘了,但是这其实是一个思维转化的问题:因为在旋转之前的原数组是一个递增序列,那一定是左边的数小,右边的数大,而我们要找的是最小值,所以比较偏向左找。那如果和left进行比较,其实也是完全ok的,那我们的思路就变成了找到偏右的最大值,进而向右再移动一位,自然也就是最小值。如果不能理解的话,可以回顾一下昨天的文章: @@ -80,10 +80,10 @@ func findMin(nums []int) int { 对比一下下面两个图: -PNG +PNG
(无重复)
-PNG +PNG
(有重复)
其实直接就可以给出代码了: @@ -112,12 +112,12 @@ class Solution { 如果我们再对比一下代码的差异,就会非常的明显: -PNG +PNG
(左边是有重复,右边是无重复)
可以看到在 nums[mid] 等于 nums[right] 时的情况下,我们只多了一个 right-1 的操作。这里需要额外说明的是,为什么要这样做?我看leetcode上的题解,这块很多都是长篇大论,其实没那么复杂,一句话就可以给你讲明白,看看下面这个! -PNG +PNG 因为 mid 和 right 相等时,最小值既可能在左边,又可能在右边,所以此时自然二分思想作废,咱们就砍掉一个右边界。说白了,就是**让子弹再飞一会儿**。 diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/1.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/1.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/2.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/2.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/3.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/3.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/4.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/4.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/5.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/5.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/6.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905/6.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906.md" similarity index 95% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906.md" index 897a51d1..84def6c5 100644 --- "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906.md" @@ -1,11 +1,11 @@ ---- -title: 供暖器(475) + +## 供暖器(475) date: 2020-07-06 ---- + > 当然不能让你真的去修供暖器,但是如果你真的很有兴趣,可以参考下面步骤: -PNG +PNG 今天为大家分享一道腾讯校招面试题,话不多说,一起来看题吧。 @@ -53,7 +53,7 @@ date: 2020-07-06 这个题目还是比较有趣的,解题的关键在于读懂题意:我们要对任意一个房屋供暖,要么用前面的暖气,要么用后面的暖气,两者之间取最近的,这就是距离。同时,如果要覆盖到所有的房屋,我们要选择上述距离中最大的一段,这就是最小的加热半径。 -PNG +PNG 当然,我们可以采用暴力题解,通过双层遍历,第一层:遍历所有的房子,第二层:遍历加热器,找出距离该房子的最小距离。但是我们其实可以通过二分搜索来优化这个过程。 @@ -95,7 +95,7 @@ public: 最后还有一点要强调的就是:代码在刚开始的时候进行了一次排序。这个也是容易进入的误区,题目给的样例给人一种错觉 “提供的就是有序数组”,其实题中并没有说明,我第一次就犯了这样的错误。如果去掉排序的代码,就会报错: -PNG +PNG ## 03、其他 diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/1.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/1.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/2.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/2.jpg" diff --git "a/website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/3.jpg" similarity index 100% rename from "website/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/12.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906/3.jpg" diff --git "a/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1.md" new file mode 100644 index 00000000..59dd190a --- /dev/null +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1.md" @@ -0,0 +1,144 @@ + +## 全排列算法 +date: 2020-07-11 + + +> 今天为大家分享如何用算法来求全排列!话不多说,直接看题! + +## 01、全排列概念 + +> 什么是全排列?从 n 个不同元素中任取 m(m≤n)个元素,按照一定的顺序排列起来,叫做从 n 个不同元素中取出 m 个元素的一个排列。当 m=n 时所有的排列情况叫全排列。 + +
+ +比如 [1,2,3] 全排列共有 6 种: + +PNG + +## 02、全排列题目 + +> 然后把上面的全排列稍微改改,就变成了一道算法题。。。 + +| 全排列问题 | +| ---------------------------------------------------------- | +| 给定一个 **没有重复** 数字的序列,返回其所有可能的全排列。 | + +**示例:** + +``` +输入: [1,2,3] + +输出: +[ + [1,2,3], + [1,3,2], + [2,1,3], + [2,3,1], + [3,1,2], + [3,2,1] +] +``` + +## 03、题解分析 + +> 这种由基础数学知识改编而成的题目,在面试时还是很受欢迎的。因为作为面试官,可以用这种题目,来显示自己的博学。(谬论) + +
+ +假如我们不是做算法题,而是做数学题。我们会一个位置一个位置的来考虑,先写出以1开头的排列,再写出以2开头的排列,最后写出以3开头的排列。 + +PNG + +这种思路是不是很像深度优先(DFS)的求解过程呢? + +
+ +1、我们先选择 1,然后为 1 的第二位选择 2,此时 1 的 第三位只能选择 3。 + +PNG + +2、然后完成了上面的步骤,我们需要回退到 1,因为只有 1 这里还存在别的选择 1-3,然后填写 1-3 后,只有 1-3-2 一种选择。 + +PNG + +3、此时我们需要从 1-3-2,回退到 1-3,再回退到 1,再回退到 根节点,然后重新选择 2。 + +PNG + +4、后面的流程与前面相似,我就不一步步的描述了。 + +PNG + +当然,如果不省略其回溯过程,就是下面这个样子: + +[TODO] + +上面分析是分析完了,但是仍然不妨碍你继续懵逼。。。“题目中不是给我的是一个数组吗?作为一个合格的算法小白,我特么根本就不知道 DFS 在这里面咋用啊!!”本来想扔完代码就走,想了想还是决定讲一下。 + +
+ +我们把代码先丢出来(注意,这个代码不是最优的,这样写只是易于大家理解。比如我们还可以通过置换的方式来进行优化,又或者其他的优化方法。但是都大同小异,核心是回溯的过程): + +```java +//JAVA +class Solution { + List> ans = new ArrayList<>(); + + public List> permute(int[] nums) { + dfs(nums, new ArrayList<>()); + return ans; + } + + private void dfs(int[] nums, List tmp) { + System.out.println(Arrays.toString(nums) + "," + tmp); + if (tmp.size() == nums.length) { + ans.add(new ArrayList<>(tmp)); + } else { + for (int num : nums) { + if (!tmp.contains(num)) { + tmp.add(num); + dfs(nums, tmp); + tmp.remove(tmp.size() - 1); + } + } + } + } + +} +``` + +假若 nums 为 [1,2,3],会有下面的输出: + +PNG + +其实这个代码还是很容易理解的,他干了个啥事?就是当我们按顺序去枚举每一位时,我们要把已经选择过的数字排除掉(第16行代码),比如我们上面选择三个数字: + +
+ +- 在枚举第一位的时候,就有三种情况 +- 在枚举第二位的时候,就只有两种情况(前面已经出现的一个数字不可以再出现) +- 在枚举第三位的时候,就只有一种情况(前面已经出现的两个数字不可以再出现) + +
+ +整个代码其实就干了这么一件事!而 第12行 的代码,其实就是说**当枚举到最后一位的时候,这个就是我们要的排列结果,所以我们要放入到全排列结果集中。** + +
+ +那这里还有一个很重要的代码,其实是 第19行,这一步其实是干啥!说白了就是在回到上一位时,我们要就把上一次的选择结果**撤销**掉。不然如果你之前选过了,后面不就不能继续用了么。 + +## 04、总结 + +> 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 + +
+ +这是最简单的一道全排列题目,注意我在上面的题解中,并没有引入什么状态、路径、选择列表、结束条件之类的专业术语,甚至我连回溯的概念都没有提及。 + +PNG + +之所以这样讲,我是希望咱可以从最简单的人类思考出发,而不是去套用一些框架之类的东东。。。。当然,至于更多的概念和回溯框架的东西,我会在后面更为复杂的题目中为大家引入。 + +
+ +好了,基本就是这样了。周末写文不容易,求个转发,来个评论。感谢~ \ No newline at end of file diff --git "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/1.jpg" similarity index 100% rename from "website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/1.jpg" diff --git "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/1.mp4" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/1.mp4" similarity index 100% rename from "website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/1.mp4" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/1.mp4" diff --git "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/2.jpg" similarity index 100% rename from "website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/2.jpg" diff --git "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/3.jpg" similarity index 100% rename from "website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/3.jpg" diff --git "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/4.jpg" similarity index 100% rename from "website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/4.jpg" diff --git "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/5.jpg" similarity index 100% rename from "website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/5.jpg" diff --git "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/6.jpg" similarity index 100% rename from "website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/6.jpg" diff --git "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/7.jpg" similarity index 100% rename from "website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/7.jpg" diff --git "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/8.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/8.gif" similarity index 100% rename from "website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1/8.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/13.\345\233\236\346\272\257\347\263\273\345\210\227/1/8.gif" diff --git "a/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01.md" new file mode 100644 index 00000000..901c96f1 --- /dev/null +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01.md" @@ -0,0 +1,152 @@ + +## 螺旋矩阵Ⅰ(54) +date: 2020-06-15 + + +> 今天为大家分享一道关于**螺旋矩阵**的问题。话不多说,直接看题目吧。 + +## 01、题目分析 + +| 第54题:螺旋矩阵 | +| ------------------------------------------------------------ | +| 定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 | + +**示例 1:** + +``` +输入: +[ + [ 1, 2, 3 ], + [ 4, 5, 6 ], + [ 7, 8, 9 ] +] +输出: [1,2,3,6,9,8,7,4,5] +``` + +**示例 2:** + +``` +输入: +[ + [1, 2, 3, 4], + [5, 6, 7, 8], + [9,10,11,12] +] +输出: [1,2,3,4,8,12,11,10,9,5,6,7] + + +``` + +## 02、题目分析 + +本题的思路,在于**模拟螺旋的移动轨迹**。 + +问题的难点,在于**想明白模拟过程中会遇到什么问题**。 + +那模拟的过程中会遇到什么样的问题?**边界处理**。 + +
+ +因为只有我们能找到边界(边界包括:1、数组的边界 2、已经访问过的元素),才可以通过“**右,下,左,上**”的方向来进行移动。同时,每一次**碰壁**,就可以调整到下一个方向。 + +
+ +思路明确了,我们看一下整个过程。假如我们的数组为: + +[ + + [1, 2, 3, 4], + + [5, 6, 7, 8], + + [9,10,11,12] + +] + +数组如下图所示: + +PNG + +我们首先对其设置好四个边界: + +``` +up := 0 +down := len(matrix) - 1 +left := 0 +right := len(matrix[0]) - 1 +``` + +如下图所示: + +PNG + +同时,我们定义x和y,来代表行和列。 + +如x=2,y=1,则 arr[2][1]=10(第3行第2列) + +PNG + +然后我们从第一个元素开始行军(y=left),完成第一行的遍历,直到碰壁。(y<=right) + +PNG + +下面关键的一步来了,**因为第一行已经走过了,我们将上界下调** **(up++)**,同时转弯向下走。 + +PNG + +直到碰到底部时(x<=down),我们将**右界左调(right--)**,转弯向左走。 + +PNG + +后面向左和向上,分别完成**下界上调(down--)**和**左界右调(left++)**。 + +PNG + +最后,对剩下的矩阵重复整个过程,直到上下、左右的壁与壁碰在一起 **(up <= down && left <= right,这是避免碰壁的条件)**。 + +## 03、Go语言示例 + +所以这道题很简单,只要会碰壁,就可以顺利得到代码(很漂亮,不是吗?),代码如下: + +```go +func spiralOrder(matrix [][]int) []int { + var result []int + if len(matrix) == 0 { + return result + } + left, right, up, down := 0, len(matrix[0])-1, 0, len(matrix)-1 + + var x, y int + for left <= right && up <= down { + for y = left; y <= right && avoid(left, right, up, down); y++ { + result = append(result, matrix[x][y]) + } + y-- + up++ + for x = up; x <= down && avoid(left, right, up, down); x++ { + result = append(result, matrix[x][y]) + } + x-- + right-- + for y = right; y >= left && avoid(left, right, up, down); y-- { + result = append(result, matrix[x][y]) + } + y++ + down-- + for x = down; x >= up && avoid(left, right, up, down); x-- { + result = append(result, matrix[x][y]) + } + x++ + left++ + } + return result +} + +func avoid(left, right, up, down int) bool { + return up <= down && left <= right +} +``` + +执行结果: + +PNG \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/1.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/1.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/2.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/2.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/3.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/3.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/3.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/3.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/4.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/4.jpeg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/4.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/4.jpeg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/5.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/5.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/5.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/5.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/8.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/8.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/8.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01/8.png" diff --git "a/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02.md" new file mode 100644 index 00000000..abe27b70 --- /dev/null +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02.md" @@ -0,0 +1,109 @@ + +## 只有两个键的键盘(650) +date: 2020-06-15 + + +>今天为大家分享一道关于 **“复制” + “粘贴”** 的题目。话不多说,直接看题吧。 + +## 01、题目分析 + +| 第650题:只有两个键的键盘 | +| ------------------------------------------------------------ | +| 最初在一个记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) : 你可以粘贴你上一次复制的字符。 | + +给定一个数字 n 。你需要使用**最少的操作次数**,在记事本中打印出恰好 n 个 'A'。输出能够打印出 n 个 'A' 的最少操作次数。 + +
+ +**示例 1:** + +``` +输入: 3 +输出: 3 +解释: +最初, 我们只有一个字符 'A'。 +第 1 步, 我们使用 Copy All 操作。 +第 2 步, 我们使用 Paste 操作来获得 'AA'。 +第 3 步, 我们使用 Paste 操作来获得 'AAA'。 +``` + +
+ +**说明:** + +n 的取值范围是 [1, 1000] 。 + +## 02、题目分析 + +本题的思路,在于**想明白复制和粘贴过程中的规律,找到如何组成N个A的最小操作数。** + +
+ +我们从最简单的开始分析,假如我们给定数字为1,那啥也不用做,因为面板上本来就有一个A。 + +PNG + +假如我们给定数字为2,那我们需要做C-P,共计2次操作来得到。 + +PNG + +假如我们给定数字为3,那我们需要做C-P-P,共计3次操作来得到。 + +PNG + +假如我们给定数字为4,我们发现好像变得不一样了。因为我们有两种方法都可以得到目标。(C-P-C-P) + +PNG + +或者(C-P-P-P) + +PNG + +但是需要的步骤还是一样。 + +
+ +好了,到这里为止,STOP!通过上面的分析,我们至少可以观察出:**如果 i 为质数,那么 i 是多少,就需要粘贴多少次**。即:素数次数为本身的结论。如 两个A = 2,三个A = 3,五个A = 5。 + +
+ +那对于合数又该如何分析呢?(自然数中除能被1和本身整除外,还能被其他的数整除的数)这里我们直接给出答案:合数的次数为**将其分解质因数的操作次数的和。** 解释一下,这是个啥意思?举个例子: + +
+ +比如30,可以分解为:3*2*5。什么意思呢?我们演示一遍:首先复制1,进行2次粘贴得到3。然后复制3,进行1次粘贴得到6。然后复制6,进行4次粘贴得到30。总共需要(CPPCPCPPPP) + +PNG + +> 注意:这里由于每一次都需要进行一次复制,**所以直接就等于分解质因数的操作次数的和**。并且分解的顺序,不会影响到结果。 + +
+ +综合上面的分析,我们得出分析结果: + +1、质数次数为其本身。 + +2、合数次数为将其分解到**所有不能再分解的质数的操作次数的和**。 + +
+ +## 03、Go语言示例 + +分析完毕,代码如下所示: + +```go +func minSteps(n int) int { + res := 0 + for i := 2; i <= n; i++ { + for n%i == 0 { + res += i + n /= i + } + } + return res +} +``` + +执行结果: + +PNG \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/4.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/4.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/4.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/4.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02/7.jpg" diff --git "a/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03.md" new file mode 100644 index 00000000..499f882e --- /dev/null +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03.md" @@ -0,0 +1,265 @@ + +## 24点游戏(679) +date: 2020-06-15 + + +>“**24点**”是一种数学游戏,正如象棋、围棋一样是一种人们喜闻乐见的娱乐活动。它始于何年何月已无从考究,但它以自己独具的数学魅力和丰富的内涵正逐渐被越来越多的人们所接受。今天就为大家分享一道关于“24点”的算法题目。 +> +>
+> +>话不多说,直接看题。 + +## 01、题目分析 + +| 第679题:24点游戏 | +| ------------------------------------------------------------ | +| 你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通 *,/,+,-,(,) 的运算得到 24 。 | + +**示例 1:** + +``` +输入: [4, 1, 8, 7] +输出: True +解释: (8-4) * (7-1) = 24 +``` + +**示例 2:** + +``` +输入: [1, 2, 1, 2] +输出: False +``` + +注意: + +​ 1、除法**运算符 / 表示实数除法,而不是整数除法**。例如 4 / (1 - 2/3) = 12 。 + +​ 2、每个运算符对两个数进行运算。特别是我们不能用 - 作为一元运算符。例如,[1, 1, 1, 1] 作为输入时,表达式 -1 - 1 - 1 - 1 是不允许的。 + +​ 3、你不能将数字连接在一起。例如,输入为 [1, 2, 1, 2] 时,不能写成 12 + 12 。 + +
+ +## 02、题目分析 + +拿到题目,第一反应就可以想到**暴力求解。如果我们要判断给出的4张牌是否可以通过组合得到24,那我们只需找出所有的可组合的方式进行遍历。** + +
+ +4个数字,3个操作符,外加括号,基本目测就能想到组合数不会大到超出边界。所以,我们只要**把他们统统列出来,不就可以进行求解了吗**?说干就干! + +
+ +我们首先定义个方法,用来判断**两个数的的所有操作符组合是否可以得到24**。 + +```go +func judgePoint24_2(a, b float64) bool { + return a+b == 24 || a*b == 24 || a-b == 24 || b-a == 24 || a/b == 24 || b/a == 24  +} +``` + +但是这个方法写的正确吗?其实不对!因为在计算机中,实数在计算和存储过程中会有一些微小的误差,**对于一些与零作比较的语句来说,有时会因误差而导致原本是等于零但结果却小于或大于零之类的情况发生**,所以常用一个很小的数 **1e-6** 代替 0,进行判读! + +
+ +(1e-6:表示1乘以10的负6次方。Math.abs(x)<1e-6 其实相当于x==0。1e-6(也就是0.000001)叫做**epslon**,用来抵消浮点运算中因为误差造成的相等无法判断的情况。这个知识点需要掌握!) + +
+ +举个例子: + +```go +func main() { + var a float64 + var b float64 + b = 2.0 + //math.Sqrt:开平方根 + c := math.Sqrt(2) + a = b - c*c + fmt.Println(a == 0)                  //false + fmt.Println(a < 1e-6 && a > -(1e-6)) //true +} +``` + +这里直接用 **a==0** 就会得到false,但是通过 **a < 1e-6 && a > -(1e-6)** 却可以进行准确的判断。 + +
+ +所以我们将上面的方法改写: + +```go +//go语言 +//judgePoint24_2:判断两个数的所有操作符组合是否可以得到24 func judgePoint24_2(a, b float64) bool { + return (a+b < 24+1e-6 && a+b > 24-1e-6) || + (a*b < 24+1e-6 && a*b > 24-1e-6) || + (a-b < 24+1e-6 && a-b > 24-1e-6) || + (b-a < 24+1e-6 && b-a > 24-1e-6) || + (a/b < 24+1e-6 && a/b > 24-1e-6) || + (b/a < 24+1e-6 && b/a > 24-1e-6)  +} +``` + +完善了通过两个数来判断是否可以得到24的方法,现在我们加一个判断三个数是否可以得到24的方法。 + +```go +//硬核代码,不服来辩! +func judgePoint24_3(a, b, c float64) bool { 3 + return judgePoint24_2(a+b, c) || + judgePoint24_2(a-b, c) || + judgePoint24_2(a*b, c) || + judgePoint24_2(a/b, c) || + judgePoint24_2(b-a, c) || + judgePoint24_2(b/a, c) ||        + judgePoint24_2(a+c, b) || + judgePoint24_2(a-c, b) || + judgePoint24_2(a*c, b) || + judgePoint24_2(a/c, b) || + judgePoint24_2(c-a, b) || + judgePoint24_2(c/a, b) || + judgePoint24_2(c+b, a) || + judgePoint24_2(c-b, a) || + judgePoint24_2(c*b, a) || + judgePoint24_2(c/b, a) || + judgePoint24_2(b-c, a) || + judgePoint24_2(b/c, a) +} +``` + +好了。三个数的也出来了,我们再加一个判断4个数为24点的方法:(排列组合,我想大家都会....) + +```go +//硬核代码,不服来辩! +func judgePoint24(nums []int) bool { + return judgePoint24_3(float64(nums[0])+float64(nums[1]), float64(nums[2]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])-float64(nums[1]), float64(nums[2]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])*float64(nums[1]), float64(nums[2]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])/float64(nums[1]), float64(nums[2]), float64(nums[3])) || + judgePoint24_3(float64(nums[1])-float64(nums[0]), float64(nums[2]), float64(nums[3])) || + judgePoint24_3(float64(nums[1])/float64(nums[0]), float64(nums[2]), float64(nums[3])) || + + judgePoint24_3(float64(nums[0])+float64(nums[2]), float64(nums[1]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])-float64(nums[2]), float64(nums[1]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])*float64(nums[2]), float64(nums[1]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])/float64(nums[2]), float64(nums[1]), float64(nums[3])) || + judgePoint24_3(float64(nums[2])-float64(nums[0]), float64(nums[1]), float64(nums[3])) || + judgePoint24_3(float64(nums[2])/float64(nums[0]), float64(nums[1]), float64(nums[3])) || + + judgePoint24_3(float64(nums[0])+float64(nums[3]), float64(nums[2]), float64(nums[1])) || + judgePoint24_3(float64(nums[0])-float64(nums[3]), float64(nums[2]), float64(nums[1])) || + judgePoint24_3(float64(nums[0])*float64(nums[3]), float64(nums[2]), float64(nums[1])) || + judgePoint24_3(float64(nums[0])/float64(nums[3]), float64(nums[2]), float64(nums[1])) || + judgePoint24_3(float64(nums[3])-float64(nums[0]), float64(nums[2]), float64(nums[1])) || + judgePoint24_3(float64(nums[3])/float64(nums[0]), float64(nums[2]), float64(nums[1])) || + + judgePoint24_3(float64(nums[2])+float64(nums[3]), float64(nums[0]), float64(nums[1])) || + judgePoint24_3(float64(nums[2])-float64(nums[3]), float64(nums[0]), float64(nums[1])) || + judgePoint24_3(float64(nums[2])*float64(nums[3]), float64(nums[0]), float64(nums[1])) || + judgePoint24_3(float64(nums[2])/float64(nums[3]), float64(nums[0]), float64(nums[1])) || + judgePoint24_3(float64(nums[3])-float64(nums[2]), float64(nums[0]), float64(nums[1])) || + judgePoint24_3(float64(nums[3])/float64(nums[2]), float64(nums[0]), float64(nums[1])) || + + judgePoint24_3(float64(nums[1])+float64(nums[2]), float64(nums[0]), float64(nums[3])) || + judgePoint24_3(float64(nums[1])-float64(nums[2]), float64(nums[0]), float64(nums[3])) || + judgePoint24_3(float64(nums[1])*float64(nums[2]), float64(nums[0]), float64(nums[3])) || + judgePoint24_3(float64(nums[1])/float64(nums[2]), float64(nums[0]), float64(nums[3])) || + judgePoint24_3(float64(nums[2])-float64(nums[1]), float64(nums[0]), float64(nums[3])) || + judgePoint24_3(float64(nums[2])/float64(nums[1]), float64(nums[0]), float64(nums[3])) || + + judgePoint24_3(float64(nums[1])+float64(nums[3]), float64(nums[2]), float64(nums[0])) || + judgePoint24_3(float64(nums[1])-float64(nums[3]), float64(nums[2]), float64(nums[0])) || + judgePoint24_3(float64(nums[1])*float64(nums[3]), float64(nums[2]), float64(nums[0])) || + judgePoint24_3(float64(nums[1])/float64(nums[3]), float64(nums[2]), float64(nums[0])) || + judgePoint24_3(float64(nums[3])-float64(nums[1]), float64(nums[2]), float64(nums[0])) || + judgePoint24_3(float64(nums[3])/float64(nums[1]), float64(nums[2]), float64(nums[0])) +} +``` + +## 03、Go语言示例 + +我们整合全部代码如下: + +```go +func judgePoint24(nums []int) bool { + return judgePoint24_3(float64(nums[0])+float64(nums[1]), float64(nums[2]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])-float64(nums[1]), float64(nums[2]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])*float64(nums[1]), float64(nums[2]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])/float64(nums[1]), float64(nums[2]), float64(nums[3])) || + judgePoint24_3(float64(nums[1])-float64(nums[0]), float64(nums[2]), float64(nums[3])) || + judgePoint24_3(float64(nums[1])/float64(nums[0]), float64(nums[2]), float64(nums[3])) || + + judgePoint24_3(float64(nums[0])+float64(nums[2]), float64(nums[1]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])-float64(nums[2]), float64(nums[1]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])*float64(nums[2]), float64(nums[1]), float64(nums[3])) || + judgePoint24_3(float64(nums[0])/float64(nums[2]), float64(nums[1]), float64(nums[3])) || + judgePoint24_3(float64(nums[2])-float64(nums[0]), float64(nums[1]), float64(nums[3])) || + judgePoint24_3(float64(nums[2])/float64(nums[0]), float64(nums[1]), float64(nums[3])) || + + judgePoint24_3(float64(nums[0])+float64(nums[3]), float64(nums[2]), float64(nums[1])) || + judgePoint24_3(float64(nums[0])-float64(nums[3]), float64(nums[2]), float64(nums[1])) || + judgePoint24_3(float64(nums[0])*float64(nums[3]), float64(nums[2]), float64(nums[1])) || + judgePoint24_3(float64(nums[0])/float64(nums[3]), float64(nums[2]), float64(nums[1])) || + judgePoint24_3(float64(nums[3])-float64(nums[0]), float64(nums[2]), float64(nums[1])) || + judgePoint24_3(float64(nums[3])/float64(nums[0]), float64(nums[2]), float64(nums[1])) || + + judgePoint24_3(float64(nums[2])+float64(nums[3]), float64(nums[0]), float64(nums[1])) || + judgePoint24_3(float64(nums[2])-float64(nums[3]), float64(nums[0]), float64(nums[1])) || + judgePoint24_3(float64(nums[2])*float64(nums[3]), float64(nums[0]), float64(nums[1])) || + judgePoint24_3(float64(nums[2])/float64(nums[3]), float64(nums[0]), float64(nums[1])) || + judgePoint24_3(float64(nums[3])-float64(nums[2]), float64(nums[0]), float64(nums[1])) || + judgePoint24_3(float64(nums[3])/float64(nums[2]), float64(nums[0]), float64(nums[1])) || + + judgePoint24_3(float64(nums[1])+float64(nums[2]), float64(nums[0]), float64(nums[3])) || + judgePoint24_3(float64(nums[1])-float64(nums[2]), float64(nums[0]), float64(nums[3])) || + judgePoint24_3(float64(nums[1])*float64(nums[2]), float64(nums[0]), float64(nums[3])) || + judgePoint24_3(float64(nums[1])/float64(nums[2]), float64(nums[0]), float64(nums[3])) || + judgePoint24_3(float64(nums[2])-float64(nums[1]), float64(nums[0]), float64(nums[3])) || + judgePoint24_3(float64(nums[2])/float64(nums[1]), float64(nums[0]), float64(nums[3])) || + + judgePoint24_3(float64(nums[1])+float64(nums[3]), float64(nums[2]), float64(nums[0])) || + judgePoint24_3(float64(nums[1])-float64(nums[3]), float64(nums[2]), float64(nums[0])) || + judgePoint24_3(float64(nums[1])*float64(nums[3]), float64(nums[2]), float64(nums[0])) || + judgePoint24_3(float64(nums[1])/float64(nums[3]), float64(nums[2]), float64(nums[0])) || + judgePoint24_3(float64(nums[3])-float64(nums[1]), float64(nums[2]), float64(nums[0])) || + judgePoint24_3(float64(nums[3])/float64(nums[1]), float64(nums[2]), float64(nums[0])) +} + +func judgePoint24_3(a, b, c float64) bool { + return judgePoint24_2(a+b, c) || + judgePoint24_2(a-b, c) || + judgePoint24_2(a*b, c) || + judgePoint24_2(a/b, c) || + judgePoint24_2(b-a, c) || + judgePoint24_2(b/a, c) || + + judgePoint24_2(a+c, b) || + judgePoint24_2(a-c, b) || + judgePoint24_2(a*c, b) || + judgePoint24_2(a/c, b) || + judgePoint24_2(c-a, b) || + judgePoint24_2(c/a, b) || + + judgePoint24_2(c+b, a) || + judgePoint24_2(c-b, a) || + judgePoint24_2(c*b, a) || + judgePoint24_2(c/b, a) || + judgePoint24_2(b-c, a) || + judgePoint24_2(b/c, a) +} + +func judgePoint24_2(a, b float64) bool { + return (a+b < 24+1e-6 && a+b > 24-1e-6) || + (a*b < 24+1e-6 && a*b > 24-1e-6) || + (a-b < 24+1e-6 && a-b > 24-1e-6) || + (b-a < 24+1e-6 && b-a > 24-1e-6) || + (a/b < 24+1e-6 && a/b > 24-1e-6) || + (b/a < 24+1e-6 && b/a > 24-1e-6) +} +``` + +执行结果: + +PNG + +
+ +> 由于代码**过于硬核**,我们直接击败100%的对手:(没想到吧!代码还可以这么写~) \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04.md" similarity index 86% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04.md" index 04b2d17e..905b6360 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04.md" @@ -1,7 +1,7 @@ ---- -title: 飞机座位分配概率(1227) + +## 飞机座位分配概率(1227) date: 2020-06-15 ---- + > 坐汽车、火车、飞机的时候,大家不知道有没有想过这样一个问题?如果自己的票弄丢了,那么自己屁股随机这么一蹲,坐到自己位置的概率有多大?今天就为大家分析一下这个问题。 @@ -42,25 +42,25 @@ date: 2020-06-15 一个位置一个人,一屁股蹲下,概率100%,这没啥可说的。 -PNG +PNG 两个位置两个人,第一个人已经坐下,要么坐对了,要么坐错了。所以第二个人坐在自己位置上的概率是50%。 -PNG +PNG 重点来了,三个位置三个人,第一个一屁股坐下,有三种坐法。PNG 如果恰好**第一个人坐到了自己的座位**上(1/3),那这种情况下,第二个人也就可以直接坐在自己的座位上,第三个人一样。所以此时第三人坐在自己座位上的可能性是 100%。 -PNG +PNG -如果**第一个人占掉了第二个人的位置**(1/3)**。**此时第二人上来之后,要么坐在第一人的位置上,要么坐在第三人的位置上。(1/2)所以,在这种情况下,第三人的座位被占的可能性是 1/3*1/2=1/6。 +如果**第一个人占掉了第二个人的位置(1/3)。** 此时第二人上来之后,要么坐在第一人的位置上,要么坐在第三人的位置上。(1/2)所以,在这种情况下,第三人的座位被占的可能性是 1/3*1/2=1/6。 -PNG +PNG 那假如第一人直接一屁股坐在第三人的座位上,此时第三人的座位被占的可能性就是第一人选择第三人座位的可能性。(1/3) -PNG +PNG 所以,如果三个座位三个人,第三个人坐到自己位置上的概率就是:1-1/6-1/3=1/2。当然,也可以通过 1/3+1/6=1/2 来正向计算。 diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/1.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/1.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/2.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/2.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/3.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/3.jpeg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/3.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/3.jpeg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/4.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/4.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/4.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/4.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/5.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/5.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/5.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/5.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/6.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/6.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/6.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04/6.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/05.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/05.md" similarity index 98% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/05.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/05.md" index d40b4dcb..c46808f6 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/05.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/05.md" @@ -1,9 +1,9 @@ ---- -title: 水分子的产生 + +## 水分子的产生 date: 2020-06-16 ---- + -> 今天为大家分享一道看起来**“高大上****”**的题目。 +> 今天为大家分享一道看起来 **“高大上”** 的题目。 > > 话不多说,直接看题吧。 diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/06.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/06.md" similarity index 96% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/06.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/06.md" index 92f792ce..f10346ac 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/06.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/06.md" @@ -1,11 +1,11 @@ ---- -title: 救生艇(881) + +## 救生艇(881) date: 2020-06-16 ---- + >小浩算法改版了,大家看一下风格怎么样,还喜欢吗?所有的排版,绘图,文案,题解都是由小浩一人完成哦~ > ->今天为大家分享一道关于**“救生艇****”**的题目。 +>今天为大家分享一道关于 **“救生艇”** 的题目。 > >话不多说,直接看题吧。 diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07.md" similarity index 90% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07.md" index 249c1ac0..faa24955 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07.md" @@ -1,7 +1,7 @@ ---- -title: 25匹马的经典问题 + +## 25匹马的经典问题 date: 2020-06-16 ---- + >今天为大家分享一道非常经典的面试题,和马有关。无论是校招,还是社招,在各大公司都出现过,我也曾经问过别人。 > @@ -17,7 +17,7 @@ date: 2020-06-16 ## 02、题目分析 -实在不想和那些答主一样,磨磨唧唧的分析完毕之后,再给你们扔出来正确答案。答案是7次,**懂得走人,今日合格,咱不浪费时间。**懵对的和猜错的往下看,**只会3匹马的也请往下看**。 +实在不想和那些答主一样,磨磨唧唧的分析完毕之后,再给你们扔出来正确答案。答案是7次,**懂得走人,今日合格,咱不浪费时间。** 懵对的和猜错的往下看,**只会3匹马的也请往下看**。
@@ -25,15 +25,15 @@ date: 2020-06-16 - 5次:首先我们把25匹马分成5组(A、B、C、D、E),跑上五次,得到每组的第一名。 - PNG + PNG - 1次:然后我们让这5个第一名跑上一次,得到其中的前三名。**注意:这里就可以得到所有马中跑的最快的第一名A1了。并且,D1和E1所在的组可以直接淘汰。第二名和第三名一定不会在其中产生!** - PNG + PNG - 1次:因为我们已经跑出了第一名,所以A1不需要再参加比赛,同时,D1和E1所在的组已经淘汰。C1作为第三组的第一名,C组不会有跑的比C1快的。而B2有可能是比C1跑的快的第三名。同理,A2和A3也有可能是比B1和B2跑的快的。所以第7次比赛,我们让**A2,A3,B1,B2,C1**来一起完成。(求大家不要怪我啰嗦,,,我是实在担心有那么几个同学听不懂...) - PNG + PNG 最终,我们**通过7次比赛**,得到25匹马中的前三名。 @@ -43,9 +43,9 @@ date: 2020-06-16
-在上面的的分析中,我们已经明确了第一名。**但是第二名和第三名,是可以在A2-A3-B1-B2-C1中产生的,**我们需要分别进行讨论。 +在上面的的分析中,我们已经明确了第一名。**但是第二名和第三名,是可以在A2-A3-B1-B2-C1中产生的**,我们需要分别进行讨论。 -PNG +PNG - 假若二三名分别为:A2,A3 diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/1.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/1.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/2.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/2.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/3.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/3.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/3.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/3.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/4.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/4.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/4.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07/4.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08.md" similarity index 85% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08.md" index 70d28773..bbb755eb 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08.md" @@ -1,9 +1,9 @@ ---- -title: 灯泡开关(319) + +## 灯泡开关(319) date: 2020-06-17 ---- + -> 今天为大家分享一道关于**"电灯泡"**的题目。 +> 今天为大家分享一道关于 **"电灯泡"** 的题目。 > > 话不多说,直接看题。 @@ -35,19 +35,19 @@ date: 2020-06-17 我们模拟一下n从1到12的过程。在第一轮,你打开了12个灯泡: -PNG +PNG 因为对于大于n的灯泡你是不care的,所以我们用黑框框表示: -PNG +PNG 然后我们列出n从1-12的过程中所有的灯泡示意图: -PNG +PNG 可以得到如下表格: -PNG +PNG 观察一下,这是什么?观察不出来,咱们看看这个: @@ -90,7 +90,7 @@ public: 执行结果: -PNG +PNG ## 03、证明 @@ -110,7 +110,7 @@ public:
-所以其实我们是求,**从1-n有多少个数的约数有奇数个**。而**有奇数个约数的数一定是完全平方数。**这是因为,对于数n,如果m是它的约数,则n/m也是它的约数,若m≠n/m,则它的约数是以m、n/m的形式成对出现的。而m=n/m成立且n/m是正整数时,n是完全平方数,而它有奇数个约数。 +所以其实我们是求,**从1-n有多少个数的约数有奇数个**。而**有奇数个约数的数一定是完全平方数。** 这是因为,对于数n,如果m是它的约数,则n/m也是它的约数,若m≠n/m,则它的约数是以m、n/m的形式成对出现的。而m=n/m成立且n/m是正整数时,n是完全平方数,而它有奇数个约数。
diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/2.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/2.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/3.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/3.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/3.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/3.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/4.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/4.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/4.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/4.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09.md" similarity index 93% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09.md" index 8356c6b6..4e20337c 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09.md" @@ -1,7 +1,7 @@ ---- -title: 三门问题 + +## 三门问题 date: 2020-06-17 ---- + > 三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,出自美国的电视游戏节目Let's Make a Deal。今天为大家进行完整分析。 > @@ -29,17 +29,17 @@ date: 2020-06-17
-正确的答案是,**如果你选择了换,碰见天使的概率会高达2/3,而不不换的话,碰见天使的概率只有1/3。**怎么来的? +正确的答案是,**如果你选择了换,碰见天使的概率会高达2/3,而不不换的话,碰见天使的概率只有1/3。** 怎么来的?
我们用一个很通俗的方法,能让你一听就懂。首先刚开始选择的一扇门的概率为1/3,而另外两扇门的总概率为2/3。 -PNG +PNG 现在上帝打开了其中一扇为恶魔的门,我们知道这个门后面不会再有天使,所以相当于这部分概率被第三个门持有。 -PNG +PNG 剩下的那扇门的概率(2/3)相当于刚开始选择的门(1/3)的二倍。所以我们得换。 @@ -47,7 +47,7 @@ date: 2020-06-17 如果还没有听懂。我们可以假设有一百扇门,里边有99只都是恶魔。现在你随机选择一扇门,选择到天使的概率是1/100。 -PNG +PNG 这时,上帝打开其中的98扇,里边都是恶魔。这时候就相当于99/100的概率都集中在了另一扇门里。自然,我们需要选择换。PNG @@ -82,6 +82,6 @@ func main() { 跑了一百万次,结果当然不让我们失望!执行结果为: -PNG +PNG 所以,今天的问题你听明白了吗?评论区留下你的想法吧! \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/2.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/2.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/3.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/3.jpeg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/3.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/3.jpeg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/4.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/4.jpeg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/4.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/4.jpeg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/5.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/5.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/5.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09/5.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10.md" similarity index 94% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10.md" index 698b577e..e1d5d2d1 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10.md" @@ -1,7 +1,7 @@ ---- -title: 猜数字游戏(299) + +## 猜数字游戏(299) date: 2020-06-17 ---- + >今天为大家分享一道非常经典的题目,**猜数字**。话不多说,直接看题。 @@ -47,11 +47,11 @@ date: 2020-06-17 - 如果当前索引两个数字相同,就将公牛数加1。 - PNG + PNG - **如果不相同,我们将secret和guess当前索引位置处的数字通过map记录下来,统计他们出现的次数。**当然,之前我们讲过。有限的map,比如数字 0-10,字母 a-z,都可以通过**数组**来进行替换,用以压缩空间。 - PNG + PNG - 最后,如果记录的两个map中,**数字出现重叠**(可以通过最小值来判断),则意味着该数字在两边都出现过,就将母牛数加一(我就想说是母牛,不服来辩) @@ -91,7 +91,7 @@ func min(a, b int) int { 执行结果: -PNG +PNG ## 04、奇怪的知识 diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/1.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/1.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11.md" similarity index 94% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11.md" index 9b6c93f1..870902d4 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11.md" @@ -1,7 +1,7 @@ ---- -title: LRU缓存机制(146) + +## LRU缓存机制(146) date: 2020-06-17 ---- + > 今天为大家分享很出名的 LRU 算法,第一讲共包括 4 节。 > @@ -51,31 +51,31 @@ cache.get(4); // 返回 4 第一步:我们申明一个 LRUCache ,长度为 2。 -PNG +PNG 第二步:我们分别向 cache 里边 put(1,1) 和 put(2,2),这里因为最近使用的是 2( put 也算作使用)所以2在前,1 在后。 -PNG +PNG 第三步:我们 get(1),也就是我们使用了 1,所以需要将 1 移到前面。 -PNG +PNG 第四步:此时我们 put(3,3),因为 2 是最近最少使用的,所以我们需要将 2 进行作废。此时我们再 get(2),就会返回 -1 。 -PNG +PNG 第五步:我们继续 put(4,4),同理我们将 1 作废。此时如果 get(1) ,也是返回 -1 。 -PNG +PNG 第六步:此时我们 get(3) ,实际为调整 3 的位置。 -PNG +PNG 第七步:同理,get(4),继续调整 4 的位置。 -PNG +PNG ## 03、LRU 实现(层层剖析) @@ -124,7 +124,7 @@ func Constructor(capacity int) LRUCache { 大概是这样: -PNG +PNG 现在我们已经完成了 Cache 的构造,剩下的就是添加它的 API 了。因为 Get 比较简单,我们先完成 Get 方法。这里分两种情况考虑,如果没有找到元素,我们返回 -1。如果元素存在,我们需要把这个元素移动到首位置上去。 @@ -147,7 +147,7 @@ func (this *LRUCache) Get(key int) int { 大概就是下面这个样子(假若 2 是我们 get 的元素) -PNG +PNG 我们很容易想到这个方法后面还会用到,所以将其抽出。 @@ -218,7 +218,7 @@ func (this *LRUCache) Put(key int, value int) { } ``` -但是我们漏掉了一种情况,**如果恰好此时Cache中元素满了,需要删掉最后的元素。**处理完毕,附上 Put 函数完整代码。 +但是我们漏掉了一种情况,**如果恰好此时Cache中元素满了,需要删掉最后的元素。** 处理完毕,附上 Put 函数完整代码。 ```go func (this *LRUCache) Put(key int, value int) { @@ -248,7 +248,7 @@ func (this *LRUCache) Put(key int, value int) { } ``` -PNG +PNG 最后,我们完成所有代码: @@ -389,7 +389,7 @@ func (this *LRUCache) Put(key int, value int) { 执行结果: -PNG +PNG 因为该算法过于重要,给一个 Java 版本的: @@ -487,7 +487,7 @@ public class LRUCache { 上面我们说过了,**近似LRU是用随机抽样的方式来实现一个近似的LRU效果**。这个参数其实就是作者提供了一种方式,可以让我们人为干预样本数大小,将其设的越大,就越接近真实 LRU 的效果,当然也就意味着越耗内存。(初始值为 5 是作者默认的最佳) -PNG +PNG 这个图解释一下,绿色的点是新增加的元素,深灰色的点是没有被删除的元素,浅灰色的是被删除的元素。最下面的这张图,是真实 LRU 的效果,第二张图是默认该参数为 5 的效果,可以看到浅灰色部分和真实的契合还是不错的。第一张图是将该参数设置为 10 的效果,已经基本接近真实 LRU 的效果了。 diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/10.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/10.jpeg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/10.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/10.jpeg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/11.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/11.jpeg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/11.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/11.jpeg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/12.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/12.jpeg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/12.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/12.jpeg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/2.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/2.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/3.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/3.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/3.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/3.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/4.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/4.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/4.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/4.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/5.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/5.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/5.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/5.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/6.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/6.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/6.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/6.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/7.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/7.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/7.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/7.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/8.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/8.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/8.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/8.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/9.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/9.jpeg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/9.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11/9.jpeg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12.md" similarity index 90% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12.md" index 754ca5ad..c6212069 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12.md" @@ -1,7 +1,7 @@ ---- -title: 最小的k个数 + +## 最小的k个数 date: 2020-06-18 ---- + > 今天分享一道比较简单的题目,希望大家可以5分钟掌握! @@ -42,11 +42,11 @@ date: 2020-06-18 堆的特性是**父节点的值总是比其两个子节点的值大或小**。如果父节点比它的两个子节点的值都要大,我们叫做**大顶堆**。如果父节点比它的两个子节点的值都要小,我们叫做**小顶堆**。 -PNG +PNG 我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子。 -PNG +PNG 大顶堆,满足以下公式: @@ -54,7 +54,7 @@ date: 2020-06-18 小顶堆也一样: -PNG +PNG 小顶堆,满足以下公式: @@ -66,7 +66,7 @@ date: 2020-06-18 首先,我们创建一个大小为k的大顶堆。假如数组为[4,5,1,6,2,7,3,8],k=4。大概是下面这样: -PNG +PNG 我想肯定这里有不知道如何建堆的同学。记住:**对于一个没有维护过的堆(完全二叉树),我们可以从其最后一个节点的父节点开始进行调整**。这个不需要死记硬背,其实就是一个层层调节的过程。 @@ -74,15 +74,15 @@ date: 2020-06-18 从最后一个节点的父节点调整 -PNG +PNG 继续向上调整 -PNG +PNG 继续向上调整 -PNG +PNG 建堆 调整的代码大概就是这样:(翻Java牌子) @@ -131,11 +131,11 @@ private void swap(int[] nums, int i, int j) { 调整前 -PNG +PNG 调整后 -PNG +PNG 继续重复上述步骤,依次将7,3,8入堆。这里因为7和8都大于堆顶元素5,所以只有3会入堆。 @@ -143,11 +143,11 @@ private void swap(int[] nums, int i, int j) { 调整前 -PNG +PNG 调整后 -PNG +PNG 最后得到的堆,就是我们想要的结果。由于堆的大小是 K,所以这里空间复杂度是O(K),时间复杂度是O(NlogK)。 @@ -207,4 +207,4 @@ class Solution { 执行结果: -PNG \ No newline at end of file +PNG \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/10.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/10.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/11.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/11.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/11.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/11.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/12.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/12.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/12.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/12.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/2.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/2.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/3.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/3.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/3.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/3.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/4.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/4.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/4.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/4.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/5.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/5.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/5.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/5.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/9.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/9.png" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/9.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12/9.png" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13.md" similarity index 90% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13.md" index 00a65d35..bb5c3da5 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13.md" @@ -1,7 +1,7 @@ ---- -title: 不同路径 + +## 不同路径 date: 2020-06-18 ---- + > 今天为大家分享一道BAT常考题目,不同路径。 @@ -13,7 +13,7 @@ date: 2020-06-18 | ------------------------------------------------------------ | | 一个机器人位于一个 m x n 网格的左上角,起始点在下图中标记为“Start”。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,在下图中标记为“Finish”。 问:总共有多少条不同的路径? | -PNG +PNG 例如,上图是一个7 x 3 的网格。有多少可能的路径? @@ -49,11 +49,11 @@ date: 2020-06-18 拿到题目,首先定义状态。因为有横纵坐标,明显属于二维DP。我们定义**DP[i][j]表示到达i行j列的最多路径**。同时,因为第0行和第0列都只有一条路径,所以需要初始化为1。 -PNG +PNG 状态转移方程一目了然,dp[i][j] = dp[i-1][j] dp[i][j-1]。(想象你站在一个十字路口,到达这个十字路口可能的所有路径,就是从东南西北四个方向过来可能出现的所有路径和。放在这道题里,其实就是砍掉东南。) -PNG +PNG 根据分析,完成代码: @@ -81,7 +81,7 @@ func uniquePaths(m int, n int) int { 执行结果: -PNG +PNG ## 03、代码优化 @@ -89,11 +89,11 @@ func uniquePaths(m int, n int) int { 在上文中,我们使用**二维数组**记录状态。但是这里观察一下,每一个格子可能的路径,**都是由左边的格子和上面的格子的总路径计算而来, 对于之前更早的数据,其实已经用不到了**。如下图,计算第三行时,已经用不到第一行的数据了。 -PNG +PNG 那我们只要能定义一个状态,同时可以表示左边的格子和上面的格子,是不是就可以解决问题?所以我们定义状态dp[j],用来表示**当前行到达第j列的最多路径**。这个“当前行”三个字很重要,比如我们要计算dp[3],因为还没有计算出,所以这时dp[3]保存的其实是4(上一行的数据),而dp[2]由于已经计算出了,所以保存的是6(当前行的数据)。理解了这个,就理解如何压缩状态。 -PNG +PNG 最后,根据分析得出代码: @@ -116,4 +116,4 @@ func uniquePaths(m int, n int) int { 执行结果: -PNG \ No newline at end of file +PNG \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14.md" similarity index 83% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14.md" index 9c7fe697..970ad8ec 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14.md" @@ -1,7 +1,7 @@ ---- -title: 不同路径 - 障碍物 + +## 不同路径 - 障碍物 date: 2020-06-18 ---- + 上一篇为大家分享了不同路径的DP解法之后,有很多小伙伴后台给我留言,说直接用公式法一步就可以得到答案。给你们点个赞!确实是这样,我没有用公式法的原因,是因为我的目的是想层层推进难度为大家分析不同路径这一类题型。后面我会单独拉出一系列,专门为大家讲解公式法一类的题目。 @@ -19,13 +19,13 @@ date: 2020-06-18 | ------------------------------------------------------------ | | 一个机器人位于一个 m x n 网格的左上角,起始点在下图中标记为“Start”。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,在下图中标记为“Finish”。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 问总共有多少条不同的路径? | -PNG +PNG 网格中的障碍物和空位置分别用 1 和 0 来表示。
-**说明:**m 和 n 的值均不超过 100。 +**说明:** m 和 n 的值均不超过 100。
@@ -51,13 +51,13 @@ date: 2020-06-18 > 因为只是多了一点障碍物,题目的本质并没什么不同,所以直接进行分析即可。 -首先我们还是定义状态,**用****DP[i][j]表示到达i行j列的最多路径**。同时,因为第0行和第0列都只有一条路径,所以需要初始化为1。但有一点不一样的就是:**如果在0行0列中遇到障碍物,后面的就都是0,意为此路不通**。 +首先我们还是定义状态,**用DP[i][j]表示到达i行j列的最多路径**。同时,因为第0行和第0列都只有一条路径,所以需要初始化为1。但有一点不一样的就是:**如果在0行0列中遇到障碍物,后面的就都是0,意为此路不通**。 -PNG +PNG 完成了初始化,下面就是状态转移方程。和没有障碍物的相比没什么特别的,仍然是dp[i][j] = dp[i-1][j] dp[i][j-1]。唯一需要处理的是:**如果恰好[i][j]位置上有障碍物,则dp[i][j]为0**。比如下图,有dp[1][2]为0。 -PNG +PNG 根据分析,得出代码:(今天翻java牌子) @@ -89,7 +89,7 @@ class Solution { 执行结果: -PNG +PNG ## 03、代码优化 @@ -97,11 +97,11 @@ class Solution { 为了大家更好的理解代码,我们还是绘图说明。假若我们的网格如下,其中黑色表示障碍物。 -PNG +PNG 因为计算每一个格子能到达的最多路径,只需要左边和上边的元素,所以我们定义状态**dp[j]表示到达当前行第j位置的最多路径**。这里有一个需要额外说的,就是我们把dp[0]初始化为1,因为在到达第一行的第一个元素时,路径只有一个。下面的图,左边的表示当前网格,右边的是指网格中对应dp数组的值。 -PNG +PNG 根据分析,得出代码: @@ -129,4 +129,4 @@ class Solution {     
-**思考:**上面的代码其实还可以优化内存,大家想想怎么做 \ No newline at end of file +**思考:** 上面的代码其实还可以优化内存,大家想想怎么做 \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15.md" similarity index 99% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15.md" index b79af801..222e38f6 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15.md" @@ -1,7 +1,7 @@ ---- -title: 伪蒙特卡洛 + +## 伪蒙特卡洛 date: 2020-06-28 ---- + > 分享一道由群员“Melbourne”,外号 “Paper Machine”,有数学小王子之称的小伙伴分享的题目! diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16.md" similarity index 79% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16.md" index cbb7c3d4..b3b68755 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16.md" @@ -1,8 +1,8 @@ ---- + -title: 盛最多水的容器 +## 盛最多水的容器 date: 2020-06-19 ---- + > 今天为大家分享一道鹅厂的面试题。话不多说,直接看题目。 @@ -16,7 +16,7 @@ date: 2020-06-19 说明:你不能倾斜容器,且 n 的值至少为 2。 -PNG +PNG 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。 @@ -39,35 +39,35 @@ date: 2020-06-19 假若我们的数组为:[1 8 6 2 5 4 8 3 7],长这样: -PNG +PNG 首先,我们初始化两个指针,分别指向两边,构成我们的第一个矩形区域。 -PNG +PNG 我们尝试将长的一侧向短的一侧移动,发现对于区域面积增加没有任何意义。比如下图: -PNG +PNG 所以我们选择将短的一侧向长的一侧移动。根据木桶原理,水的高度取决于短的一侧。 -PNG +PNG 继续重复这个过程,我们总是**选择将短的一侧向长的一侧移动**。并且在每一次的移动中,我们记录下来当前面积大小。(下面这些图,都是我拿PPT一张张做的....) -PNG +PNG -PNG +PNG -PNG +PNG -PNG +PNG -PNG +PNG 一直到两个棒子撞在一起。 -PNG +PNG 根据分析,得到代码:(翻Java牌子) @@ -90,11 +90,11 @@ class Solution { > 可能有的朋友想让我证明一下。其实我觉得,这就是个木桶原理。木桶原理:**一只水桶能装多少水取决于它最短的那块木板**。 -PNG +PNG 采用反证法进行证明: -PNG +PNG >
area = h(m) * w
@@ -104,7 +104,7 @@ area = h(n) * (w-1) 有 area < area -PNG +PNG 移动n到n,如果n比m长,则有: @@ -112,6 +112,6 @@ area = h(m) * (w-1) 有 area < area -PNG +PNG 所以,今天的问题你学会了吗?评论区留下你的想法! \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/10.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/10.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/11.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/11.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/11.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/11.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/12.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/12.jpeg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/12.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/12.jpeg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/13.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/13.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/13.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/13.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/14.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/14.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/14.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/14.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/15.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/15.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/15.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/15.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/9.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16/9.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17.md" similarity index 89% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17.md" index 2e9c6762..3ff7b418 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17.md" @@ -1,7 +1,7 @@ ---- -title: 扑克牌中的顺子容器 + +## 扑克牌中的顺子容器 date: 2020-06-19 ---- + > 今天给分享一道比较简单的扑克牌题目。 @@ -40,15 +40,15 @@ date: 2020-06-19 顺子长这样: -PNG +PNG 因为此题本身属于简单到要屎系列,所以直接给题解。数组长度限制了是5,非常省事,意味着我们不需要一些额外的处理。拿到牌,第一个想法是啥?排序!我想打过牌的人,都会知道这点(想象那个插插插的过程)。**因为是5连,无论接没接到大小王,最小值和最大值之间,一定小于5**。 -PNG +PNG 排序后,我们通过累积每两张牌之间的差值,来计算最小值和最大值中间的总差值。 -PNG +PNG 拿到了王,就相当于拿到了通行证,直接跳过。 @@ -56,7 +56,7 @@ date: 2020-06-19 因为是排序的牌,如果接到对子,也就意味着不是五连,直接返回false。(怎么每次说到五连,我就想到“penta kill” ) -PNG +PNG 根据分析,得出代码:(翻个go的牌子吧) @@ -80,7 +80,7 @@ func isStraight(nums []int) bool { 执行结果: -PNG +PNG ## 03、不排序咋整 @@ -115,4 +115,4 @@ class Solution { 执行结果: -PNG \ No newline at end of file +PNG \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18.md" similarity index 98% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18.md" index 801c1f31..6004573e 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18.md" @@ -1,7 +1,7 @@ ---- -title: 整数拆分(343) + +## 整数拆分(343) date: 2020-06-19 ---- + > 能跟着看到现在,大家都有点疲惫了。为了提高各位积极性,我打算每天在文首放一张女神的图(不为别的,只为激励大家,毕竟美女对男女都是通杀的。祝大家早日拿到理想offer,实现人生赢家)话不多说,直接看题! @@ -39,7 +39,7 @@ date: 2020-06-19 要对一个整数进行拆分,并且要使这些拆分完后的因子的乘积最大。我们可以先尝试拆分几个数值,测试一下。 -PNG +PNG 通过观察,首先肯定可以明确,**2 和 3 是没办法进行拆分的最小因子**。同时,我们好像能看出来: diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19.md" similarity index 91% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19.md" index 53c75bc8..b0017825 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19.md" @@ -1,11 +1,11 @@ ---- -title: 移动石子直到连续(1033) + +## 移动石子直到连续(1033) date: 2020-06-20 ---- + > 今天为大家分享一个**脑筋急转弯**类型的算法题。leetcode这个脑筋急转弯的tag打的我措手不及... -PNG +PNG ## 01、题目示例 @@ -50,17 +50,17 @@ a != b, b != c, c != a 比如:a = 1, b = 2, c = 5 -PNG +PNG 比如:a = 4, b = 3, c = 2 -PNG +PNG
(无法移动)
读懂了题意,开始进行分析。首先可以明确,每一次我们其实**是从边上来挑选石子,然后往中间进行移动**。所以,我们首先得找到min(左),max(右)以及mid(中)三个值。我们设,min和mid中的距离为x,max和min中的距离为y。大概就是下面这样: -PNG +PNG 然后只需要计算x和y的和,就是我们要找的最大值。而最小值,就很容易了,只有0,1,2三种可能性。 @@ -116,4 +116,4 @@ public: 执行结果: -PNG \ No newline at end of file +PNG \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20.md" similarity index 92% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20.md" index 64bfd9eb..7018daeb 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20.md" @@ -1,11 +1,11 @@ ---- -title: Nim 游戏(292) + +## Nim 游戏(292) date: 2020-06-20 ---- + > 上一篇是为大家分享了一道打着“脑筋急转弯”tag的题目,然后我顺便就把这个类型的题目全部筛选出来看了看,发现总共没几个,所以就想的干脆一次全部讲完吧。 -PNG +PNG ## 01、题目示例 @@ -38,15 +38,15 @@ PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没 首先如果石头数小于4个,那么因为你是先手,一把拿走,肯定会赢。 -PNG +PNG 而如果石头是4个,那不管你是拿了1,2,3个,最后一个都可以被你的对手拿走,所以怎么样都赢不了。 -PNG +PNG 再继续分析到8个石头:对于5,6,7而言,你只需要对应的拿走1,2,3,然后留下4个,则对方必输。但是如果你要面对的是8,不管先拿(1,2,3)个,另一个人都可以通过 8-(1,2,3) ,使得你面对4个石头,则你必输无疑。通过观察,我们发现,好像是**只要N是4的倍数,我们就必输无疑**。 -PNG +PNG 尝试性的写下代码:(这个,什么语言都无所谓吧....) @@ -59,7 +59,7 @@ func canWinNim(n int) bool { 执行结果: -PNG +PNG ## 03、证明过程 diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21.md" similarity index 87% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21.md" index b665c94f..bc43fd13 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21.md" @@ -1,7 +1,7 @@ ---- -title: 寻找两个正序数组的中位数(292) + +## 寻找两个正序数组的中位数(292) date: 2020-06-20 ---- + > 今天为大家分享一道FLAG和BAT都出现过的经典面试题。题目有一定难度,建议大家耐着性子看完!不要说没天赋看不懂。在这个浮躁到努力的人都很少的年代,还谈不上说天赋这件事。 @@ -47,49 +47,49 @@ nums2 = [3, 4] 首先,我们考虑一个问题,如果只有一个有序数组,我们需要找中位数,那肯定需要判断元素是奇数个还是偶数个,如果是奇数个那最中间的就是中位数,如果是偶数个的话,那就是最中间两个数的和除以2。 -PNG +PNG 那如果是两个数组,也是一样的,我们先求出两个数组长度之和。如果为奇数,就找中间的那个数,也就是 **(长度之和 1)/2** 。如果为偶数,那就找 **长度之和/2**。比如下面的 (9 5)/2 = 7,那我们最终就是**找到排列第7位的值**。此时,问题其实已经转化为“**找到两个数组中第k小的元素**”。找到了第7位之后,第8位我们已经知道了,然后第7位和第8位的和,除以2就是我们要找的中位数(**注意:这里的7和8你其实是不知道的,图中画出来,只是为了帮助理解**) -PNG +PNG -现在的问题是,我们如何用二分的思想来找到中间排列第7位的数。这里有一种不太好想到的方式,**是用删的方式**,因为**如果我们可以把多余的数排除掉,最终剩下的那个数,是不是就是我们要找的数?**对于上面的数组,我们可以先删掉 7/2=3 个数。那这里,可以选择删上面的,也可以选择删下面的。那这里因为 i +PNG
(删除前)
-PNG +PNG
(删除后)
由于我们已经排除掉了 3 个数字,现在对于两个数组,我们需要找到7-3=4的数字,来进行下一步运算。我们可以继续删掉4/2=2个数。我们比较i和j的值,删除小的一边。 -PNG +PNG
(删除前)
-PNG +PNG
(删除后)
继续上面的步骤,我们删除 2/2=1 个数。**同理,比较7和6的大小,删除小的一边**。删完后是下面这样: -PNG +PNG
(7和6,删除6)
不要忘记我们的目的,我们是为了找第7小的数。此时,**两个数组的第一个元素,哪个小,就是我们要找的那个数**。因为7<8,所以7就是我们要找的第7小的数。 -PNG +PNG 这里有一点比较特殊的,如果在删除过程中,我们**要删除的K/2个数,大于其中一边的数组长度**,那我们就将小的一侧数组元素都删除。比如下面这个,此时7/2=3,但是下面的数组只有2个元素,我们就将它全部删除。 -PNG +PNG 删完之后,此时因为只删除了2个元素,所以k变成了5。那我们只需要返回其中一边的第5个元素就ok。 -PNG +PNG 整个上面的过程,完成了本题的算法架构! @@ -143,4 +143,4 @@ class Solution { 执行结果: -PNG \ No newline at end of file +PNG \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/10.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/10.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/11.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/11.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/11.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/11.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/9.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21/9.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22.md" similarity index 94% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22.md" index 23b735e9..fb726206 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22.md" @@ -1,7 +1,7 @@ ---- -title: 第k个最大元素(215) + +## 第k个最大元素(215) date: 2020-07-01 ---- + > 今天给大家分享一道美团面试题。话不多说,直接看题。 @@ -53,19 +53,19 @@ date: 2020-07-01 - 构造一个小顶堆,依次将元素放入堆中,并保证堆中元素为k。 - PNG + PNG - 如果当前元素小于堆顶元素,那基本就不用看了(因为我们要找的是 排序后的第 k 个最大的元素) - PNG + PNG - 自然,如果我们遇到比堆顶元素大的元素,就把它放入到堆中。 - PNG + PNG - 重复上面的步骤: - PNG + PNG 然后根据分析,完成代码(今天就不手撕堆了,因为之前已经手撕过了。同时这里给大家一个建议,如果面试的时候,遇到这种TOPK的问题,**假如特别有把握,肯定得手撕数据结构,一定会加分**。但是如果没有把握,那就先用API实现,以 BugFree 为目标吧!) @@ -158,7 +158,7 @@ func partition(l, r int, nums []int) int { 执行结果: -PNG +PNG 整个快排的核心,其实就partition。partition 有 单向扫描,双向扫描 等多种写法。上面的代码,大家可以参考参考,看不懂也没关系,我后面是会单独安排一个快排的系列篇来进行讲解的,到时候一堆图解砸进来,保准你看的醍醐灌顶! diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23.md" similarity index 89% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23.md" index ef085561..5672188b 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23.md" @@ -1,7 +1,7 @@ ---- -title: 镜面反射(858) + +## 镜面反射(858) date: 2020-07-09 ---- + > 这两天熟悉的朋友该知道我情绪不太好。但总不能借着由头,便拖期延稿诉衷肠。毕竟消除恐惧的最好方法就是面对恐惧。微笑着面对它,坚持才是胜利,加油!奥利给! @@ -23,7 +23,7 @@ date: 2020-07-09 上面的题目绕得很,大概就是这么个意思: -PNG +PNG ## 02、题目分析 @@ -33,11 +33,11 @@ date: 2020-07-09 我们知道光是由西南角发出的,也就是左下角。发出之后可能会出现多种情况(注意,下图略过了部分光线反射的情况)。看起来是十分复杂,无迹可寻。 -PNG +PNG -但是如果我们把光线的运动轨迹拆开来看,就可以观测到,**光线每经过一次折反,都会在纵向距离上移动 q**(首次与东墙相距的距离)。同时,**一旦其向上行走的距离为 p 的整数倍,就一定会碰到某个接收点(**注意:这里我们不需要考虑北面墙是否存在,根据光的反射定律可得**)**可以参考一下下面这张图: +但是如果我们把光线的运动轨迹拆开来看,就可以观测到,**光线每经过一次折反,都会在纵向距离上移动 q**(首次与东墙相距的距离)。同时,**一旦其向上行走的距离为 p 的整数倍,就一定会碰到某个接收点**(**注意:这里我们不需要考虑北面墙是否存在,根据光的反射定律可得**)可以参考一下下面这张图: -PNG +PNG 问题变得简单了,**光线最终向上走的距离,其实就是 p 和 q 的最小公倍数**。我们设最小公倍数为 L,会发现如果 L 是 p 的**奇数倍**,光线则到达**北墙**(可以参考上面的图)当 L 是 p 的 **偶数倍**,光线将会射到**南墙**。 @@ -73,7 +73,7 @@ class Solution {     执行结果: -PNG +PNG 这道题学会了吗?如果不会就不要玩镜了吧(皮一个)。 diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/1.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/1.gif" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/1.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/1.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/4.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/5.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/5.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/6.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/6.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/7.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/7.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/8.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25.md" similarity index 92% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25.md" index 28b97507..0b5b2182 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25.md" @@ -1,7 +1,4 @@ ---- -title: 整数转罗马数字(12) -date: 2020-07-10 ---- + ## 整数转罗马数字(12) > 今天穿插为大家讲解一道臭长臭长的经典题目。我把字体加大了,加大了,加大了。 @@ -91,7 +88,7 @@ C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 因为题目很长,所以读懂题意很重要。这道题说是让我们转换罗马数字,其实说白了就是让我们用特殊的规则凑数。**罗马数字本身就可以理解为一种特殊的数学规则。** -PNG +PNG 那如何来凑数?自然就需要读懂题意,比如 2 就是通过 1+1 凑;3 通过 1+1+1 凑;6 通过 5+1 凑。同时,在凑的过程中,又加入了一些奇怪的规则。比如说,4 不允许 1+1+1+1 凑,而是得 5-1 凑;而 9 不能 5+1+1+1+1 凑,而是得 10-1 凑;这个分析怎么出来的?题目中说的: @@ -109,15 +106,15 @@ C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 然后,我们把题目中所有的字符列出来: -PNG +PNG 当然,除了这些还不够。因为上面我们还分析出了一些特殊的规则,也得列出来: -PNG +PNG 然后我们利用这张表格,对给出的数字进行转化(拼凑)。假设我们要找的数为2834,大概的流程如下(其实是一种类似贪心的思想): -PNG +PNG 对比着代码看更为明朗: @@ -144,7 +141,7 @@ class Solution { 执行结果: -PNG +PNG ## 03、啰嗦一下 @@ -179,7 +176,7 @@ public: 这个解法应该没什么解释的,就是把每一位 0-10 的情况枚举出来。这道题目稍微长了点,但是分析下来并没有什么难度。有的同学一看到题目很长,直接就怂了,这种其实就很不好。唔,再放一张女神照片: -PNG +PNG
diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/6.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/6.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/6.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25/6.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26.md" similarity index 82% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26.md" index 9c52e3bb..67c5bdf0 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26.md" @@ -1,7 +1,7 @@ ---- -title: 荷兰国旗问题 + +## 荷兰国旗问题 date: 2020-07-10 ---- + > 今天为大家分享经典的荷兰国旗问题。最近折腾了挺多事情,状态有点乱糟糟的。这两天刚刚调整好,全副武装,横戈马上行! @@ -15,9 +15,9 @@ date: 2020-07-10 大概就是这么个意思: -PNG +PNG -PNG +PNG ## 02、题解分析 @@ -27,11 +27,11 @@ date: 2020-07-10 便于分析,我们把上面的图稍微改一下: -PNG +PNG 改成这样: -PNG +PNG 好了,这道题结束了。O(∩_∩)O @@ -53,41 +53,41 @@ Emmmm....不开玩笑,现在我们讲解如何完成这个过程。 那总共就三个颜色,我们要区分开来,是不是最少需要两条分隔线?A线的左侧为0,右侧为1。B线的左侧为1,右侧为2。 -PNG +PNG 但是刚开始的时候,红-白-蓝 三色是乱序的,所以此时的两条线我们是不是可以看成在最两侧? -PNG +PNG 那我们剩下的是不是只需要把 A线 和 B线 间的数据维护成满足 AB 线的规则就可以了?那要维护 AB 线间的数据,是不是至少你得遍历下 AB 线间的数据? -PNG +PNG 我们从 C 位置处开始,**我们发现此时 C 等于0。是不是意味着,我们应把这个元素放到 A 的左侧,所以我们移动 A线。当然,我们也需要移动一下 C 的位置。(CASE-1)** -PNG +PNG 然后我们发现**新的 C 位置处等于2,那是不是说明这个元素应该位于 B 的右侧。所以我们要把该位置的元素 和 B位置处的元素进行交换,同时移动B。(CASE-2)** -PNG +PNG 但是这里要注意,**C 交换完毕后,C 不能向前移**。因为C指向的元素可能是属于前部的,若此时 C 前进则会导致该位置不能被交换到前部。继续向下遍历。 -PNG +PNG -有意思了,**我们发现 C 指向位置处等于1。有没有发现这种本身就满足规则了?所以我们忽略就可以了。(CASE-3)**继续移动 C。 +有意思了,**我们发现 C 指向位置处等于1。有没有发现这种本身就满足规则了?所以我们忽略就可以了。(CASE-3)** 继续移动 C。 -PNG +PNG 主要就这三种 CASE,我们把剩下的图都绘制出来: -PNG +PNG -PNG +PNG -PNG +PNG -PNG +PNG **总结一下:** @@ -147,7 +147,7 @@ func sortColors(nums []int) { 执行结果: -PNG +PNG ## 03、总结 @@ -157,7 +157,7 @@ func sortColors(nums []int) { 好吧,基本就是这样了。这道题目在 leetcode 上对应的是: -PNG +PNG 我觉得我讲的还是可以的。大家要是认为ok的话,给我来个转发吧~感谢! diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/10.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/10.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/11.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/11.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/11.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/11.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/12.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/12.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/12.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/12.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/13.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/13.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/13.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/13.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/14.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/14.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/14.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/14.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/15.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/15.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/15.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/15.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/16.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/16.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/16.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/16.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/17.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/17.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/17.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/17.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/9.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26/9.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27.md" similarity index 89% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27.md" index 77f0e199..fa61cb0e 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27.md" @@ -1,7 +1,7 @@ ---- -title: 六九问题 + +## 六九问题 date: 2020-07-10 ---- + > 69式是一种。。。咳咳,六九问题是一道很有趣的算法题。嗯,不服来辩。 @@ -19,7 +19,7 @@ date: 2020-07-10 大概就是这么个意思: -PNG +PNG ``` 输入:num = 9669 @@ -54,19 +54,19 @@ class Solution {     执行结果: -PNG +PNG
emmmmm,大概就是这样。。。。我感觉要被锤,溜了溜了。 -PNG +PNG ## 03、知识点总结 > 写出上面的答案,大概率是被面试官锤了。那这道题到底是考察我们什么呢? -PNG +PNG 大家可以看到,这是一道数学题。所以我们需要用数学的方法来进行求解。具体代码如下: @@ -90,11 +90,11 @@ class Solution {     其实这种解法,和上面的解法没什么区别。**都是从高位到低位进行判断,遇到 6 就将其变为 9**。只不过,上面是通过 replaceFirst 来进行,下面通过数值相加的方式来进行。那这种方法的效率我们看看: -PNG +PNG 吊炸天有没有!难怪古人说,学好数理化,走遍天下都不怕。只会 replace 画,面试结束找妈妈。 -PNG +PNG 现在你知道为什么你和别人一起去面试,面试官挂了你,而选择别人了吧。**面试官的思维,往往就是这么朴实无华且枯燥。** diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/3.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/3.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/3.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/3.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28.md" similarity index 92% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28.md" index ee43a1a3..a51e52db 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28.md" @@ -1,9 +1,9 @@ ---- -title: 有效的数独 + +## 有效的数独 date: 2020-07-10 ---- + -PNG +PNG > 数独相信在座的各位都玩过,那我们如何使用程序去验证一个 9×9 的数独是有效的呢?一起看下! @@ -73,7 +73,7 @@ date: 2020-07-10 画出来就是下面这样: -PNG +PNG ## 02、题解分析 @@ -102,7 +102,7 @@ date: 2020-07-10 遍历这个没什么好说的,**从左到右,从上到下进行遍历即可**。就一个两层循环。因为题目本身就是常数级的规模,所以时间复杂度就是 O(1)。 -PNG +PNG 问题来了:如何验证元素在 行 / 列 / 子数独中没有重复项? @@ -119,7 +119,7 @@ int[][] sbox = new int[9][9]; 当然,刚开始的时候他们都是空的。然后**每遍历到一个元素,我们就看看这个元素在里边存不存在,不存在就放进去,存在那说明数独不合法**。 -PNG +PNG 举个栗子,比如这个数独。第6行5列为2,那我们就对 rows 和 col 进行设置:(1表示元素存在) @@ -147,11 +147,11 @@ boxIndex = (row / 3) * 3 + columns / 3 其实很容易理解:我们把上面的第6行5列代入到这个公式里,(5 / 3) * 3 + 4 / 3 = 3 + 1 = 4。这个 4 也就代表最终落到 4 的这个小区域中。 -PNG +PNG 我猜有人不能理解这个算式(是的,连公式都称不上),所以我再解释一下它是怎么来的。比如上面的第 6 行,row 为 5,5/3=1 可以理解为 **此时在第1大行上**,然后 (5/3)*3,是计算出当前第一大行处的 boxIndex 值。最后再加上的 4/3,意思是向右偏移几个大列。 -PNG +PNG 根据分析,给出代码: @@ -182,12 +182,12 @@ class Solution { 执行结果: -PNG +PNG ## 03、总结 最后,我在这里分享给大家一个很难很难的数独,欢迎大家来挑战!!挑战成功的,评论区留下你的答案! -PNG +PNG 好了,今天的题目就讲完了,我觉得讲的还是挺好的。大家要是认为ok的话,给我来个转发吧~感谢! \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/1.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/1.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/1.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/1.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29.md" similarity index 88% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29.md" index f5886b8d..ba91817b 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29.md" @@ -1,7 +1,7 @@ ---- -title: 费米估算 + +## 费米估算 date: 2020-07-11 ---- + > 今天为大家分享一道“奇葩”面试题。 @@ -27,11 +27,11 @@ date: 2020-07-11 这道题目主要考察人的估算能力。而估算界,有一个估算大牛叫做费米。 -PNG +PNG 这位大牛有多牛呢?据说第一颗原子弹正在试爆,费米随手把自己笔记本的一张纸撕成小碎片顺手一撒,碎纸随风飘落,在费米身后2米处落下。 -PNG +PNG 费米根据这个数据,心算得出核爆量大约是一万吨TNT。这个数据和一些尖端的仪器设备花了数星期时间来分析波速、波压得出的数据基本一致。 @@ -51,27 +51,27 @@ date: 2020-07-11 回到本题,我们要分析的问题是: -PNG +PNG 那我们至少得有多少辆车吧?但是并不是所有的车,每天都会上路。所以准确的说我们需要知道每天上路的车有多少。 -PNG +PNG 但是是所有上路的车都需要加油吗?当然不是,所以我们还得改改: -PNG +PNG 知道了每天上路需要加油的车辆数,我们得知道每个加油站可以满足多少辆车吧? -PNG +PNG 那加油站用什么满足车?自然是油咯。 -PNG +PNG 问题来了,那我们如何知道每天上路需要加油的车辆数?是不是我们可以转化为 北京车辆总数 / 加油频次: -PNG +PNG 这个加油频次,相信大家就很容易估算出来了。跑滴滴的一天一次油,正常开的话一周一次,开的少一点的话差不多半个月一次。 @@ -91,7 +91,7 @@ date: 2020-07-11 上面的费米估算大家应该都知道是个什么东东了。还有很多类似的题目“芝加哥的钢琴家数量”,“上海有多少滴滴”,“成都有多少家星巴克”这都是一类问题。 -PNG +PNG 其实到这里就可以结束了,但是我还是想说“数学家的嘴,骗人的鬼”,有一个叫做德雷克的数学家,他用费米估算来解释自己单身的原因: @@ -114,6 +114,6 @@ date: 2020-07-11 然鹅。他在论文发表结束后,就马上结婚了。。哈哈哈哈哈,当然,这并不是说费米估算没有用,或许是估算错误吧! -PNG +PNG 好了,基本就是这样了。周末写文不容易,求个转发,来个评论。感谢~ \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/10.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/10.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/11.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/11.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/11.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/11.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/12.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/12.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/12.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/12.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/9.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29/9.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30.md" similarity index 93% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30.md" index 3fa589ec..f5792309 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30.md" @@ -1,7 +1,7 @@ ---- -title: 分发饼干 + +## 分发饼干 date: 2020-07-11 ---- + > 今天给大家分享一道很魔性的题目(很多槽点),也是一道入门级别的贪心算法题目。 @@ -35,7 +35,7 @@ date: 2020-07-11 所以你应该输出1。 ``` -PNG +PNG
(难道剩下一个饼干喂狗吗?????)
@@ -47,11 +47,11 @@ date: 2020-07-11 其实策略就很简单了:**我们只需要在满足孩子胃口的前提下,尽可能分配小的饼干给到他**。典型的资本主义。 -PNG +PNG 具体怎么做呢,我们把饼干和小朋友都按照**从大到小**排列。 -PNG +PNG - 如果最大的饼干可以满足肚子最大的孩子,那就给他吃,同时比较下一个。 @@ -61,7 +61,7 @@ date: 2020-07-11 但是这里有个问题。凭什么就要先满足肚子最大的孩子。按道理讲,肚子越大应该越扛饿才对吧。所以我们换种思路,从**肚子最小的孩子**开始。 -PNG +PNG - 如果最小的饼干可以满足肚子最小的孩子,那就给他吃,同时比较下一个。 @@ -98,7 +98,7 @@ class Solution { 如果想先满足大肚子,代码也大同小异。直接从尾部向前遍历即可。执行结果: -PNG +PNG ## 03、一点分享 diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/1.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/1.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/1.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/1.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31.md" similarity index 95% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31.md" index 10e51364..4c1758b4 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31.md" @@ -1,7 +1,7 @@ ---- -title: 生命游戏(289) + +## 生命游戏(289) date: 2020-07-11 ---- + > 今天是小浩算法“365刷题计划”第102天。每个人的起点和终点都是一样的,但过程却各不相同。我们无法主宰生死却可以选择如何让生命有意义。我们如何用算法来进行一场生命的游戏呢! @@ -30,7 +30,7 @@ date: 2020-07-11 题目有点复杂,举例说明: -PNG +PNG 注意:**面板上所有格子需要同时被更新**:你不能先更新某些格子,然后使用它们的更新后的值再更新其他格子。 @@ -46,19 +46,19 @@ date: 2020-07-11 - R1:细胞数少于两个,则该位置**活细胞**死亡 - PNG + PNG - R2:有两个或三个活细胞,则该位置**活细胞**仍然存活 - PNG + PNG - R3:有超过三个活细胞,则该位置**活细胞**死亡 - PNG + PNG - R4:有三个活细胞,则该位置**死细胞**复活 - PNG + PNG 四个规则理解起来并不复杂,现在考虑如何解决问题。最自然的想法是:一个个的更新细胞状态。 @@ -66,11 +66,11 @@ date: 2020-07-11 但是这里我们会遇到一个问题:假设你每次更新完毕后,都把更新后的结果填入数组。那么当前轮其他格子的更新就会引用到你已经更新的结果。啥意思呢: -PNG +PNG 比如上面这个就是**错误**的:我们先依据规则4更新了绿色框处的状态,此时蓝色框色周围同样满足规则4。**已更新细胞的状态会影响到周围其他还未更新细胞状态的计算**。这明显不是我们想要的! -PNG +PNG 那我们最简单的思路:是不是只要我们能一直获取原始数组的数据,不就可以保证更新一直正确了吗!至于在哪里,其实不管是copy一个数组,还是说用hashmap存一下数值其实都ok。 @@ -212,7 +212,7 @@ public class Solution {     执行结果: -PNG +PNG 细心的读者也许会想到,这不就是卡诺图吗?是的。在大多数的矩阵状态变化类题目中,卡诺图、状态机 等都是一些常用的技巧。 @@ -238,9 +238,9 @@ public class Solution {     > 宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。 -PNG +PNG -PNG +PNG
diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/10.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/10.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/10.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/10.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/9.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/9.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/9.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31/9.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32.md" similarity index 95% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32.md" index d2cdf372..f45b939d 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32.md" @@ -1,7 +1,7 @@ ---- -title: 搜索二维矩阵(74) + +## 搜索二维矩阵(74) date: 2020-07-12 ---- + > 问:程序员最讨厌康熙的哪个儿子。 > @@ -86,7 +86,7 @@ target = 13 第二个条件意味着可以在行里进行二分搜索确定哪个元素; -PNG +PNG 如何使用二分查找找到哪行呢?只需要一个上下边界,再每次拿着中间行最大的值和目标值比一比。 @@ -175,11 +175,11 @@ class Solution { **1,1,2,3,5,8,13,21,34,55,89,144........** -PNG +PNG
(1+1=2,2+1=3,2+3=5.....21+5+8=21+13=34)
-PNG +PNG
diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/3.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/3.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/3.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32/3.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33.md" similarity index 85% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33.md" index 00373a58..c0903856 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33.md" @@ -1,15 +1,15 @@ ---- -title: 子集(78) + +## 子集(78) date: 2020-07-12 ---- + > 今天是小浩算法 “365刷题计划” 第105天。这是昨天一个同学面试快手被问到的算法题,很不幸的是他被挂掉了。征得对方同意后,拿出来分享给大家~ -PNG +PNG
(如果要进入算法交流群的,扫描二维码就可以了)
-PNG +PNG ## 01、题目示例 @@ -23,7 +23,7 @@ date: 2020-07-12
-**说明:**解集不能包含重复的子集 +**说明:** 解集不能包含重复的子集
@@ -37,7 +37,7 @@ date: 2020-07-12 题目本身没有太多需要补充的,初中数学知识: -PNG +PNG ## 02、题解分析(高级) @@ -47,13 +47,13 @@ date: 2020-07-12 首先我们可以证明一下 N 个元素的子集个数有 2^N 个: -PNG +PNG 可以类比为 N 个不同的小球,一次拿出若干个小球(可以不拿),对于每一个球都可以选择拿或者不拿,共有 N 个球,总共判断 N 次,产生了 2^N 个子集。比如:123,共有下面 8 个子集: -PNG +PNG -然后考虑解题思路,**暂且不谈回溯,我们其实可以用二进制来模拟每个元素是否选中的状态。**又因为我们已知了对于 N 个元素共有 2^N 个子集,所以我们直接遍历 2^N 个元素。 +然后考虑解题思路,**暂且不谈回溯,我们其实可以用二进制来模拟每个元素是否选中的状态。** 又因为我们已知了对于 N 个元素共有 2^N 个子集,所以我们直接遍历 2^N 个元素。 ```java class Solution { @@ -104,11 +104,11 @@ class Solution { 为帮助大家理解,假设 nums 为 [1,2,3],res 的存储过程为: -PNG +PNG 大家可以仔细体会一下这个题解。 -PNG +PNG ## 03、题解分析(普通) @@ -118,11 +118,11 @@ class Solution { 集合中所有元素的选/不选,其实构成了一个满二叉树。左子树选,右子树不选。自然,那从根节点到所有叶子节点的路径,就构成了所有的子集。 -PNG +PNG
(旋转90°)
-PNG +PNG 那这种解法其实就好理解很多了: diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/4.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/4.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/4.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/4.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/9.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33/9.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34.md" similarity index 85% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34.md" index 46f275a8..848f1f82 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34.md" @@ -1,11 +1,11 @@ ---- -title: 面试中的智力题 + +## 面试中的智力题 date: 2020-07-12 ---- + > 今天是小浩算法 “365刷题计划” 第106天。互联网公司面试,经常会出现一些奇奇怪怪的题目。今天就为大家扒几道。(第二道题目由读者提供,是真实的头条面试数据分析岗位对方问到的。防止题目侵权,本文给出的是**相似题型**) -PNG +PNG ## 01、量出4升水 @@ -21,23 +21,23 @@ date: 2020-07-12 题目没什么补充的,直接分析,一个3升和5升的水桶: -PNG +PNG 首先用三升水桶装满水,倒入五升水桶: -PNG +PNG 再次倒满三升水桶,填满后继续倒入五升水桶,直到五升水桶倒满。 -PNG +PNG 清空五升水桶,将三升水桶的一升水倒入: -PNG +PNG 再次填满三升水桶,倒入五升水桶中: -PNG +PNG ## 02、最大的钻石 @@ -53,9 +53,9 @@ date: 2020-07-12 不要认为这种题目不会出现在面试中,恰恰相反,这类题目出现的概率非常高。这不,有读者就碰到了。下面两个是知乎中也遇到该题的读者截图: -PNG +PNG -PNG +PNG 那这种问题主要考察面试者的什么能力呢?一个是面试临场随机应变的能力。第二就是分析问题的能力。 @@ -71,11 +71,11 @@ date: 2020-07-12 其实这个问题的原型叫做秘书问题,该类问题全部属于**最佳停止问题**。 -PNG +PNG 这类问题都有着统一的解法: -PNG +PNG 所以到我们的题目里,我们也是可以直接给出答案:**我们要选择先放弃前 37%(就是1/e)的钻石,此后选择比前 37% 都大的第一颗钻石。** @@ -87,7 +87,7 @@ date: 2020-07-12 事实上也有人通过测试证明了这个数据: -PNG +PNG 当 n=30 时,测试一万次,可以看到有 4000 次我们拿到了最大的钻石。 @@ -107,13 +107,13 @@ date: 2020-07-12 等等。这里再给出一个严谨的推导过程: -PNG +PNG ## 03、思维定势 > 下面这道题也是一道常见的智力题,但是这道题绝对不会出现在面试中了。拿出来分享给大家的原因,是期望不要被思维定势局限。 -PNG +PNG 这道题中有六个停车位,每个车位上都有一个数字,然而有一个车位上的数字被汽车挡住了,要求学生们在20秒内答出这个被挡住的车位上的数字。这是中国香港小学一道给6岁儿童设计的“停车场智力题”。(**大家可以在评论区留下答案**) diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/10.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/10.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/11.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/11.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/11.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/11.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/12.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/12.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/12.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/12.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/13.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/13.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/13.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/13.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/9.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34/9.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50.md" similarity index 82% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50.md" index 9040e203..b889c6ba 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50.md" @@ -1,9 +1,9 @@ ---- -title: 图的基础知识 + +## 图的基础知识 date: 2020-07-11 ---- + -PNG +PNG > 今天和大家聊聊关于图的一些知识。 @@ -15,11 +15,11 @@ date: 2020-07-11 在数据结构中,图是什么呢?喏,就是这样: -PNG +PNG Emmmm.....或者说常见一点的: -PNG +PNG 图是一个比树形关系复杂一点点,比线性关系复杂两点点的东东。 @@ -51,11 +51,11 @@ Emmmm.....或者说常见一点的: 图里最基本的单元是顶点(vertex),相当于树中的节点。顶点之间的关联关系,被称为边(edge)。而边可以分配一个数值(正负都ok),这个数值就叫做权重。 -PNG +PNG
(数据取自真实数据.....)
-PNG +PNG 当然,这里值得一提的是,树也可以被当做简单的图,而链表也可以被当做简单的树。 @@ -67,15 +67,15 @@ Emmmm.....或者说常见一点的: **边没有方向的图称为无向图。**比如说我微信里同时加了这5个妹子,这5个妹子也都认识我。 -PNG +PNG 突然有一天,除了小花,其他四个妹子同时间都把我拉黑了。我的微信里能看到她们,她们却看不到我。 -PNG +PNG 然后嘞,无向图就变成了有向图: -PNG +PNG ## 04、完全图 @@ -85,7 +85,7 @@ Emmmm.....或者说常见一点的: 在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图。大概就是这样: -PNG +PNG 而在有向图中,若每对顶点之间都有二条有向边相互连接,也算是完全图。 @@ -99,7 +99,7 @@ Emmmm.....或者说常见一点的: 循环图中的循环二字,指的是**起点和终点是同一节点时**产生的路径。所以,**循环图和有向图或无向图并没有什么关系,因为都有可能产生循环**。有向图,那就遵循边的方向。无向图,那只要成环就行。 -PNG +PNG 这三个: @@ -111,7 +111,7 @@ Emmmm.....或者说常见一点的: 那第二个,更多的是被称为,有向无环图 DAG(Directed Acyclic Graph。那下面这个也是 : -PNG +PNG 那上面这个像不像一棵树。。。。。所以计算机结构中的树(大多都是有向的),其实就是一个DAG。 @@ -123,11 +123,11 @@ Emmmm.....或者说常见一点的: 这个没啥好说的了,就是边有长度的图(**这个长度可以是各种含义**)。大部分我们接触到的图,都是加权图。 -PNG +PNG -但是这里如果细分的话,又分出来了。**顶点加权图和边加权图。**说白了,就是有人发现如果只给边加上权值(就是长度)并不够用,有时候也需要给顶点加上权值。 +但是这里如果细分的话,又分出来了。**顶点加权图和边加权图。** 说白了,就是有人发现如果只给边加上权值(就是长度)并不够用,有时候也需要给顶点加上权值。 -PNG +PNG ## 07、连通图 @@ -137,15 +137,15 @@ Emmmm.....或者说常见一点的: 连通的图,就是连通图: -PNG +PNG 如果不通了,就是非连通图:(这是一个图) -PNG +PNG 那没有连通在一起的这两坨(或者说移动的这两坨),我们叫作**岛**。(画外音,也许当年给联通移动起名的,就是程序员。从这里看,联通和移动本身就是对立的) -PNG +PNG 所以,如果我们的图里包含岛,那就是非连通图。 diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/1.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/1.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/1.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/1.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/10.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/10.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/11.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/11.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/11.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/11.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/12.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/12.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/12.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/12.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/13.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/13.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/13.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/13.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/14.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/14.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/14.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/14.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/15.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/15.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/15.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/15.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/16.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/16.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/16.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/16.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/17.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/17.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/17.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/17.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/18.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/18.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/18.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/18.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/8.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/9.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50/9.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51.md" similarity index 86% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51.md" index 8507aa1c..bfb60a00 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51.md" @@ -1,9 +1,9 @@ ---- -title: 旋转图像(48) + +## 旋转图像(48) date: 2020-07-11 ---- + -PNG +PNG > 今天是小浩算法 “365刷题计划” 第103天。这是前几天一个同学去滴滴面试的原题。 @@ -61,7 +61,7 @@ date: 2020-07-11 题目理解起来还是很容易的: -PNG +PNG ## 02、题解分析 @@ -71,23 +71,23 @@ date: 2020-07-11 我们用代码来旋转矩阵,肯定不能说像拿着一个东西整体直接旋转,类似这样: -PNG +PNG 一般容易想到的是,一层层的从外到内旋转每一圈(至于为什么不从内到外,如果你觉得方便,也ok),也就是俗称的找框框: -PNG +PNG 对每个框框,其实都有 4 个顶点: -PNG +PNG 剩下的就是交换这四个顶点的值: -PNG +PNG 交换完毕之后,再继续交换移动后的四个顶点: -PNG +PNG 那代码实现其实就很简单了: @@ -123,15 +123,15 @@ class Solution { 那我们除了找框框之外,还能不能有一些别的解法呢?当然可以,想想小时候我们通过对折来完成的填字游戏。 -PNG +PNG 我们观察这个矩阵: -PNG +PNG 我们观察这个矩阵,向右旋转90°,是不是可以理解为**先上下翻转,再沿对角线翻转**: -PNG +PNG 根据分析,完成代码(其实应该用Go写,交换元素会方便许多....): @@ -160,15 +160,15 @@ class Solution {     执行结果: -PNG +PNG ## 03、算法小知识 > 骑士巡逻(英语:Knight's tour)是指在按照国际象棋中骑士的规定走法走遍整个棋盘的每一个方格,而且每个网格只能够经过一次。假若骑士能够从走回到最初位置,则称此巡逻为“封闭巡逻”,否则,称为“开巡逻”。对于8*8棋盘,一共有26,534,728,821,064种封闭巡逻,但是到底有多少种开巡逻仍然未知。 -PNG +PNG -PNG +PNG
diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/1.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/1.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/1.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/1.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/10.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/10.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/11.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/11.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/11.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/11.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/12.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/12.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/12.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/12.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/13.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/13.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/13.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/13.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/3.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/3.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/3.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/3.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/8.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/8.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/8.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/8.gif" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/9.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51/9.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52.md" similarity index 91% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52.md" index 8569e683..f415866e 100644 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52.md" @@ -1,7 +1,7 @@ ---- -title: 螺旋矩阵Ⅱ(59) + +## 螺旋矩阵Ⅱ(59) date: 2020-07-12 ---- + > 今天是小浩算法 “365刷题计划” 第 108 天。为大家讲解 leetcode 第 59 题,是一道中等难度的题目。 @@ -19,11 +19,11 @@ date: 2020-07-12 很容易筛选面试者。 -PNG +PNG
-PNG +PNG ## 01、题目示例 @@ -48,7 +48,7 @@ date: 2020-07-12 题目理解较为容易,给定 n = 3,那就生成一个 3^2 = 9 的矩阵。大家看下面的图可能更加直观一些: -PNG +PNG ## 02、题解分析 @@ -66,19 +66,19 @@ date: 2020-07-12 然后模拟向内环绕的过程,逐层填充: -PNG +PNG 这种方法其实有一个专业点的名字,叫做:蛇形填数
-PNG +PNG
这里额外说一下,除了上面这种填充方式外,还有一种填充方式: -PNG +PNG 两者的区别,只是边界条件设定不同。 diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/1.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/1.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/2.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/2.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/3.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/3.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/4.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/14.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52/6.jpg" diff --git "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/021.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/021.md" similarity index 83% rename from "website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/021.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/021.md" index 9ddad471..cd0a333a 100644 --- "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/021.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/021.md" @@ -1,7 +1,7 @@ ---- -title: 指导学习(一) + +## 指导学习(一) date: 2020-07-01 ---- + > 我自己有个很喜欢的话,叫做 “练习 - 坚持 - 总结 - 提高”,我们已经练习了 70 天,如果不进行一些问题的总结,永远只低头看路,恐怕就会迷路。所以今儿咱们不讲算法题,而是讲一讲到底如何“解决问题”,本文**非常非常非常重要**,是我很长一段时间的心血与积累,大家一定要耐心看完,共包含3节: > @@ -86,14 +86,14 @@ date: 2020-07-01 - **递归,防止死循环和内存泄露**。由于递归需要堆栈,**所以内存消耗要比非递归代码要大很多**。而且,如果递归深度太大,可能系统撑不住。内存会存在突然飙升的情况。如果是数据错误导致无限循环,那问题就大了。所以这方面问题在开发的时候需要注意。 - **访问数组越界**,绝大多数的数组越界,根本原因在于对定义混淆。比如定义的时候想的是“以0起始”,但是写的时候写成了“以1起始”。究其根本,数组越界的问题,其实是对区间把控的问题。 -- **区间表意不明。**大部分的语言中,数组都以0为起始元素,但是人的思维习惯于以1为起始。那为什么数组要以0为起始元素,历史原因有很多,咱不说。对咱们有用的,3个。第一,因为我们选择左闭右开区间,比如 [0,n),我们可以很容易通过 n-0 得到数组中元素个数。这点大家要形成条件发射,看到数组,明确其个数。第二,闭区间很难去表示一个空数组,不信你试试,非常难受。第三,左闭右开的区间,迭代器只需要最少的操作符。可以让代码写起来非常的舒服,STL的算法和容器中基本都是如此。 -- **差一问题(栅栏错误)。**建造一条直栅栏(即不围圈),长30米、每条栅栏柱间相隔3米,需要多少条栅栏柱? 求数组 A[i]到 A[j] 的平均值,A[i] 到 A[j] 的和应该除以多少,是 j-i+1,还是 j-i?二分法中的 while 条件,到底是用 <= 还是 < ?这些都是差一问题,这类问题如何解决。**利用最小的的输入值测试代码的执行过程,长期反复,达到条件反射**。这个过程一定是在大量的题目练习中掌握的,如果你到目前还在纠结这个问题,请先扣心自问,是否刷过至少200道算法题。如果没有,请不要纠结,干就对了。如果有,来找我。 +- **区间表意不明。** 大部分的语言中,数组都以0为起始元素,但是人的思维习惯于以1为起始。那为什么数组要以0为起始元素,历史原因有很多,咱不说。对咱们有用的,3个。第一,因为我们选择左闭右开区间,比如 [0,n),我们可以很容易通过 n-0 得到数组中元素个数。这点大家要形成条件发射,看到数组,明确其个数。第二,闭区间很难去表示一个空数组,不信你试试,非常难受。第三,左闭右开的区间,迭代器只需要最少的操作符。可以让代码写起来非常的舒服,STL的算法和容器中基本都是如此。 +- **差一问题(栅栏错误)。** 建造一条直栅栏(即不围圈),长30米、每条栅栏柱间相隔3米,需要多少条栅栏柱? 求数组 A[i]到 A[j] 的平均值,A[i] 到 A[j] 的和应该除以多少,是 j-i+1,还是 j-i?二分法中的 while 条件,到底是用 <= 还是 < ?这些都是差一问题,这类问题如何解决。**利用最小的的输入值测试代码的执行过程,长期反复,达到条件反射**。这个过程一定是在大量的题目练习中掌握的,如果你到目前还在纠结这个问题,请先扣心自问,是否刷过至少200道算法题。如果没有,请不要纠结,干就对了。如果有,来找我。 - **内存溢出问题**。分为两种,一种是因为运算超出变量取值范围发生的内存溢出,比如二分法中的mid,就要使用 left+(right-left)>>1。另一种就是因为代码不严谨,比如递归没有退出条件,while死循环,等等导致内存溢出。 -- **初学者定义问题。**比如统计26个字母出现的次数,初学者会用hashmap,其实这种已知值范围的,定义成数组就可以了。其他类似数字0-9,每个月的天数,都是一样的 -- **写一半忘记题意。**这个根本原因还是因为思维脉络不清晰导致的,有时候初学者还会遇到一个问题。定义一个函数,比如叫做 juge() 返回 bool 值,本来应该是判断某条件成立时返回true,但是用的时候却以为,在条件不成立的时候返回true,最终导致结果错误。 -- **变量名错误。**不管是和方法参数中的变量名称冲突,还是因为本身表意不明,最终出现赋值错误,或者编译不通过。 -- **运算优先级错误。**比如位运算,各个语言中的优先级定义是略有不同的。有时候需要加括号,有时候不需要加。 -- **特殊值的处理。**一些找规律的题目,往往在等于0,等于1的时候,规律和其他的数不同,所以这种题目,需要对这种特殊值进行特殊处理。 +- **初学者定义问题。** 比如统计26个字母出现的次数,初学者会用hashmap,其实这种已知值范围的,定义成数组就可以了。其他类似数字0-9,每个月的天数,都是一样的 +- **写一半忘记题意。** 这个根本原因还是因为思维脉络不清晰导致的,有时候初学者还会遇到一个问题。定义一个函数,比如叫做 juge() 返回 bool 值,本来应该是判断某条件成立时返回true,但是用的时候却以为,在条件不成立的时候返回true,最终导致结果错误。 +- **变量名错误。** 不管是和方法参数中的变量名称冲突,还是因为本身表意不明,最终出现赋值错误,或者编译不通过。 +- **运算优先级错误。** 比如位运算,各个语言中的优先级定义是略有不同的。有时候需要加括号,有时候不需要加。 +- **特殊值的处理。** 一些找规律的题目,往往在等于0,等于1的时候,规律和其他的数不同,所以这种题目,需要对这种特殊值进行特殊处理。
diff --git "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022.md" similarity index 90% rename from "website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022.md" index a4c95da4..12653767 100644 --- "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022.md" @@ -1,9 +1,9 @@ ---- -title: 指导学习(二) + +## 指导学习(二) date: 2020-07-08 ---- + -> **今天是小浩算法“365刷题计划” - 刷题指导篇(小白篇)。**三年高考,五年刷题。leetcode不算从其他各处收录的题目,单就自己的题库,总共有1600+,如果按照每天刷一道的话,总共需要5年。那我们真的需要把这些题目全部刷完吗?如果不是,刷多少合适?又该怎么刷呢?本文我尽量言简意赅,直击大家的疑惑。(本文适合算法初学者) +> **今天是小浩算法“365刷题计划” - 刷题指导篇(小白篇)。** 三年高考,五年刷题。leetcode不算从其他各处收录的题目,单就自己的题库,总共有1600+,如果按照每天刷一道的话,总共需要5年。那我们真的需要把这些题目全部刷完吗?如果不是,刷多少合适?又该怎么刷呢?本文我尽量言简意赅,直击大家的疑惑。(本文适合算法初学者) ## 01、刷多少题 @@ -21,7 +21,7 @@ date: 2020-07-08 对于上面这个群体(请先自行判断是否可以归为此类),**刷题的目的基本是为了面试**。不管我多么巧舌如簧,告诉你算法可以提高思维,增强逻辑,是成为top coder的必然条件,等等等等。但最终都还是会回归到这个目的:**面试**。 -PNG +PNG 所以现在我们换掉问题:**没什么刷题经验的同学为了面试需要刷多少道题**?我的答案是:200道。 @@ -54,7 +54,7 @@ date: 2020-07-08 如果你有上面的疑惑,那么:你错了。坚持不下来一天一道的人和刷完200道题,毛关系都没有。回到我上面的例子,200道题目里。大概easy在130-150道左右,medium在30-50道,hard只占据了不到20道题。 -PNG +PNG 跑步和刷题不同。跑步是越来越慢,刷题却是越来越快的。对于初学者(正常人),在每一个tag刷了10道左右简单题之后,基本同类型的题目可以提高到每天2-3道easy题目,有的掌握好的,甚至能提高到每天刷5-10题。很多同类型题目,基本都是一个模子刻出来的。 @@ -76,7 +76,7 @@ date: 2020-07-08
-PNG +PNG
@@ -90,7 +90,7 @@ date: 2020-07-08 能。刷题本身就是一个学习的过程。比如二叉树的题,刷个30道,你一定会遇到BST。所以我个人认为学习系统的算法知识(也就是你们问我的,要不要买一本书,先看一遍再进行刷题)和 刷题 本身并不矛盾。你可以双管齐下,也可以单点突破,都ok。主要是,干就对了。 -PNG +PNG 到这里就会出现另一个问题,“我是从头刷,还是分类刷?” 我的建议是,如果稍微有点算法基础,你就从头刷leetcode前200道题。如果完全没有算法基础,可以考虑分tag来刷。并不是说按照tag的方式更好,而是在没有算法基础的前提下分tag来刷,除了掌握题型之外,对于知识的掌握很有益处。(想一想初高中是如何学习的)那为什么又说从头刷也是可以的?这个是因为,如果一直刷某一种类型的题,容易出现刷完一类忘掉前一类的问题,也容易对某一类题目疲惫。总之,**使用哪种方式取决于你**。关键是:干就对了! diff --git "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022/1.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022/1.gif" similarity index 100% rename from "website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022/1.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022/1.gif" diff --git "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022/2.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022/2.gif" similarity index 100% rename from "website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022/2.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022/2.gif" diff --git "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022/3.jpg" similarity index 100% rename from "website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022/3.jpg" diff --git "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022/4.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022/4.gif" similarity index 100% rename from "website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/022/4.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/022/4.gif" diff --git "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/023.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/023.md" similarity index 92% rename from "website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/023.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/023.md" index b24181e1..00c5c130 100644 --- "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/023.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/023.md" @@ -1,11 +1,11 @@ ---- -title: 指导学习(三) + +## 指导学习(三) date: 2020-07-12 ---- + 今天的文章,不浪,没图。给大家加加油! -PNG +PNG 回顾过去一年,京东、知乎、美团、微博、去哪儿、滴滴等。爆出裁员的有多少,虽然最终都被官方辟谣。**但是,你们懂的。** @@ -39,7 +39,7 @@ date: 2020-07-12
-比如说红黑树,我们需要知道这是一种常用的平衡二叉树(或者说特殊的平衡二叉树)知道其对于查找, 插入,删除的复杂度都是log(n) --- n 这里是说树中元素的个数。如果你是java栈,你可能还需要知道 hashmap 为什么选用红黑树来实现。要知道红黑树可以在一些非实时任务调度中,可以高效公平的调度任务。要知道其所有的应用,都是围绕着“平衡”二字。这才是数据结构的核心。 +比如说红黑树,我们需要知道这是一种常用的平衡二叉树(或者说特殊的平衡二叉树)知道其对于查找, 插入,删除的复杂度都是log(n) n 这里是说树中元素的个数。如果你是java栈,你可能还需要知道 hashmap 为什么选用红黑树来实现。要知道红黑树可以在一些非实时任务调度中,可以高效公平的调度任务。要知道其所有的应用,都是围绕着“平衡”二字。这才是数据结构的核心。
diff --git "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/023/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/023/1.jpg" similarity index 100% rename from "website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/023/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/2.\346\214\207\345\257\274\345\255\246\344\271\240/023/1.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001.md" similarity index 84% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001.md" index 4de0108d..7f62f134 100644 --- "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001.md" @@ -1,6 +1,6 @@ ---- -title: 两个数组的交集(350) ---- + +## 两个数组的交集(350) + ## 01、题目分析 @@ -70,27 +70,27 @@ func intersect(nums1 []int, nums2 []int) []int { > 题目在进阶问题中问道:如果给定的数组已经排好序呢?你将如何优化你的算法?我们分析一下,假如两个数组都是有序的,分别为:arr1 = [1,2,3,4,4,13],arr2 = [1,2,3,9,10] -![PNG](./001/1.jpg) +![PNG](001/1.jpg) 对于两个已经排序好数组的题,我们可以很容易想到使用双指针的解法~ 解题步骤如下: -<1>设定两个为0的指针,**比较两个指针的元素是否相等。**如果指针的元素相等,我们将两个指针一起向后移动,并且将相等的元素放入空白数组。下图中我们的指针分别指向第一个元素,判断元素相等之后,将相同元素放到空白的数组。 +<1>设定两个为0的指针,**比较两个指针的元素是否相等。** 如果指针的元素相等,我们将两个指针一起向后移动,并且将相等的元素放入空白数组。下图中我们的指针分别指向第一个元素,判断元素相等之后,将相同元素放到空白的数组。 -![PNG](./001/2.png) +![PNG](001/2.png) -<2>如果两个指针的元素不相等,**我们将小的一个指针后移。**图中我们指针移到下一个元素,判断不相等之后,将元素小的指针向后移动,继续进行判断。 +<2>如果两个指针的元素不相等,**我们将小的一个指针后移。** 图中我们指针移到下一个元素,判断不相等之后,将元素小的指针向后移动,继续进行判断。 -![PNG](./001/3.png) +![PNG](001/3.png) <3>反复以上步骤。 -![PNG](./001/4.png) +![PNG](001/4.png) <4>直到任意一个数组终止。 -![PNG](./001/5.png) +![PNG](001/5.png) ## 04、题目解答 diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001/1.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001/1.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001/2.png" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001/2.png" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001/3.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001/3.png" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001/3.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001/3.png" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001/4.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001/4.png" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001/4.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001/4.png" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001/5.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001/5.png" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001/5.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/001/5.png" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/002.md" similarity index 94% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/002.md" index 744d9776..a17ec73d 100644 --- "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/002.md" @@ -1,6 +1,6 @@ ---- -title: 最长公共前缀(14) ---- + +## 最长公共前缀(14) + ## 01、题目分析 @@ -48,7 +48,7 @@ title: 最长公共前缀(14) 具体过程如下图所示: -PNG +PNG >我们需要注意的是,在处理基准元素的过程中,**如果基准元素和任一一个元素无法匹配,则说明不存在最长公共元素。** @@ -81,6 +81,6 @@ func longestCommonPrefix(strs []string) string { 运行结果: -PNG +PNG 当然,我们也可以用分治法或者其他方法来解答这道题目。你可以自己尝试尝试哈。我们下期见! diff --git "a/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/002/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/002/1.png" new file mode 100644 index 00000000..f4518ba0 Binary files /dev/null and "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/002/1.png" differ diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/002/2.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/002/2.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/003.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/003.md" similarity index 96% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/003.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/003.md" index abf2e2d3..9d1ef371 100644 --- "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/003.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/003.md" @@ -1,12 +1,12 @@ ---- -title: 买卖股票的最佳时机(122) ---- + +## 买卖股票的最佳时机(122) + ## 01、题目分析 在leetcode上,股票相关的题目有8道之多: -PNG +PNG 而且这一类型的题,面试时出现的频率非常的高。稍微改一改条件,就让我们防不胜防。那我们如何攻克这一类题型呢?我们从最简单的一道开始看起: @@ -63,7 +63,7 @@ title: 买卖股票的最佳时机(122) 假设给定的数组为:[7, 1, 5, 3, 6, 4] 我们将其绘制成折线图,大概是下面这样: -PNG +PNG 如我们上面分析,我们要在满足1和2的条件下获取最大利益,其实就是尽可能多的低价买入高价卖出。而**每一次上升波段,其实就是一次低价买入高价卖出**。而我们没有限制交易次数,也就是我们需要**求出所有的上升波段的和**。上图里就是A+B,也就是(5-1)+(6-3) = 7,就是我们能获取到的最大利益。 diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/003/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/003/1.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/003/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/003/1.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/003/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/003/2.png" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/003/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/003/2.png" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/004.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/004.md" similarity index 92% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/004.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/004.md" index f0be2dd6..f24927f9 100644 --- "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/004.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/004.md" @@ -1,6 +1,6 @@ ---- -title: 旋转数组(189) ---- + +## 旋转数组(189) + ## 01、题目分析 @@ -51,13 +51,13 @@ title: 旋转数组(189) 如下图可以看到5,6,7 被移动到 数组头部。 -PNG +PNG 通过观察我们可以得到,我们要得到最终的结果。**我们只需要将所有元素反转,然后反转前 k 个元素,再反转后面l-k个元素,就能得到想要的结果。** 如下图: -PNG +PNG ## 03、题目解答 diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/004/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/004/1.png" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/004/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/004/1.png" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/004/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/004/2.png" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/004/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/004/2.png" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/005.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/005.md" similarity index 95% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/005.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/005.md" index 78ef4f63..95d74324 100644 --- "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/005.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/005.md" @@ -1,6 +1,6 @@ ---- -title: 原地删除(27) ---- + +## 原地删除(27) + ## 01、题目分析 @@ -26,7 +26,7 @@ title: 原地删除(27) 具体过程如下图所示: -PNG +PNG 根据分析,我们可以得到下面的题解: @@ -78,7 +78,7 @@ func removeElement(nums []int, val int) int { 移除的具体过程: -PNG +PNG 根据分析,我们可以得到下面的题解: diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/005/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/005/1.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/005/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/005/1.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/005/2.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/005/2.jpeg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/005/2.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/005/2.jpeg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/006.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/006.md" similarity index 94% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/006.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/006.md" index 777fd751..1710f547 100644 --- "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/006.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/006.md" @@ -1,6 +1,6 @@ ---- -title: 加一(66) ---- + +## 加一(66) + > 看到这个标题,大家肯定会觉得,不就是“加1”嘛,这么简单的问题我可以!但是就是这么简单的“加1”可是面试的高频题哦,所以我们就一起来看看吧。按照往例,我们还是从一道LeetCode题开始吧。 ## 01、题目分析 @@ -45,11 +45,11 @@ title: 加一(66) 大概是下面这样:(这个图解...真的有点太简单了...) -PNG +PNG 当然,这里我们需要考虑一种特殊情况,就是类似99,或者999,我们需要进行拼接数组。具体如下图: -PNG +PNG 通过以上分析,我们最后只需要将其转换成代码即可!这样看来,“加1”是不是也不像想象中的那么简单? diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/006/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/006/1.png" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/006/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/006/1.png" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/006/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/006/2.png" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/006/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/006/2.png" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007.md" similarity index 88% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007.md" index 3b3ff029..a3a47f82 100644 --- "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007.md" @@ -1,6 +1,6 @@ ---- -title: 两数之和(1) ---- + +## 两数之和(1) + ## 01、题目分析 @@ -41,7 +41,7 @@ func twoSum(nums []int, target int) []int { 执行结果: -PNG +PNG > 运行成功,但是该种解题方式的时间复杂度过高,达到了O(n²)。为了对运行时间复杂度进行优化,我们需要一种更有效的方法来检查数组中是否存在目标元素。我们可以想到用**哈希表**的方式,通过以空间换取时间的方式来进行。 @@ -53,15 +53,15 @@ func twoSum(nums []int, target int) []int { <1> 首先,我们还是先遍历数组 nums,i 为当前下标。我们需要将每一个遍历的值放入 map 中作为 key。 -PNG +PNG <2> 同时,对每个值都判断 map 中是否存在 **target-nums[i]** 的 key 值。在这里就是 9-7=2。我们可以看到 2 在 map 中已经存在。 -PNG +PNG <3> 所以,2 和 7 所在的 key 对应的 value,也就是 [0,1]。就是我们要找的两个数组下标。 -PNG +PNG ## 03、Go语言示例 @@ -84,4 +84,4 @@ func twoSum(nums []int, target int) []int { 执行结果: -PNG \ No newline at end of file +PNG \ No newline at end of file diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007/1.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007/1.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007/2.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007/2.jpeg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007/2.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007/2.jpeg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007/3.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007/3.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007/4.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007/4.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007/5.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/007/5.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008.md" similarity index 94% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008.md" index cd7d1939..6ccd13a0 100644 --- "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008.md" @@ -1,7 +1,7 @@ ---- -title: 三数之和(15) + +## 三数之和(15) date: 2020-07-06 ---- + > “时代中的一粒灰,落在个人那里,可能就是一座山。而我们偏偏处在一个尘土飞扬的时代之中。” 为表达全国各族人民对抗击新冠肺炎疫情斗争牺牲烈士和逝世同胞的深切哀悼,国务院于4月3日发布公告,决定 2020年4月4日 举行全国性哀悼活动。而我,在这里也致谢那些扛起大山的人! @@ -48,19 +48,19 @@ date: 2020-07-06 求解过程如下:首先我们先把数组排个序(原因一会儿说),排完序长这样: -PNG +PNG 因为我们要同时找三个数,所以**采取固定一个数,同时用双指针来查找另外两个数的方式**。所以初始化时,我们选择固定第一个元素(当然,这一轮走完了,这个蓝框框我们就要也往前移动),同时将下一个元素和末尾元素分别设上 left 和 right 指针。画出图来就是下面这个样子: -PNG +PNG 现在已经找到了三个数,当然是计算其三值是否满足三元组。但是这里因为我们已经排好了序,如果**固定下来的数(上面蓝色框框)本身就大于 0,那三数之和必然无法等于 0**。比如下面这种: -PNG +PNG 然后自然用脚指头也能想到,我们需要移动指针。现在我们的排序就发挥出用处了,**如果和大于0,那就说明 right 的值太大,需要左移。如果和小于0,那就说明 left 的值太小**,需要右移。(上面这个思考过程是本题的核心) 整个过程如下图所示: -PNG +PNG 其中:在第6行时,因为三数之和大于0,所以right进行了左移。最后一行,跳过了重复的-1。 @@ -110,7 +110,7 @@ class Solution { 执行结果: -PNG +PNG 给一个python版本的(这个我就直接拿别人的代码了,思想都一样) diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008/1.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008/1.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008/2.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008/2.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008/3.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008/3.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008/4.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008/4.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008/5.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/008/5.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009.md" similarity index 91% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009.md" index 7f2a4e5f..7d674dec 100644 --- "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009.md" @@ -1,7 +1,7 @@ ---- -title: Z字形变换(6) + +## Z字形变换(6) date: 2020-07-08 ---- + > 今天为大家分享一道让很多人头疼过的题目 - Z字形变化。 @@ -13,7 +13,7 @@ date: 2020-07-08 | 第6题:Z 字形变换 | | ------------------------------------------------------------ | -| 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 **"LEETCODEISHIRING" **行数为 3 时,排列如下: | +| 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 **"LEETCODEISHIRING"** 行数为 3 时,排列如下: | ``` L C I R @@ -53,7 +53,7 @@ E C I H N T S G ``` -PNG +PNG ## 02、题目分析 @@ -67,7 +67,7 @@ T S G 假若我们采用示例2的数据来进行分析,输入字符串 s 为 "LEETCODEISHIRING", numRows 为 4 ,画成图大概长这样: -PNG +PNG 重点来了,**我们的目标是按行打印,那总得有个东西来存储每行的数据吧**?因为只需要存储**每行**的数据,那是不是用个数组就可以了。(当然,你硬说搞个map来存也没啥毛病,就是有点闲得蛋疼) @@ -75,23 +75,23 @@ T S G 问题来了,那数组设置多大呢?自然是有多少行我们就设置多大呗,换句话说,numRows多大,我们的数组就设置多大。画成图大概就是下面这个样子: -PNG +PNG 存储的容器有了,原字符串也列出来是啥样了,现在嘎哈?自然就是把原字符串放到容器里咯。怎么放?**根据 numRows 的大小来回进行放置即可**(即从0到n-1,再从n-1到0)。具体的请看下图: -PNG +PNG 上面的图长得不得了,但是观察我们能看出来,**每 2n-2 即为一个周期**。到了这里,应该没有人会质疑这是一道小学题目了吧。。。把所有的字符串放完之后,大概就是下面这个样子: -PNG +PNG 最后一步,咱们让这个数组排排坐,就可以开始吃果果: -PNG +PNG 如果看不清楚,不如这样: -PNG +PNG 根据分析,得出代码(好久没翻go的牌子了): @@ -119,7 +119,7 @@ func convert(s string, numRows int) string { 执行结果: -PNG +PNG 上面的代码要强调两点: diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/1.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/1.gif" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/1.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/1.gif" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/2.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/2.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/3.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/3.jpg" diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/4.jpg" similarity index 100% rename from "website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/4.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/5.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/5.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/6.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/6.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/7.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/7.jpg" diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/8.jpg" similarity index 100% rename from "website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/3.\346\225\260\347\273\204\347\263\273\345\210\227/009/8.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/101.md" similarity index 93% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/101.md" index 11f5fd78..88a25c05 100644 --- "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/101.md" @@ -1,6 +1,6 @@ ---- -title: 删除链表倒数第N个节点(19) ---- + +## 删除链表倒数第N个节点(19) + ## 01、哨兵节点 @@ -10,7 +10,7 @@ title: 删除链表倒数第N个节点(19) 比如原链表为a->b->c,则加了哨兵节点的链表即为x->a->b>c,如下图: -PNG +PNG 那我们为什么需要引入哨兵节点呢?举个例子,比如我们要删除某链表的第一个元素,**常见的删除链表的操作是找到要删元素的前一个元素**,假如我们记为 pre。我们通过: @@ -47,7 +47,7 @@ title: 删除链表倒数第N个节点(19) > 首先我们思考,让我们删除倒数第N个元素,那我们**只要找到倒数第N个元素就可以了**,那怎么找呢?我们**只需要设置两个指针变量,中间间隔N-1元素。当后面的指针遍历完所有元素指向nil时,前面的指针就指向了我们要删除的元素。**如下图所示: -PNG +PNG 接下来,我们只要同时定位到要删除的元素的前1个元素,通过前面讲过的删除操作,就可以很顺利的完成这道题目啦。 @@ -63,7 +63,7 @@ title: 删除链表倒数第N个节点(19) 下面是解题过程图,可以看得更清楚哦。 -PNG +PNG ## 04、题目解答 diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/101/1.png" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/101/1.png" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/101/2.png" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/101/2.png" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101/3.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/101/3.jpeg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101/3.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/101/3.jpeg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102.md" similarity index 89% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102.md" index 690ece4b..114dc759 100644 --- "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102.md" @@ -1,6 +1,6 @@ ---- -title: 合并两个有序链表(21) ---- + +## 合并两个有序链表(21) + ## 01、题目分析 @@ -29,7 +29,7 @@ l2 = [1,3,4] 同时我们设定一个 "prehead" 的哨兵节点,大概是下面这样: -PNG +PNG ## 02、题目图解 @@ -37,15 +37,15 @@ l2 = [1,3,4] 1. 首先我们将 prehead 指向 l1 或者 l2 中比较小的一个。如果相等,则任意一个都可以。此时的 l1 为 [2,4],l2 为 [1,3,4] - PNG + PNG 2. 我们继续上面的步骤。将 prehead 的链表指向 l1 和 l2 中较小的一个。现在这里就是指向1。 - PNG + PNG 3. 反复上图步骤。 - PNG + PNG 4. 现在 prehead.Next 就是我们需要的链表。 diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102/1.png" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102/1.png" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102/2.png" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102/2.png" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102/3.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102/3.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102/4.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/102/4.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103.md" similarity index 94% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103.md" index 5f92f3c9..a246618f 100644 --- "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103.md" @@ -1,6 +1,6 @@ ---- -title: 环形链表(21) ---- + +## 环形链表(141) + > 今天为大家带来,**链表检测成环**的经典题目。如果你觉得你会了,请你不妨耐心些认真看下去,我相信会有一些不一样的收获!还是先从一道题目开始哟,准备好了吗? Let' s go ! ## 01、题目分析 @@ -17,7 +17,7 @@ title: 环形链表(21) 解释:链表中有一个环,其尾部连接到第二个节点。 ``` -PNG +PNG **示例 2:** @@ -27,7 +27,7 @@ title: 环形链表(21) 解释:链表中有一个环,其尾部连接到第一个节点。 ``` -PNG +PNG **示例 3:** @@ -37,7 +37,7 @@ title: 环形链表(21) 解释:链表中没有环。 ``` -PNG +PNG > **题目可能你会觉得过于简单!但是不妨耐心看完!** > @@ -134,7 +134,7 @@ var hasCycle = function(head) { 假设链表为 PNG, 其步骤如下: -PNG +PNG 分析完毕,直接上代码: @@ -165,7 +165,7 @@ func hasCycle(head *ListNode) bool { 如果没看懂,我们来分析:在快的快追上慢的时,他们之间一定是只差 1 个或者 2 个格子。如果落后 1 个,那么下一次就追上了。如果落后 2 个,那么下一次就落后 1 个,再下一次就能追上!如下图: -PNG +PNG 所以我们的快指针的步长可以设置为 2 。 diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/1.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/1.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/2.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/2.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/3.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/3.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/4.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/4.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/5.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/5.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/6.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/103/6.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104.md" similarity index 92% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104.md" index d2f0f0cc..f2eee258 100644 --- "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104.md" @@ -1,7 +1,7 @@ ---- -title: 两数相加(2) + +## 两数相加(2) date: 2020-07-09 ---- + > 前几天写了一篇“小白为了面试如何刷题”的文章大受好评。随之而来的是好多小伙伴私下跑来问我“**浩哥,你说前200道题很好,但是前两百道题的难度很大,我不会怎么办**”这问题我想了一两天。。。好吧,既然你们说难不会。那我干脆就把前两百道题都给你们配上图解,全部安排,这样总可以了吧?牛气冲天有木有,哪个公号主敢这么干的!奥利给,搞起。今儿为大家分享经典面试题目 - 两数相加。做过的朋友,也不要急着叉掉,不妨借机复习一番。 @@ -53,23 +53,23 @@ date: 2020-07-09 老样子,我们还是先画图,假若我们的链表是 (2 -> 4 -> 3) + (5 -> 6 -> 4) ,大概就是这样(注意,这里我们其实是要完成 342 + 465): -PNG +PNG 加法肯定是从最低位到最高位进行相加,也就是这里的**链表头到链表尾进行相加,所以需要遍历链表**。我们令 l1 和 l2 指向两个链表的头,用一个 tmp 值来存储同一位相加的结果,以及一个新的链表来存储 tmp 的值。(为什么不直接用新链表存储结果,而是用 tmp 先存储结果,再用新链表存储 tmp 的值呢?请继续往下看) -PNG +PNG 记住:**所有模拟运算的题目,都需要考虑进位**。这里因为个位不涉及进位,开始计算十位。我们同时遍历 l1,l2,以及新链表到下一位。 -PNG +PNG 重复上面的操作,可以看到十位与个位不同,发生了进位。这时,刚才的 tmp 就有了用武之地。**我们使用 tmp 携带进位的值到下一位的运算**。自然,这里的链表也不能直接存储 tmp 的值了,而是要存储 tmp%10 的值。重复这个步骤,**直到两个链表都遍历完成,并且 tmp 没有进位值**: -PNG +PNG 现在只需要返回我们的新链表就可以了。问题来了,**因为我们没有构造哨兵节点,所以此时不太容易直接返回新链表**。所以在整个流程的第一步,我们还需要用一个哨兵节点指向我们的新链表。 -PNG +PNG 分析完毕,直接上代码(好久没翻Go的牌子了): @@ -99,7 +99,7 @@ func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { 执行结果: -PNG +PNG ## 03、总结 diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/1.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/1.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/2.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/2.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/3.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/3.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/4.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/4.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/5.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/5.jpg" diff --git "a/website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/6.jpg" similarity index 100% rename from "website/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/4.\351\223\276\350\241\250\347\263\273\345\210\227/104/6.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201.md" similarity index 99% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201.md" index 34e88a69..54f2f488 100644 --- "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201.md" @@ -1,6 +1,6 @@ ---- -title: 爬楼梯(70) ---- + +## 爬楼梯(70) + ## 01、概念讲解 diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201/1.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201/1.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201/2.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201/2.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202.md" similarity index 97% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202.md" index 02d04cf5..553b97b8 100644 --- "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202.md" @@ -1,6 +1,6 @@ ---- -title: 最大子序和(53) ---- + +## 最大子序和(53) + > 在上一篇文章[011.动态规划系列 —第一讲(70)](c1/011.md)中,我们讲解了DP的概念并且通过示例了解了什么是动态规划。本篇中,我们将继续通过1道简单题型,进一步学习动态规划的思想。 ## 01、题目分析 @@ -63,7 +63,7 @@ title: 最大子序和(53)
分析完毕,我们绘制成图(图中假定 nums 为 [-2,1,-3,4,-1,2,1,-5,4]): -PNG +PNG ## 03、Go语言示例 diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202/1.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202/1.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203.md" similarity index 88% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203.md" index b6589bd8..87cc7023 100644 --- "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203.md" @@ -1,6 +1,6 @@ ---- -title: 最长上升子序列(300) ---- + +## 最长上升子序列(300) + > 在上一篇中,我们了解了什么是DP(动态规划),并且通过DP中的经典问题 "最大子序和",学习了**状态转移方程**应该如何定义。在本节中,我们将沿用之前的分析方法,通过一道例题,进一步巩固之前的内容! ## 01、题目分析 @@ -26,14 +26,14 @@ title: 最长上升子序列(300) ## 02、题目图解 -首先我们分析题目,要找的是**最长上升子序列**(Longest Increasing Subsequence,LIS)。因为题目中没有要求连续,所以**LIS可能是连续的,也可能是非连续的。**同时,**LIS符合可以从其子问题的最优解来进行构建**的条件。所以我们可以尝试用动态规划来进行求解。首先我们定义状态: +首先我们分析题目,要找的是**最长上升子序列**(Longest Increasing Subsequence,LIS)。因为题目中没有要求连续,所以 **LIS可能是连续的,也可能是非连续的。** 同时,**LIS符合可以从其子问题的最优解来进行构建**的条件。所以我们可以尝试用动态规划来进行求解。首先我们定义状态:
>
dp[i] :表示以nums[i]结尾的最长上升子序列的长度
我们假定nums为[1,9,5,9,3],如下图: -PNG +PNG 我们分两种情况进行讨论: @@ -58,7 +58,7 @@ title: 最长上升子序列(300) 分析完毕,我们绘制成图: -PNG +PNG ## 03、Go语言示例 diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203/1.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203/1.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203/2.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203/2.jpeg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203/2.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203/2.jpeg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204.md" similarity index 90% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204.md" index 0f17f1ce..e6c4aeed 100644 --- "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204.md" @@ -1,6 +1,6 @@ ---- -title: 三角形最小路径和(120) ---- + +## 三角形最小路径和(120) + > 在上一篇中,我们通过题目**“最长上升子序列” 以及 "最大子序和",**学习了DP(动态规划)在**线性关系**中的分析方法。这种分析方法,也在运筹学中被称为“线性动态规划”,具体指的是 “目标函数为特定变量的线性函数,约束是这些变量的线性不等式或等式,目的是求目标函数的最大值或最小值”。这点大家作为了解即可,不需要死记,更不要生搬硬套! > @@ -30,17 +30,17 @@ title: 三角形最小路径和(120) ## 02、题目图解 -首先我们分析题目,要找的是**三角形最小路径和,**这是个啥意思呢?假设我们有一个三角形:[[2], [3,4], [6,5,7], +首先我们分析题目,要找的是**三角形最小路径和,** 这是个啥意思呢?假设我们有一个三角形:[[2], [3,4], [6,5,7], [4,1,8,3]] -PNG +PNG 那从上到下的最小路径和就是2-3-5-1,等于11。 由于我们是使用数组来定义一个三角形,所以便于我们分析,我们将三角形稍微进行改动: -PNG +PNG 这样相当于我们将整个三角形进行了拉伸。这时候,我们根据题目中给出的条件:每一步只能移动到下一行中相邻 @@ -50,7 +50,7 @@ title: 三角形最小路径和(120) 到[3,1]和[3,2]的位置上。如下图所示: -PNG +PNG 题目明确了之后,现在我们开始进行分析。题目很明显是**一个找最优解的问题,并且可以从子问题的最优解进** @@ -64,7 +64,7 @@ title: 三角形最小路径和(120) 继续分析,如果我们要求dp[i][j],那么其一定会从自己头顶上的两个元素移动而来。 -PNG +PNG 如5这个位置的最小路径和,要么是从2-3-5而来,要么是从2-4-5而来。然后取两条路径和中较小的一个即可。进 @@ -74,17 +74,17 @@ title: 三角形最小路径和(120) 但是,我们这里会遇到一个问题!除了最顶上的元素之外, -PNG +PNG **最左边的元素只能从自己头顶而来**。(2-3-6-4) -PNG +PNG **最右边的元素只能从自己左上角而来**。(2-4-7-3) 然后,我们观察发现,**位于第2行的元素,都是特殊元素**(**因为都只能从[0,0]的元素走过来**) -PNG +PNG 我们可以直接将其特殊处理,得到: @@ -153,7 +153,7 @@ func min(a, b int) int { 运行结果: -PNG +PNG 运行上面的代码,我们发现使用的内存过大。我们有没有什么办法可以压缩内存呢?通过观察我们发现,**在我们** @@ -161,7 +161,7 @@ func min(a, b int) int { **据**。绘制成图如下: -PNG +PNG 优化后的代码如下: @@ -205,5 +205,5 @@ func min(a, b int) int { 运行结果: -PNG +PNG diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/1.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/1.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/1.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/1.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/10.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/10.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/2.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/2.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/2.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/2.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/3.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/3.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/3.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/3.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/4.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/4.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/4.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/4.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/5.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/5.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/5.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/5.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/6.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/6.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/6.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/6.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/7.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/7.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/7.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/7.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/8.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/8.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/9.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/9.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/9.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204/9.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205.md" similarity index 90% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205.md" index dcf9b8fa..38329981 100644 --- "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205.md" @@ -1,6 +1,6 @@ ---- -title: 最小路径和(64) ---- + +## 最小路径和(64) + > 在上一篇中,我们通过分析,顺利完成了“**三角形最小路径和**”的动态规划题解。在本节中,我们继续看一道相似题型,以求能完全掌握这种“路径和”的问题。话不多说,先看题目: ## 01、题目分析 @@ -32,9 +32,9 @@ title: 最小路径和(64) ## 02、题目图解 -首先我们分析题目,要找的是 **最小路径和,**这是个啥意思呢?假设我们有一个 m * n 的矩形 :[[1,3,1],[1,5,1],[4,2,1]] +首先我们分析题目,要找的是 **最小路径和,** 这是个啥意思呢?假设我们有一个 m * n 的矩形 :[[1,3,1],[1,5,1],[4,2,1]] -PNG +PNG 那从**左上角到右下角**的最小路径和,我们可以很容易看出就是 1-3-1-1-1 ,这一条路径,结果等于 7 。 @@ -50,7 +50,7 @@ title: 最小路径和(64) 继续分析,根据题目给的条件,如果我们要求 dp[i][j] ,那么它一定是从自己的上方或者左边移动而来。如下图所示: -PNG +PNG >
5,只能从3或者1移动而来
> @@ -71,7 +71,7 @@ title: 最小路径和(64) - 最上面一行,只能由左边移动而来(1-3-1) - 最左边一列,只能由上面移动而来(1-1-4) -PNG +PNG 最后,因为我们的目标是**从左上角走到右下角**,**整个网格的最小路径和其实就是包含右下角元素的最小路径和**。即: @@ -125,11 +125,11 @@ func min(a, b int) int { 运行结果: -PNG +PNG 同样,运行上面的代码,我们发现使用的内存过大。有没有什么办法可以压缩内存呢?通过观察我们发现,**在我们自左上角到右下角计算各个节点的最小路径和的过程中,我们只需要使用到之前已经累积计算完毕的数据,并且不会再次访问之前的元素数据**。绘制成图如下:(大家看这个过程像不像扫雷,其实如果大家研究扫雷外挂的话,就会发现在扫雷的核心算法中,就有一处颇为类似这种分析方法,这里就不深究了) -PNG +PNG 优化后的代码如下: @@ -163,7 +163,7 @@ func min(a, b int) int { 运行结果: -PNG +PNG
diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/1.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/1.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/2.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/2.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/3.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/3.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/4.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/4.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/5.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/5.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/6.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205/6.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206.md" similarity index 94% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206.md" index c6cd7162..498ba580 100644 --- "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206.md" @@ -1,6 +1,6 @@ ---- -title: 打家劫舍(198) ---- + +## 打家劫舍(198) + > 在前两篇中,我们分别学习了 “**三角形最小路径和**” 以及“**矩形最小路径和**” 的问题,相信已经掌握了这类题型的解题方式。我们只要**明确状态的定义**,基本上都可以顺利求解。 > @@ -60,11 +60,11 @@ title: 打家劫舍(198) 如果是状态一,偷盗含第 i 个房间时能获取的最高金额,我们相当于要**找到偷盗每一间房子时可以获取到的最大金额**。比如下图,我们要找到 dp[4] ,也就是偷盗 9 这间房子时,能获取到的最大金额。 -PNG +PNG 那我们就需要找到与9不相邻的前后两段中能获取到的最大金额。 -PNG +PNG 我们发现题目进入恶性循环,因为我们若要找到与9不相邻的两端中能偷盗的最大金额,根据 dp[i] 的定义,我们就又需要分析在这两段中盗取每一间房子时所能获取的最大利益!想想都很可怕!所以我们放弃掉这种状态的定义。 @@ -78,7 +78,7 @@ title: 打家劫舍(198) (相当于小贼背了个背包,里边装了之前偷来的财物,每到达下一个房间门口,来选择是偷还是不偷。) -PNG +PNG ## 03、GO语言示例 @@ -114,7 +114,7 @@ func max(a,b int) int { 运行结果: -PNG +PNG 同样,运行上面的代码,我们发现使用的内存过大。有没有什么办法可以压缩内存呢?我们很容易想到,在小贼偷盗的过程中,不可能转回头去到自己已经偷过的房间!(太蠢)小偷只需要每次将财物搬到下一个房间就行! @@ -150,5 +150,5 @@ func max(a,b int) int { 运行结果: -PNG +PNG diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/1.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/1.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/2.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/2.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/3.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/3.png" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/3.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/3.png" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/4.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/4.jpg" diff --git "a/website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/5.jpg" similarity index 100% rename from "website/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/5.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206/5.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301.md" similarity index 93% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301.md" index 48f0beba..7de013f7 100644 --- "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301.md" @@ -1,6 +1,6 @@ ---- -title: 反转字符串(301) ---- + +## 反转字符串(301) + ## 01、题目分析 @@ -38,7 +38,7 @@ title: 反转字符串(301) 具体过程如下图所示: -PNG +PNG ## 03、Go语言示例 diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301/1.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301/1.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302.md" similarity index 85% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302.md" index 3b1ec7a4..7d745dc3 100644 --- "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302.md" @@ -1,6 +1,6 @@ ---- -title: 字符串中的第一个唯一字符(387) ---- + +## 字符串中的第一个唯一字符(387) + ## 01、题目分析 @@ -18,9 +18,9 @@ s = "loveleetcode", 返回 2. ``` - **注意事项:**您可以假定该字符串只包含小写字母。 +**注意事项:** 您可以假定该字符串只包含小写字母。 ->
常考题目,建议自行思考 1-2 分钟先~
+>
常考题目,建议自行思考 1-2 分钟先~
## 02、题目图解 @@ -30,11 +30,11 @@ s = "loveleetcode", 图解如下: -PNG +PNG ## 03、GO语言示例 - 根据以上分析,可以得到代码如下: +根据以上分析,可以得到代码如下: ```go func firstUniqChar(s string) int { diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302/1.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302/1.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303.md" similarity index 95% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303.md" index 974ab65e..ff540014 100644 --- "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303.md" @@ -1,7 +1,7 @@ ---- -title: 实现 Sunday 匹配 + +## 实现 Sunday 匹配 date: 2020-07-08 ---- + > 前几天的内容大家可能会觉得比较散。这是因为我目前正在筹划**背包系列**和**贪心系列**两个主题的内容,所以时间比较紧张,就拿出了之前写的一些题解凑凑数。不过呢,今天我将为大家开启一个新的篇章 - **字符串匹配系列篇**,文章写得很用心,相信大家定有所获。 @@ -67,23 +67,23 @@ date: 2020-07-08 一般来讲,字符串匹配算法第一步,**都是把目标串和模式串对齐**。不管是KMP,BM,SUNDAY都是这样。 -PNG +PNG 而对于SUNDAY算法,我们**从头部开始比较,一旦发现不匹配,直接找到主串中位于模式串后面的第一个字符**,即下面绿色的 “s”。(这里说明一下,为什么是找模式串后面的第一个字符。在把模式串和目标串对齐后,如果发现不匹配,那肯定需要移动模式串。问题是需要移动多少步。各字符串匹配算法之间的差别也来自于这个地方,对于KMP,是建立部分匹配表来计算。BM,是反向比较计算移动量。对于SUNDAY,就是找到模式串后的第一个字符。因为,无论模式串移动多少步,模式串后的第一个字符都要参与下一次比较,也就是这里的 “s”) -PNG +PNG 找到了模式串后的第一个字符 “s”,接下来该怎么做?我们需要**查看模式串中是否包含这个元素,如果不包含那就可以跳过一大片,从该字符的下一个字符开始比较。** -PNG +PNG 因为仍然不匹配(空格和l),我们继续重复上面的过程。找到模式串的下一个元素:t -PNG +PNG 现在有意思了,我们发现 t 被包含于模式串中,并且 t 出现在模式串倒数第3个。所以我们把模式串向前移动3个单位: -PNG +PNG 有内味了,我们发现竟然匹配成功了,是不是很神奇?证明的过程今天暂且不谈(后面我会出一个算法证明篇,来证明之前讲过的一些算法。**我需要你做的是,掌握上面这些!**) diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/1.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/1.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/2.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/2.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/3.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/3.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/4.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/4.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/5.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303/5.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304.md" similarity index 95% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304.md" index 8a4b35b8..0ca22b74 100644 --- "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304.md" @@ -1,7 +1,7 @@ ---- -title: 大数打印 + +## 大数打印 date: 2020-07-08 ---- + > 穿插着为大家分享一道经典面试题目。额外说明的一点是,这道题本身很简单,但是却可以作为很多 中等/困难 题目的基础,比如 超级次方,实现pow(x,n) 等等,在面试时需要额外小心。建议大家掌握!话不多说,直接看题。 @@ -98,7 +98,7 @@ func printNumbers(n int) []int { 执行结果: -PNG +PNG ## 04、题目继续升级 @@ -112,7 +112,7 @@ func printNumbers(n int) []int { 这里先复习一下大数加法:在加法运算的时候假如有两个10000位数的两个数进行相加,那么用int、long、double型都装不下这么多位数,**一般采用char数组来实现加法运算,解决精度的问题**。说白了是啥意思,我们用 1234567 和 1234 来模拟一下: -PNG +PNG - 取两个数位数大的一个作为数组长度 - 对两个数建立char数组,保存每一位上的值 @@ -126,7 +126,7 @@ func printNumbers(n int) []int {
-对于本题,我们该如何模拟一个 “最大的n位十进制数” 呢?其实也是一样的,**我们采用 char 数组进行存储**。而我们每次递增1,相当于进行一次**字符串相加**的运算。但是这里额外要说明的一点是,我把题解恢复成了原题的要求:**使用打印输出,而不是通过数组返回的形式。**毕竟返回数组的形式只是 leetcode 为了兼容平台测试而改编的。这里我就直接给出从剑指offer改编的题解了(JAVA): +对于本题,我们该如何模拟一个 “最大的n位十进制数” 呢?其实也是一样的,**我们采用 char 数组进行存储**。而我们每次递增1,相当于进行一次**字符串相加**的运算。但是这里额外要说明的一点是,我把题解恢复成了原题的要求:**使用打印输出,而不是通过数组返回的形式。** 毕竟返回数组的形式只是 leetcode 为了兼容平台测试而改编的。这里我就直接给出从剑指offer改编的题解了(JAVA): ```java //java @@ -197,7 +197,7 @@ public void printNumbers(int n) { 同样,我也实验了一下,如果我硬性的把代码改成数组的形式,然后在leetcode测试用例中构造 n = 10,就会出现这个: -PNG +PNG 所以建议大家是在IDE里练习,今天的题目到这里就结束了。 diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/1.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/1.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/2.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/2.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/3.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304/3.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305.md" similarity index 94% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305.md" index 9a6c6bd0..bd3bec38 100644 --- "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305.md" @@ -1,7 +1,7 @@ ---- -title: 验证回文串(125) + +## 验证回文串(125) date: 2020-07-10 ---- + > **今天是小浩算法 “365刷题计划”- 储备日。**难顶,我本来今天在写最长回文子串这个题目。然后我突然在想,直接讲这个会不会仍然有同学看不懂,为什么不从最简单的讲起呢。于是,今天的文章诞生了。于是,小浩又熬夜到了凌晨。 @@ -13,7 +13,7 @@ date: 2020-07-10 | ------------------------------------------------------------ | | 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 | -**说明:**本题中,我们将空字符串定义为有效的回文串。 +**说明:** 本题中,我们将空字符串定义为有效的回文串。
@@ -81,7 +81,7 @@ class Solution { 执行结果: -PNG +PNG 然后上面的代码大家肯定也觉得简单的一批。但是既然我们都知道哪些字符是幺蛾子(**除了字母和数字,都是幺蛾子**),为啥子不直接遍历的时候跳过嘞?这样是不是就不用先做一个替换的预处理了。 @@ -115,7 +115,7 @@ class Solution { 执行结果: -PNG +PNG 好吧,那既然我们都可以把幺蛾子跳过了,那有木有现成的跳过幺蛾子的API来用嘞?我找了找,java 中没有特别现成的拿来主义,但是我又不想造轮子,那就去别的语言里找找呗。 @@ -151,7 +151,7 @@ class Solution: 然后,我还想祭出终极大杀器 之 战斗魔鬼! -PNG +PNG ## 03、总结 diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/1.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/1.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/2.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/2.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/3.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305/3.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306.md" similarity index 75% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306.md" index 76691d06..c9b69f83 100644 --- "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306.md" @@ -1,7 +1,7 @@ ---- -title: KMP(上篇) + +## KMP(上篇) date: 2020-07-11 ---- + > 今天打算为大家讲解一下KMP。 @@ -33,29 +33,29 @@ KMP 其实已经念念叨叨挺长时间了,一直没写的原因是我觉得 上面说了,**KMP 是由暴力匹配改进的字符串匹配算法**。那什么是暴力匹配?假若我们的目标串和模式串如下图。(之前在 Sunday 匹配中讲过,**所有的字符串匹配算法第一步都是对齐**。不管是 暴力匹配,KMP,Sunday,BM 都是一样) -PNG +PNG 暴力匹配,就是目标串和模式串一个一个的对比。 -PNG +PNG 当A匹配成功,继续开始比对,直到我们遇见一个不匹配的字符。 -PNG +PNG 然后我们调整模式串,**从目标串的下一个字符开始匹配(注意,这里是核心)**。很遗憾,还是没有匹配成功(A和B) -PNG +PNG 继续这个步骤: -PNG +PNG 直到我们完成整个匹配过程: -PNG +PNG -假若我们目标串长度为m,模式串长度为n。模式串与目标串至少比较m次,又因其自身长度为n,所以理论的时间复杂度为**O(m\*n)。**但我们可以看到,**因为途中遇到不能匹配的字符时,就可以停止,并不需要完全对比(比如上图第2行)**。所以虽然理论时间复杂度为 **O(m\*n)** ,但其实大部分情况效率高很多。 +假若我们目标串长度为m,模式串长度为n。模式串与目标串至少比较m次,又因其自身长度为n,所以理论的时间复杂度为**O(m\*n)。** 但我们可以看到,**因为途中遇到不能匹配的字符时,就可以停止,并不需要完全对比(比如上图第2行)**。所以虽然理论时间复杂度为 **O(m\*n)** ,但其实大部分情况效率高很多。
@@ -85,71 +85,71 @@ func BFSearch(haystack string, needle string) int { 接下来我们开始说KMP。假如还是上面的这个串。最开始其实还是一样,我们依次对比A-A,B-B,C-C,直到遇见第一个无法匹配的字符A-E。 -PNG +PNG 现在开始不一样了,如果按照上面的暴力匹配。此时目标串我们应该回到 B 这个位置,模式串应直接回到头。但是按照 KMP 的思路,**在我们在第一次匹配后,因为 BC 匹配成功了,所以我们知道了 BC 不等于 A(注意这个逻辑关系)**: -PNG +PNG 那既然已知了 BC 不等于 A,我们就没必要用 A 和 BC 进行匹配了。那我们直接用 A 越过前面不需要匹配的 BC: -PNG +PNG 继续向下适配,我们发现在 D-C 处,匹配不上了。 -PNG +PNG 那我们因为前面的 B 又匹配成功了,那我们就知道 B 不等于 A,所以我们又可以直接略过前面的 B: -PNG +PNG 也就是说,我们可以直接从 D 处开始比较: -PNG +PNG 继续向下比较: -PNG +PNG 到现在为止,你已经掌握了 KMP 的前百分之五十:**在KMP中,如果模式串和目标串没有匹配成功,目标串不回溯**。现在我们需要换一个新串,来掌握接下来的百分之五十: -PNG +PNG 我们还是从头开始匹配,直到遇到第一个不匹配的字符: -PNG +PNG 到这里和上面的例子还是一样,**因为我们的 BC 匹配成功了,所以我们知道 BC 不等于 A,所以我们可以跳过 BC(注意这个逻辑)**: -PNG +PNG 所以我们从 A 处开始比较: -PNG +PNG 直到我们再次匹配失败: -PNG +PNG -我想到现在你已经知道怎么做了,来和我一起说。**因为前面的 B 匹配成功了,所以我们知道 B 不等于 A,所以我们可以跳过 B。**当然,跳过之后下一次的匹配直接失败了(A-D)。 +我想到现在你已经知道怎么做了,来和我一起说。**因为前面的 B 匹配成功了,所以我们知道 B 不等于 A,所以我们可以跳过 B。** 当然,跳过之后下一次的匹配直接失败了(A-D)。 -PNG +PNG 重点来了!!!然后我们继续匹配下一位。我们发现这一次,我们的匹配基本就要匹配成功了,但是卡在了最后一步的比较(D-B)。 -PNG +PNG 现在怎么办?假若我们把两个串修改一下(把里边的AB修改成XY),那么显而易见,你当然知道从哪里开始: -PNG +PNG 但是现在的问题是,在模式串中 AB 重复出现了,那我们是不是可以在下次比较的时候直接把 AB 给让出来? -PNG +PNG 所以我们把这个AB让出来,让出来之后,我们相当于在 模式串 上又跳过了 2个字符。(也就是说模式串下一次匹配从C开始) -PNG +PNG 其实到这里 KMP 就基本完事了。我们可以稍微总结下: @@ -178,11 +178,11 @@ func BFSearch(haystack string, needle string) int { 在我们上面的示例中,未成功的字符前的子串是 ABCEAB,它相同的最长的真前缀和真后缀就是 AB,最大长度就是2。所以我们就把模式串回溯到第2个位置处。 -PNG +PNG 我猜有人要说话了,“不是说模式串是回溯到真前缀和真后缀的最大长度位置处吗?那为什么上面的第一个例子,是回到了起始位置呢?” -PNG +PNG 其实,不是我们没有回溯模式串,而是此时的最大长度(指的是相同真前缀和真后缀的最大长度,后面都省略)其实就是 0。 @@ -190,7 +190,7 @@ func BFSearch(haystack string, needle string) int { 那我们怎么获取最大长度呢?就可以很自然的引入 next表 了。**不管你是把next表 理解成描述最大长度的东东,还是把 next表 理解成用来回溯模式串的东东,其实都是可以的!!!这也是为什么你在网上看到很多人文章对next表理解不一致的原因。** -PNG +PNG 我们拿上面标黄色那个解释一下,ABCEAB 不包含自己,那就是 ABCEA,ABCEA的 真前缀 和 真后缀 为: @@ -203,19 +203,19 @@ func BFSearch(haystack string, needle string) int { 所以最大长度就是 1。那这个 1 干啥用呢?我们可以在下次比的时候就直接把这个 A 让过去,直接从 B 开始比。 -PNG +PNG 这里注意,如果我们模式串稍微修改成下面这样,此时 F 的最大长度就是 0,并不是 2。初学者很容易把 AB 误认为是最长相同的真前缀和真后缀。 -PNG +PNG 到这里为止,其实 KMP 的思路已经快说完了。但是大神说话了,大神认为这个匹配表,还得再改改,不然会出问题。 -PNG +PNG -为什么会出问题呢,我们说了,对 KMP 而言,**如果没有匹配成功,****目标串是不回溯的**。那如果目标串不回溯,如果模式串一直都是 0,是不是意味着这个算法就没办法继续进行下去?所以大神把这个 next匹配表 改了一下,把 0 位置处的 next表 值改为了 -1。 +为什么会出问题呢,我们说了,对 KMP 而言,**如果没有匹配成功,** **目标串是不回溯的**。那如果目标串不回溯,如果模式串一直都是 0,是不是意味着这个算法就没办法继续进行下去?所以大神把这个 next匹配表 改了一下,把 0 位置处的 next表 值改为了 -1。 -PNG +PNG 那这个 -1 是干嘛用的呢?**其实只是一个代码技巧**!大家注意一下第 7 行代码,假若没有 j == -1,此时如果 next[j] 等于 0,是不是就进死循环了。而加上这一句,相当于说无论什么情况下,模式串的第一个字符都可以匹配(对 j 而言,此时 -1++,是不是还是0。但是此时模式串却向前走了。不就不会因为死循环而卡死了吗?**请大家自行脑补没有 j==-1 这行代码时,死循环卡死在11行的过程**) @@ -250,7 +250,7 @@ func KmpSearch(haystack string, needle string, next []int) int { 我们用下面这个字符串来讲一下:XXYXXYXXX。 -PNG +PNG 对于该字符串: @@ -267,65 +267,65 @@ func KmpSearch(haystack string, needle string, next []int) int { - 首先 index[0] 肯定是填写 0 - PNG + PNG - 然后填写 index[1]。**如果匹配上,我们把 i 和 j 都加一**。 - PNG + PNG - 然后填写 index[2],**如果没有匹配上,就把 j 回溯到 j 当前指向的前一个位置的 index 处。在这里,也就是 0 。** - PNG + PNG - 注意,是回溯完成后才开始填表,此时 index[2] 为 0 - PNG + PNG - 然后我们移动 i,发现下一位匹配成功。同时给 i 和 j 加一,并填表。 - PNG + PNG - 填完表后,我们发现下一位仍然匹配。继续移动 i 和 j。 - PNG + PNG
(填表)
- PNG + PNG
(仍然匹配,继续移动 i 和 j)
- 仍然匹配成功,继续重复上面的操作。 - PNG + PNG - PNG + PNG - PNG + PNG - 注意,**到这里开始匹配失败了**。上面说了,如果没有匹配成功,**把 j 回溯到 j 当前指向的前一个位置的 index 处**。在这里,也就是 2 。 - PNG + PNG - PNG + PNG
(j 的前一个位置的 index)
- PNG + PNG
(回溯完成后,我们发现仍然不匹配)
- 继续这个回溯的过程。。。(这一步是整个 next表 构建的核心) - PNG + PNG
(这个蓝色的小标是下次的回溯位置)
- PNG + PNG
(回溯后,我们发现匹配成功了)
- PNG + PNG
(然后我们可以填表了)
@@ -335,21 +335,21 @@ func KmpSearch(haystack string, needle string, next []int) int { 细心的读者,估计到这里发现一点问题。我们把填完后的表拿出来: -PNG +PNG 我们发现这个表和我们最上面说的不太一样,我们最上面说的 next表 的首位是 -1,并且要记录哪一个 index 位置的 next 值,是去看该元素前面所有子串的真前缀和真后缀的最大长度。这句话有点拗口,我们还是看到下面这个。 -PNG +PNG 比如 index 为 5 时,此时next的值是看 ABCEA 的最大长度(真后缀A,真前缀A,所以为1)。**但是在我们下面这个表中,我们发现我们是记录的当前索引位置处的最大长度**。其实我这里要说一下,下面这个表,其实我们一般称为**部分匹配表**,或者pmt。 -PNG +PNG 那这个表和我们的 next 表有什么关系吗,我们发现把这个表往后串一位,就得到了我们最终的 next 表。 -PNG +PNG -但是但是但是!!!并不是所有讲解 KMP 的地方都会给你提一提部分匹配表的概念,有的地方干脆就直接把这个 pmt 等同于 next 表使用。**这种属于错误讲解吗?其实不是的!**因为我上面也说了,next表 在最初始位置补 -1,或者甚至干脆把 pmt 的第一位补一个 -1 当作 next表,这都统统是可以的。**因为最关键的还是说你到时候怎么去使用!毕竟 next表 的定义也是人们给它赋予的!** +但是但是但是!!!并不是所有讲解 KMP 的地方都会给你提一提部分匹配表的概念,有的地方干脆就直接把这个 pmt 等同于 next 表使用。**这种属于错误讲解吗?其实不是的!** 因为我上面也说了,next表 在最初始位置补 -1,或者甚至干脆把 pmt 的第一位补一个 -1 当作 next表,这都统统是可以的。**因为最关键的还是说你到时候怎么去使用!毕竟 next表 的定义也是人们给它赋予的!**
diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/1.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/1.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/10.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/10.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/10.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/10.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/11.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/11.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/11.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/11.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/12.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/12.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/12.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/12.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/13.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/13.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/13.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/13.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/14.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/14.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/14.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/14.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/15.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/15.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/15.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/15.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/16.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/16.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/16.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/16.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/17.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/17.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/17.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/17.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/18.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/18.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/18.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/18.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/19.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/19.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/19.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/19.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/2.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/2.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/20.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/20.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/20.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/20.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/21.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/21.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/21.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/21.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/22.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/22.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/22.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/22.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/23.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/23.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/23.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/23.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/24.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/24.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/24.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/24.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/25.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/25.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/25.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/25.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/26.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/26.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/26.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/26.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/27.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/27.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/27.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/27.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/28.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/28.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/28.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/28.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/29.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/29.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/29.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/29.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/3.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/3.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/30.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/30.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/30.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/30.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/31.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/31.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/31.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/31.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/32.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/32.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/32.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/32.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/33.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/33.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/33.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/33.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/34.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/34.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/34.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/34.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/35.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/35.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/35.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/35.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/36.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/36.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/36.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/36.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/37.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/37.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/37.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/37.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/38.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/38.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/38.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/38.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/39.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/39.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/39.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/39.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/4.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/4.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/40.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/40.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/40.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/40.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/41.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/41.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/41.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/41.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/42.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/42.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/42.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/42.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/43.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/43.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/43.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/43.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/44.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/44.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/44.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/44.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/45.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/45.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/45.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/45.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/46.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/46.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/46.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/46.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/47.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/47.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/47.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/47.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/48.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/48.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/48.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/48.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/49.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/49.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/49.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/49.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/5.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/5.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/50.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/50.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/50.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/50.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/51.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/51.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/51.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/51.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/6.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/6.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/7.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/7.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/8.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/8.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/9.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306/9.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307.md" similarity index 89% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307.md" index 7f073808..48b3e8a0 100644 --- "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307.md" @@ -1,7 +1,7 @@ ---- -title: 旋转字符串(796) + +## 旋转字符串(796) date: 2020-07-12 ---- + > 今天是小浩算法 “365刷题计划” 第103天。分享的这道题虽然很简单,但是在笔试或者面试当中,出现的频率却非常高。 @@ -31,13 +31,13 @@ date: 2020-07-12
-**注意:**A 和 B 长度不超过 100。 +**注意:** A 和 B 长度不超过 100。
题意还是很容易理解的,说白了就是每次把前面的元素放到最后面: -PNG +PNG ## 02、题解分析 @@ -47,7 +47,7 @@ date: 2020-07-12 这道题目最容易想到的解法,其实就是跟着题意来。每次将旋转后的A和目标串对比: -PNG +PNG ```java //java @@ -72,11 +72,11 @@ class Solution { 但是代码其实并不优雅,我们继续观察一下这个字符串: -PNG +PNG 无论它怎样旋转,最终的 A + A包含了所有可以通过旋转操作从 A 得到的字符串: -PNG +PNG 那我们是不是只需要判断 B 是否为 A + A 的子串就可以了: @@ -91,11 +91,11 @@ class Solution {     执行结果: -PNG +PNG 一般面试写的话,基本就是到这个程度。但是大概率面试官这时还会问你一个问题:如何继续进行优化? -PNG +PNG 注意我们上面问题,其实已经转化为了:**判断 B 是否为 A + A 的子串**。那我们就可以引申答出 KMP,SUNDAY,BF 等字符串匹配策略。(当然,这里其实 SUNDAY 并不是特别适合) @@ -145,7 +145,7 @@ class Solution { > KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。 -PNG +PNG 大家有兴趣可以看我之前写的一篇KMP教程: diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/1.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/1.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/2.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/2.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/3.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/3.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/4.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/4.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/5.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/5.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/6.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/6.gif" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/6.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/6.gif" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/7.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/7.gif" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/7.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307/7.gif" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308.md" similarity index 92% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308.md" index 6892bff2..34944b50 100644 --- "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308.md" @@ -1,7 +1,7 @@ ---- -title: 最后一个单词的长度(58) + +## 最后一个单词的长度(58) date: 2020-07-12 ---- + > 今天是小浩算法 “365刷题计划” 第107天。满血,复活! @@ -13,7 +13,7 @@ date: 2020-07-12 暂定的目标是一周 3-5 篇题解。希望大家支持!一起进步!奥利给! -PNG +PNG ## 01、题目示例 @@ -32,7 +32,7 @@ date: 2020-07-12 输出: 5 ``` -**说明:**一个单词是指仅由字母组成、不包含任何空格字符的 **最大子字符串**。 +**说明:** 一个单词是指仅由字母组成、不包含任何空格字符的 **最大子字符串**。
@@ -52,7 +52,7 @@ date: 2020-07-12 但这里可以取一个巧,我们可以通过一个 count 来记数,**从第一个不为空格的数开始记起**。换句话说,如果末尾处为空格,此时 count 值为 0,可以直接略过。 -PNG +PNG 实现代码如下: @@ -126,7 +126,7 @@ public String trim() {   可以看到,Java 中的 trim 函数除了去除空格之外,还去除了所有在 ASCII 码表中排行小于等于空格的字符。 -PNG +PNG 空格在 ASCII 码表中排行是 32位,可以看到 tab,换行,回车等都在 trim 的控制范围内。 diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/1.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/1.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/2.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/2.jpg" diff --git "a/website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/3.jpg" similarity index 100% rename from "website/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/6.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308/3.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401.md" similarity index 92% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401.md" index 3ff262ea..ed215431 100644 --- "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401.md" @@ -1,6 +1,6 @@ ---- -title: 最大深度与DFS(104) ---- + +## 最大深度与DFS(104) + > 在计算机科学中,二叉树是**每个结点最多有两个子树**的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于**实现二叉查找树**和**二叉堆**。树比链表稍微复杂,因为链表是线性数据结构,而树不是。树的问题很多都可以由**广度优先搜索**或**深度优先搜索解决**。 > @@ -30,7 +30,7 @@ title: 最大深度与DFS(104) ## 02、递归求解 -我们知道,**每个节点的深度与它左右子树的深度有关,且等于其左右子树最大深度值加上 1 **。即: +我们知道,**每个节点的深度与它左右子树的深度有关,且等于其左右子树最大深度值加上 1 。** 即: >
maxDepth(root) = max(maxDepth(root.left),
> @@ -42,15 +42,15 @@ title: 最大深度与DFS(104) <1>我们要对根节点的最大深度求解,就要对其左右子树的深度进行求解 -img +img <2>我们看出。以4为根节点的子树没有左右节点,其深度为 1 。而以 20 为根节点的子树的深度,同样取决于它的左右子树深度。 -img +img <3>对于15和7的子树,我们可以一眼看出其深度为 1 。 -img +img <4>由此我们可以得到根节点的最大深度为: @@ -89,7 +89,7 @@ func max(a int, b int) int { 其实我们上面用的递归方式,本质上是使用了DFS的思想。先介绍一下DFS:深度优先搜索算法(Depth First Search),对于二叉树而言,它沿着**树的深度遍历树的节点,尽可能深的搜索树的分支**,**这一过程一直进行到已发现从源节点可达的所有节点为止**。 -img +img 如上图二叉树,它的访问顺序为: @@ -136,7 +136,7 @@ private List traversal(TreeNode root) {     List re 如果不理解代码,请看下图: -img +img 1:首先将a压入栈 diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/1.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/1.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/2.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/2.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/3.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/3.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/4.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/4.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/5.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401/5.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402.md" similarity index 92% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402.md" index e1fb9834..a3438be0 100644 --- "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402.md" @@ -1,6 +1,6 @@ ---- -title: 层次遍历与BFS(102) ---- + +## 层次遍历与BFS(102) + > 在上一节中,我们通过例题学习了二叉树的DFS(深度优先搜索),其实就是**沿着一个方向一直向下遍历**。那我们可不可以**按照高度一层一层的访问树中的数据**呢?当然可以,就是本节中我们要讲的BFS(宽度优先搜索),同时也被称为广度优先搜索。 > @@ -31,7 +31,7 @@ title: 层次遍历与BFS(102) BFS,广度/宽度优先。其实就是**从上到下,先把每一层遍历完之后再遍历一下一层**。假如我们的树如下: -img +img 按照BFS,访问顺序如下: @@ -47,9 +47,9 @@ BFS,广度/宽度优先。其实就是**从上到下,先把每一层遍历 假设给定二叉树为[3,9,20,null,null,15,7],图解如下: -img +img -img +img 根据以上分析,代码如下: @@ -81,7 +81,7 @@ func dfs(root *TreeNode, level int, res [][]int) [][]int { 具体步骤如下图: -img +img 根据以上分析,代码如下: diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/1.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/1.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/2.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/2.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/3.jpeg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/3.jpeg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/3.jpeg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/3.jpeg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/4.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402/4.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403.md" similarity index 85% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403.md" index c3356f5a..b1473d95 100644 --- "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403.md" @@ -1,6 +1,6 @@ ---- -title: BST与其验证(98) ---- + +## BST与其验证(98) + > 在上一节中,我们分别学习了DFS与BFS。在本节中,我们将继续学习一种特殊的二叉树结构 —— **二叉搜索树(BST)**。 ## 01、二叉搜索树 @@ -9,17 +9,17 @@ title: BST与其验证(98)
-这里强调一下子树的概念:设T是有根树,a是T中的一个顶点,由**a以及a的所有后裔(后代)**导出的子图称为有向树T的子树。具体来说,**子树就是树的其中一个节点以及其下面的所有的节点**所构成的树。 +这里强调一下子树的概念:设T是有根树,a是T中的一个顶点,由**a以及a的所有后裔(后代)** 导出的子图称为有向树T的子树。具体来说,**子树就是树的其中一个节点以及其下面的所有的节点**所构成的树。
比如下面这就是一颗二叉搜索树: -img +img 下面这两个都不是: -img +img <1>图中4节点位置的数值应该大于根节点 @@ -90,9 +90,9 @@ func isBST(root *TreeNode,min, max int) bool{ 运行结果: -img +img 如果觉得上文中的递归不太容易理解,可以通过下图理解: -img +img diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/1.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/1.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/2.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/2.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/3.png" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/3.png" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/3.png" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/3.png" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/4.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403/4.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404.md" similarity index 95% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404.md" index 5a06b8b4..f4f301db 100644 --- "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404.md" @@ -1,6 +1,6 @@ ---- -title: BST 的查找(700) ---- + +## BST 的查找(700) + > 在上一节中,我们学习了**二叉搜索树**。那我们如何**在二叉搜索树中查找一个元素**呢?和普通的二叉树又有何不同?我们将在本节内容中进行学习! > @@ -55,7 +55,7 @@ title: BST 的查找(700) 如下图就是一棵典型的BST: -img +img ## 03、图解分析 @@ -67,7 +67,7 @@ title: BST 的查找(700) - 如果val大于当前结点的值,转向其右子树继续搜索; - 如果已找到,则返回当前结点。 -img +img >
很简单,不是吗?
diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404/1.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404/1.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404/2.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404/2.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405.md" similarity index 90% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405.md" index 37dd76b3..da9cbbff 100644 --- "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405.md" @@ -1,6 +1,6 @@ ---- -title: BST 的删除(450) ---- + +## BST 的删除(450) + > 在两节中,我们了解了BST(二叉搜索树)的概念,并且知道了如何在BST中查找一个元素。那我们又如何在BST中去删除一个元素呢?我们将通过本节的例题进行学习! > @@ -71,7 +71,7 @@ key = 3 如下图就是一棵典型的BST: -img +img ## 03、图解分析 @@ -81,19 +81,19 @@ key = 3 1、待删除的节点左子树为空,让待删除节点的右子树替代自己。 -img +img 2、待删除的节点右子树为空,让待删除节点的左子树替代自己。 -img +img 3、如果待删除的节点的左右子树都不为空。我们需要找到**比当前节点小的最大节点(前驱)**,来替换自己 -img +img 或者**比当前节点大的最小节点(后继)**,来替换自己。 -img +img 分析完毕,我们一起看代码怎么实现吧。 @@ -147,5 +147,5 @@ func deleteMinNode( root *TreeNode ) *TreeNode { 执行结果: -img +img diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/1.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/1.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/2.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/2.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/3.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/3.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/4.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/4.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/5.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/5.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/6.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405/6.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406.md" similarity index 91% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406.md" index 4f798f40..fa593623 100644 --- "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406.md" @@ -1,6 +1,6 @@ ---- -title: 平衡二叉树(110) ---- + +## 平衡二叉树(110) + > 在之前的系列中,我们已经学习了**二叉树的深度**以及**DFS**,如果不会可以先查看之前的文章。今天我们将对其进行应用,直接看题目。 ## 01、题目分析 @@ -51,7 +51,7 @@ title: 平衡二叉树(110) 我们先复习一下之前对于树高度的求解: -img +img 这里唯一要注意的是,当我们判定**其中任意一个节点如果不满足平衡二叉树时,那说明整棵树已经不是一颗平衡二叉树**,我们可以**对其进行阻断,不需要继续递归下去**。 @@ -59,7 +59,7 @@ title: 平衡二叉树(110) 另外,需要注意的是,下面这棵并不是平衡二叉树: -img +img ## 03、代码分析 @@ -105,5 +105,5 @@ func abs(a int) int { 执行结果: -img +img diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/1.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/1.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/2.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/2.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/3.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406/3.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407.md" similarity index 85% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407.md" index 170fa803..d5c4edf3 100644 --- "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407.md" @@ -1,7 +1,7 @@ ---- -title: 完全二叉树(222) + +## 完全二叉树(222) date: 2020-06-11 ---- + > 在上一篇中,我们学习了解了**平衡二叉树**,并且利用DFS进行了验证。在本节中,我们将继续学习**完全二叉树**的相关内容。首先了解一下什么是完全二叉树。 @@ -11,13 +11,13 @@ date: 2020-06-11
-如果**二叉树中除了叶子结点,每个结点的度都为 2**,则此二叉树称为**满二叉树**。(**二叉树的度**代表**某个结点的孩子或者说直接后继的个数。**对于二叉树而言,1度是只有一个孩子或者说单子树,2度是有两个孩子或者说左右子树都有。) +如果**二叉树中除了叶子结点,每个结点的度都为 2**,则此二叉树称为**满二叉树**。(**二叉树的度**代表**某个结点的孩子或者说直接后继的个数。** 对于二叉树而言,1度是只有一个孩子或者说单子树,2度是有两个孩子或者说左右子树都有。)
比如下面这颗: -img +img 那什么又是完全二叉树呢: @@ -29,11 +29,11 @@ date: 2020-06-11 比如下面这颗: -img +img 而这颗就不是: -img +img 熟悉了概念,我们还是一起来看题目吧。 @@ -77,7 +77,7 @@ func countNodes(root *TreeNode) int { 执行结果: -img +img 但是很明显,出题者肯定不是要这种答案。因为这种答案和完全二叉树一毛钱关系都没有。所以我们继续思考。 @@ -89,19 +89,19 @@ func countNodes(root *TreeNode) int { 假如我们有树如下: -img +img 我们看到根节点的左右子树高度都为3,那么说明左子树是一颗满二叉树。因为节点已经填充到右子树了,左子树必定已经填满了。所以左子树的节点总数我们可以直接得到,是2^left - 1,加上当前这个root节点,则正好是2^3,即 8。然后只需要再对右子树进行递归统计即可。 -img +img 那假如我们的树是这样: -img +img 我们看到左子树高度为3,右子树高度为2。说明此时最后一层不满,但倒数第二层已经满了,可以直接得到右子树的节点个数。同理,右子树节点+root节点,总数为2^right,即2^2。再对左子树进行递归查找。 -img +img 根据分析,得出代码: @@ -133,4 +133,4 @@ class Solution { 运行结果: -img \ No newline at end of file +img \ No newline at end of file diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/1.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/1.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/2.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/2.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/3.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/3.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/4.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/4.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/5.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/5.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/6.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/6.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/7.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/7.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/8.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/8.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/9.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/9.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/9.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407/9.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408.md" similarity index 89% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408.md" index c815c0ef..cc7d47b0 100644 --- "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408.md" @@ -1,7 +1,7 @@ ---- -title: 二叉树的剪枝(814) + +## 二叉树的剪枝(814) date: 2020-06-11 ---- + > 在之前的系列中。我们学习了DFS、BFS,也熟悉了平衡二叉树,满二叉树,完全二叉树,BST(二叉搜索树)等概念。在本节中,我们将学习一种二叉树中常用的操作 —**剪枝**。这里额外说一点,就本人而言,对这个操作以及其衍化形式的使用会比较频繁。因为我是做规则引擎的,在规则引擎中,我们会有一个概念叫做**决策树**,那**如果一颗决策树完全生长,就会带来比较大的过拟合问题**。因为完全生长的决策树,每个节点只会包含一个样本。所以我们就**需要对决策树进行剪枝操作,来提升整个决策模型的泛化能力**(ML概念)... 听不懂也没关系,简单点讲,就是我觉得这个很重要,或者每道算法题都很重要。如果你在工作中没有用到,不是说明算法不重要,而可能是你还不够重要。 @@ -27,7 +27,7 @@ date: 2020-06-11 输出: [1,null,0,null,1] ``` -img +img **解释: ** @@ -43,7 +43,7 @@ date: 2020-06-11 输出: [1,null,1,null,1] ``` -img +img **示例3:** @@ -52,7 +52,7 @@ date: 2020-06-11 输出: [1,1,0,1,1,null,1] ``` -img +img **说明:** @@ -67,15 +67,15 @@ date: 2020-06-11 就是下面这样: -img +img 剪枝之后是这样: -img +img 剪什么大家应该都能理解。那关键是怎么剪?过程也很简单,**在递归的过程中,如果当前结点的左右节点皆为空,且当前结点为0,我们就将当前节点剪掉即可。** -img +img 根据分析,很自然得出代码: @@ -99,7 +99,7 @@ func deal(node *TreeNode) *TreeNode { 运行结果: -img +img
diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/1.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/1.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/2.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/2.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/3.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/3.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/4.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/4.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/5.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/5.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/6.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/6.jpg" diff --git "a/website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/7.jpg" similarity index 100% rename from "website/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/7.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408/7.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501.md" similarity index 94% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501.md" index dcc89ee2..ed5702eb 100644 --- "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501.md" @@ -1,7 +1,7 @@ ---- -title: 滑动窗口最大值(239) + +## 滑动窗口最大值(239) date: 2020-06-12 ---- + date: 2020-06-12 @@ -50,7 +50,7 @@ date: 2020-06-12 假设 nums = [1,3,-1,-3,5,3,6,7],和 k = 3,窗口数为6 -img +img 根据分析,直接完成代码: @@ -76,7 +76,7 @@ class Solution { 运行结果: -img +img
@@ -90,7 +90,7 @@ class Solution { 首先,我们了解一下,什么是双端队列:是一种具有**队列和栈的性质的数据结构**。双端队列中的元素可以从两端弹出或者插入。 -img +img 我们可以利用双端队列来实现一个窗口,目的是让该窗口可以做到**张弛有度**(汉语博大精深,也就是长度动态变化。其实用游标或者其他解法的目的都是一样的,就是去维护一个可变长的窗口) @@ -102,7 +102,7 @@ class Solution { 假设 nums = [1,3,-1,-3,5,3,6,7],和 k = 3 -img +img > (小浩os:我觉得自己画的这个图对于双端队列的解法还是介绍的比较清晰的,大家好好看一下哦,这样我的努力也就没有白费呢。) @@ -140,7 +140,7 @@ func maxSlidingWindow(nums []int, k int) []int { 执行结果: -img +img
diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/1.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/1.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/2.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/2.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/3.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/3.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/4.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/4.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/5.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501/5.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502.md" similarity index 94% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502.md" index 3cfe936c..ce1bc4ef 100644 --- "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502.md" @@ -1,7 +1,7 @@ ---- -title: 无重复字符的最长子串(3) + +## 无重复字符的最长子串(3) date: 2020-06-12 ---- + @@ -69,15 +69,15 @@ Now,我们通过一道题目来进行具体学习吧 直接分析题目,假设我们的输入为“abcabcbb”,我们只需要维护一个窗口在输入字符串中进行移动。如下图: -img +img 当下一个元素在窗口没有出现过时,我们扩大窗口。 -img +img 当下一个元素在窗口中出现过时,我们缩小窗口,将**出现过的元素以及其左边的元素**统统移出: -img +img 在整个过程中,我们**记录下窗口出现过的最大值**即可。而我们唯一要做的,只需要**尽可能扩大窗口**。 @@ -113,7 +113,7 @@ public class Solution { 执行结果: -img +img 通过观察,我们能看出来。如果是最坏情况的话,我们每一个字符都可能会访问两次,left一次,right一次,时间复杂度达到了O(2N),这是不可饶恕的。不理解的话看下图: @@ -121,7 +121,7 @@ public class Solution { 假设我们的字符串为“abcdc”,对于abc我们都访问了2次。 -img +img 那如何来进一步优化呢? @@ -129,7 +129,7 @@ public class Solution { 其实我们可以定义**字符到索引的映射**,而不是简单通过一个集合来判断字符是否存在。这样的话,当我们**找到重复的字符时,我们可以立即跳过该窗口**,而不需要对之前的元素进行再次访问。 -img +img 优化代码如下: @@ -152,7 +152,7 @@ public class Solution { 执行结果: -img +img 修改之后,我们发现虽然时间复杂度有了一定提高,但是还是比较慢!如何更进一步的优化呢?我们可以使用一个256位的数组来替代hashmap,以进行优化。(因为ASCII码表里的**字符**总共有128个。ASCII码的长度是一个字节,8位,理论上可以表示256个字符,但是许多时候只谈128个。具体原因可以下去自行学习~) @@ -180,7 +180,7 @@ class Solution { 执行结果: -img +img 我们发现优化后时间复杂度有了极大的改善!这里简单说一下原因,对于数组和hashmap访问时,两个谁快谁慢不是一定的,需要思考hashmap的底层实现,以及数据量大小。但是在这里,因为已知了待访问数据的下标,可以**直接寻址**,所以极大的缩短了查询时间。 diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/1.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/1.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/2.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/2.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/3.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/3.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/4.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/4.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/5.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/5.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/6.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/6.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/6.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/6.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/7.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/7.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/7.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/7.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/8.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/8.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/8.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502/8.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503.md" similarity index 94% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503.md" index 7623461f..e0791d90 100644 --- "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503.md" @@ -1,7 +1,7 @@ ---- -title: 字母异位词(438) + +## 字母异位词(438) date: 2020-06-12 ---- + > 之前的两节讲解了**滑动窗口类**问题的**模式解法**,相信大家对该类题型已不陌生**。**今天将继续完成一道题目,来进行巩固学习。 @@ -66,7 +66,7 @@ date: 2020-06-12 我们通过双指针维护一个窗口,由于我们只需要判断字母异位词,我们可以将窗口初始化大小和目标串保持一致。(当然,你也可以初始化窗口为1,逐步扩大) -img +img 而**判断字母异位词**,我们需要**保证窗口中的字母出现次数与目标串中的字母出现次数一致**。这里因为字母只有26个,直接使用数组来替代map进行存储(和上一讲中的ASCII使用256数组存储思想一致)。 @@ -74,13 +74,13 @@ date: 2020-06-12 pArr为目标串数组,sArr为窗口数组。我们发现初始化数组,本身就满足,记录下来。(**这里图示用map模拟数组,便于理解**) -img +img 然后我们通过移动窗口,来更新窗口数组,进而和目标数组匹配,匹配成功进行记录。每一次窗口移动,**左指针前移**,原来**左指针位置处的数值减1,表示字母移出**;**同时右指针前移**,**右指针位置处的数值加1,表示字母移入**。详细过程如下: -img +img -img +img 最终,当右指针到达边界,意味着匹配完成。 @@ -144,7 +144,7 @@ class Solution { 执行结果: -img +img PS:本题属于模式解法,非最优解!这里留下思考内容,如何在本解法的基础上进行优化,近一步降低时间复杂度? diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/1.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/1.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/2.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/2.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/3.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/3.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/4.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/4.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/5.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503/5.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504.md" similarity index 93% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504.md" index e4e86181..77e6800f 100644 --- "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504.md" @@ -1,7 +1,7 @@ ---- -title: 和为s的连续正数序列 + +## 和为s的连续正数序列 date: 2020-07-08 ---- + > 昨天写了一篇感悟,没想到那么受欢迎。几百人转发,好几千人阅读,虚荣心得到了极大的满足。今天继续为大家分享一道经典面试题目。 @@ -45,23 +45,23 @@ date: 2020-07-08 假若我们输入的 target 为 9,大脑中应该有下面这么个玩意: -PNG +PNG 然后我们通过左右指针来维护一个滑动窗口,同时计算窗口内的值是否是目标值: -PNG +PNG 如果窗口的值过小,我们就移动右边界。 -PNG +PNG 如果窗口的值过大,我们就移动左边界。 -PNG +PNG 剩下的就是反复上面的操作就可以了。到这里分析过程看似结束了。但是我们可以观察出一丢丢规律,用来优化我们的算法。**对于任意一个正整数,总是小于它的中值与中值+1的和**。为了让大家直观,用下图举例: -PNG +PNG 比如这里的100,就一定小于50+51,换成其他数也一样。换句话说,**一旦窗口左边界超过中值,窗口内的和一定会大于 target**。 diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/1.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/1.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/2.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/2.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/3.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/3.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/4.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/4.jpg" diff --git "a/website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/5.jpg" similarity index 100% rename from "website/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/8.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504/5.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601.md" similarity index 97% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601.md" index 733abc6b..82d47f43 100644 --- "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601.md" @@ -1,7 +1,7 @@ ---- -title: 囚徒困境 + +## 囚徒困境 date: 2020-06-14 ---- + > 本系列将为大家带来一整套的**博弈论问题**。因为在面试的过程中,除了常规的算法题目,我们经常也会被问到一些趣味题型来考察思维,而这类问题中,很多都有博弈论的影子存在。这些公司里以FLAG(Facebook, LinkedIn, Amazon, Google)为典型,特别喜欢考察本类题型。同时,本系列将不一定都是算法问题,不是IT行业的小伙伴也可以进行学习,来提高分析问题的能力~ @@ -49,7 +49,7 @@ date: 2020-06-14 所以犯人甲的结论是,**唯一理性的选择就是背叛同伙**,把一切都告诉警方!这样的话,如果他的同伙笨得只会保持沉默,那么他就会是那个离开的人。而如果他的同伙也根据这个逻辑向警方交代了,那么也没有关系,起码他不必服最重的刑! -img +img ## 03、囚徒困境与纳什均衡 diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601/1.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601/1.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602.md" similarity index 91% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602.md" index 0bb65f6b..1df76dc0 100644 --- "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602.md" @@ -1,7 +1,7 @@ ---- -title: 辛普森悖论 + +## 辛普森悖论 date: 2020-06-14 ---- + > 本系列主要为大家带来一整套的**博弈论问题(广义)**。因为在面试的过程中,除了常规的算法题目,我们经常也会被问到一些趣味题型来考察思维,而这类问题中,很多都有博弈论的影子存在。这些公司里以FLAG(Facebook, LinkedIn, Amazon, Google)为典型,特别喜欢考察本类题型。同时,本系列将不一定都是算法问题,不是IT行业的小伙伴也可以进行学习,来提高分析问题的能力~ @@ -11,7 +11,7 @@ date: 2020-06-14 | ------------------------------------------------------------ | | 羊羊医院里统计了两种胆结石治疗方案的治愈率。在统计过程中,医生将病人分为大胆结石和小胆结石两组。统计结果如下: | -img +img - 对于小胆结石而言,手术A的治愈率(93%)高于 手术B(87%) @@ -25,13 +25,13 @@ date: 2020-06-14 但是真的是这样吗?当然不是,我们根据样本统计出大小胆结石总计的治愈率,发现**手术B(治愈率83%)其实是要高于手术A(治愈率78%)**。 -img +img 为什么会出现这样的结果?这就是著名的**辛普森悖论。** ## 02、直觉的缺陷 -得到了结论,我们来思考背后的东西。在我们的直觉里有这样一个逻辑:**如果一个事物的各部分都分别大于另一个事物的各部分,那么这个事物大于另一个事物。**比如:我们的直觉告诉我们如果手术A在两组病人中都更好,那么在所有病人中也应该更好。 +得到了结论,我们来思考背后的东西。在我们的直觉里有这样一个逻辑:**如果一个事物的各部分都分别大于另一个事物的各部分,那么这个事物大于另一个事物。** 比如:我们的直觉告诉我们如果手术A在两组病人中都更好,那么在所有病人中也应该更好。
diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602/1.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602/1.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602/2.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602/2.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/603.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/603.md" similarity index 99% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/603.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/603.md" index 86d6007d..fc12bcf0 100644 --- "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/603.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/603.md" @@ -1,7 +1,7 @@ ---- -title: 红眼睛和蓝眼睛 + +## 红眼睛和蓝眼睛 date: 2020-06-14 ---- + > 在面试的过程中,除了常规的算法题目,我们经常也会被问到一些趣味题型来考察思维,尤其以 FLAG(Facebook, LinkedIn, Amazon, Google)等公司为典型。而这类问题的背后,很多都有博弈论的影子。所以在本系列,我将为大家分享一整套需要掌握的**博弈论**相关知识,希望大家可以喜欢。 > diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/604.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/604.md" similarity index 96% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/604.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/604.md" index d694d2ae..3f0a2405 100644 --- "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/604.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/604.md" @@ -1,7 +1,7 @@ ---- -title: 海盗分金币 + +## 海盗分金币 date: 2020-06-14 ---- + >在面试的过程中,除了常规的算法题目,我们经常也会被问到一些趣味题型来考察思维,尤其以 FLAG(Facebook, LinkedIn, Amazon, Google)等公司为典型。而这类问题的背后,很多都有博弈论的影子。所以在本系列,我将为大家分享一整套需要掌握的**博弈论**相关知识,希望大家可以喜欢。 > @@ -39,7 +39,7 @@ date: 2020-06-14
-现在又继续加入了新的海盗!原来的1,2,3号,成为了现在的2,3,4号。这时候新的一号海盗洞悉了奥秘,知道了**如果自己死了,二号就可以获取全部的金币,**所以提出给三号和四号一人一个金币,一起投死2号。而与此同时,现在的3号和4号获取的要比三个人时多(三个人时自己获取不了任何金币),所以他们会同意这个方案! +现在又继续加入了新的海盗!原来的1,2,3号,成为了现在的2,3,4号。这时候新的一号海盗洞悉了奥秘,知道了**如果自己死了,二号就可以获取全部的金币,** 所以提出给三号和四号一人一个金币,一起投死2号。而与此同时,现在的3号和4号获取的要比三个人时多(三个人时自己获取不了任何金币),所以他们会同意这个方案!
diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605.md" similarity index 98% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605.md" index dfa01fda..b263b47f 100644 --- "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605.md" @@ -1,7 +1,7 @@ ---- -title: 智猪博弈 + +## 智猪博弈 date: 2020-07-01 ---- + > 今天给大家讲解一个博弈论中很有趣的问题,智猪博弈。 @@ -35,7 +35,7 @@ date: 2020-07-01 用博弈论中的报酬矩阵,将图画出来,可能更加有助于大家思考: -PNG +PNG - 如果小猪和大猪同时行动的话,则它们同时到达食槽,分别得到1个单位和5个单位的纯收益(付出4个单位的成本) - 如果大猪行动,小猪等待,小猪可得到4个单位的纯收益,大猪得到的6个单位,付出2个单位的成本,实得4个单位; diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605/1.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605/1.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606.md" similarity index 85% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606.md" index bf8b3094..46d92509 100644 --- "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606.md" @@ -1,7 +1,7 @@ ---- -title: 生男生女的问题 + +## 生男生女的问题 date: 2020-07-05 ---- + > 长时间的二分估计大家也看的头晕眼花了,所以今天为大家分享一个非常有趣的概率题目。 @@ -27,7 +27,7 @@ date: 2020-07-05 其实这个问题答案是比较反直觉的:**没有变化**。原因是因为:**生男生女的概率永远都是百分之50**。不相信的话,你可以尝试去当一下妇产科大夫,若干年后一定可以得出这个结论。 -PNG +PNG 或者我们也可以换一种思路:我们不妨假设把一大批新婚夫妇关在一个超大的屋子里,逼着他们进行一轮一轮的生孩子游戏。第一轮里,有一半的夫妇生了男娃,退出了游戏;另一半夫妇得到的是女娃,进入第二轮。在第二轮里面,又有一半由于生出男娃而退出,自然,另一半生出女娃的夫妇进入第三轮……注意到,在每一轮里,新生男娃和新生女娃都是一样多的,因此把所有轮数合在一起看,男娃的总数和女娃的总数也一定是相同的。 @@ -41,13 +41,13 @@ date: 2020-07-05
-2、**身体酸碱度。**酸性体质容易疲惫,让人感觉到累。所以很多养生专家建议让身体处于碱性环境。前面这个,我觉得还是没问题的。但是养生专家同时也说:碱性环境下生孩子的几率会大一点。(这个我就搞不懂了??) +2、**身体酸碱度。** 酸性体质容易疲惫,让人感觉到累。所以很多养生专家建议让身体处于碱性环境。前面这个,我觉得还是没问题的。但是养生专家同时也说:碱性环境下生孩子的几率会大一点。(这个我就搞不懂了??) -PNG +PNG 3、先有人后,才做数据统计,其他自己悟。如果悟不出来,可以看看家后面的那口井,只能说细思极恐。(并且我个人认为这是主要原因。。) -PNG +PNG 4、突然写到这里就不想写了,看到上面结论有点难受。。。就这样吧。。 diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/1.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/1.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/2.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/2.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/3.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606/3.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607.md" similarity index 92% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607.md" index c47a2333..9798b62e 100644 --- "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607.md" @@ -1,7 +1,7 @@ ---- -title: 硬币问题 + +## 硬币问题 date: 2020-07-06 ---- + > 今天继续为大家分享一道有趣的概率类问题(是有小伙伴咨询我的,在面试时会被问到哈~) @@ -23,13 +23,13 @@ date: 2020-07-06 连续投掷三次,能产生八种结果,“正反反”和“反反正”两种可能性各占 1/8,序列也完全对称,获胜概率怎么说都应该是一样的。 -PNG +PNG 所以对B而言,不应该有任何理由来怀疑该玩法的公平性。但是,答案真的是这样吗?事实,该游戏并不公平。虽然“正反反”和“反反正”在频率上出现的一样,但是其之间却有一个竞争关系:**一旦抛硬币产生其中一种序列,游戏即结束**。所以不论何时,只要抛出一个正面,也就意味着B必输无疑。换句话说,在整个游戏的前两次抛掷中,只要出现“正正”,“正反”,“反正”其中任一,A则一定会取得胜利。A和B的概率比达到3:1,优势不言而喻。 -PNG +PNG -PNG +PNG ## 03、加强版 @@ -39,7 +39,7 @@ date: 2020-07-06 一副扑克牌不算大小王刚好是52张,随意洗牌。如果出现连续三张牌,花色依次是红黑黑,那么玩家A加一分;同时把翻开了的牌都丢掉,继续一张张翻没翻开的牌;类似地,一 旦出现连续三张牌恰好是黑黑红,则玩家B得一分,弃掉已翻开的牌后继续。结果会如何呢?(大家不妨写一个程序来进行验证) -PNG +PNG 上面的问题请认真思考(毕竟硬币题目只是简化版本,下面这种才是面试时更容易被问到的),评论区留下你们的想法,写的好的顶你到天花板。 diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/1.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/1.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/2.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/2.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/3.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/3.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/4.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607/4.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608.md" similarity index 96% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608.md" index 3bf1debc..ea3fa806 100644 --- "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608.md" @@ -1,7 +1,7 @@ ---- -title: 画圈圈的问题 + +## 画圈圈的问题 date: 2020-07-06 ---- + > 这次小浩又出去面试了,面试官说想和我画圈圈(原题为狼厂校招面试题),想起来还有点羞羞的。 @@ -19,11 +19,11 @@ date: 2020-07-06 作为聪明机智的小浩(没见过这么夸自己的),最后当然是小浩获胜。获胜的方法:**小浩强烈要求先手进行游戏,并且在游戏开始时,先把正中间的两个小圆圈涂黑,于是左右两边各剩下了49个圆圈**。像是下面这样: -PNG +PNG 然后小浩开始模仿(逼死)面试官,面试官在左边涂掉哪些圆圈,小浩就对称地在右边涂掉哪些圆圈;面试官在右边涂掉哪些圆圈, 小浩就对称地在左边涂掉哪些圆圈。因此,只要面试官有走的,小浩就一定有走的,最终保证能获胜。 -PNG +PNG ## 03、改编版 diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608/1.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608/1.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608/2.gif" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608/2.gif" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608/2.gif" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608/2.gif" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609.md" similarity index 88% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609.md" index eafc0671..4ff4b39f 100644 --- "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609.md" @@ -1,7 +1,7 @@ ---- -title: 巧克力问题 + +## 巧克力问题 date: 2020-07-06 ---- + > 这次小浩又出去面试,虽然面试官没让他修电暖气,但却给了他一块巧克力。。。(题目由读者在美团面试后提供) @@ -23,19 +23,19 @@ date: 2020-07-06 作为聪明机智的小浩(没见过这么夸自己的),最后当然是小浩获胜。获胜的方法:**只要小浩一直保持巧克力是正方形就可以了**。刚开始,巧克力是10×10的,长这样: -PNG +PNG 不管面试官咋掰,最后都会掰成一个长宽不相等的正方形。举个栗子,假若面试官把巧克力掰成6×10的: -PNG +PNG 小浩就再把它掰成6×6的: -PNG +PNG 不管面试官咋整,小浩都将其变成正方形,直到最后一次将其变成一个1×1的巧克力,此时面试官就输掉了面试。哦不,是小浩赢得了面试。 -PNG +PNG ## 03、超级改编版 @@ -45,7 +45,7 @@ date: 2020-07-06 如果巧克力换成边长为10的等边三角形,长这样: -PNG +PNG 每次只能**沿着线条掰下一个小等边三角形吃掉**,假若还是由面试官开局,请问,谁必胜?评论区留下你的分析过程吧(另外小浩为了感谢广大读者一直以来的支持,后面每周都会送出**百元红包**,得奖率20%,拉到最下面就可以参与了。如果可以的话,要是能帮我再点个**在看**,我将感激涕零~) diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/1.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/1.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/2.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/2.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/3.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/3.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/4.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/4.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/5.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609/5.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610.md" similarity index 94% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610.md" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610.md" index bc054dfd..9d8f95b5 100644 --- "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610.md" +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610.md" @@ -1,7 +1,7 @@ ---- -title: 大鱼和小鱼的问题 + +## 大鱼和小鱼的问题 date: 2020-07-08 ---- + > 十年前有一款很出名的游戏叫做“孢子”,不知道大家玩没玩过。玩家最初扮演一个单细胞生物,通过“大鱼吃小鱼,小鱼吃虾米,虾米吃水藻”的规则,逐步进化为宇宙文明生物。换句话说,大鱼之上总是有更大的鱼存在。当然我们这里不是讨论这个游戏,而是思考一个有趣的问题:倘若所有的鱼都是理性的,那会出现怎样的情况呢? @@ -29,19 +29,19 @@ date: 2020-07-08 我们是有十条鱼,分析起来是比较麻烦的。所以我们从最简单的两条鱼开始分析: -PNG +PNG 两条鱼的情况下,第二条鱼就是无敌的存在,他不用担心自己被吃掉!如果是三条鱼: -PNG +PNG 3条鱼的情况下,第2条鱼不能吃第1条鱼,否则将化为只有2条鱼的情形,它将会被第3条鱼吃掉。如果是四条鱼,就有意思了: -PNG +PNG 此时第2条鱼可以大胆地吃掉第1条鱼,因为根据前面的结论,它知道第3条鱼是不敢吃它的。问题来了,五条鱼会如何: -PNG +PNG 5条鱼的情况下,第2条鱼是不敢吃第1条鱼的,因为如果它吃了第一条鱼。问题转化为4条鱼的场景,原3号鱼就可以大胆吃掉原2号鱼,因为它知道4号鱼是不敢吃它的,否则5号鱼就会吃掉4号鱼(绕不绕) @@ -82,7 +82,7 @@ date: 2020-07-08 这里值得强调的一点是,信息不对称 和 不完全信息,这两个的概念是有所不同的。划重点:不完全信息同时是经济学和博弈论中的概念,但是信息不对称大多指经济学中概念。这个大家了解一下即可(其实我个人觉得这种东东理解其本质就ok了,并不需要过于较真)下面的问题,摘自《经济学基础》题库 -PNG +PNG 理论的东西就是这么枯燥,总之大家拿到这种题目知道怎么分析就ok了。 diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/1.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/1.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/1.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/1.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/2.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/2.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/2.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/2.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/3.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/3.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/3.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/3.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/4.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/4.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/4.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/4.jpg" diff --git "a/website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/5.jpg" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/5.jpg" similarity index 100% rename from "website/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/5.jpg" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/9.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610/5.jpg" diff --git "a/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/README.md" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/README.md" new file mode 100644 index 00000000..e5123668 --- /dev/null +++ "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/sourcefile/README.md" @@ -0,0 +1,11 @@ +### 所有内容版权归作者所有,未经授权将依法追究法律责任! + +- 仅允许个人以学习为目的进行传播 +- 不允许任何其他平台进行转载 +- 不允许任何商业引用 + +--- + +#### 该目录源文件将不再更新,新的内容请移驾到我的个人网站进行学习或者下载 + +[访问网站学习](https://www.geekxh.com) \ No newline at end of file diff --git "a/\345\260\217\346\265\251\347\256\227\346\263\225\345\233\276\350\247\243 100 \351\201\223/\345\222\214\345\260\217\346\265\251\345\255\246\347\256\227\346\263\225(0701\347\211\210\346\234\254).pdf" "b/PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/\345\222\214\345\260\217\346\265\251\345\255\246\347\256\227\346\263\225(0820\347\211\210\346\234\254).pdf" old mode 100755 new mode 100644 similarity index 100% rename from "\345\260\217\346\265\251\347\256\227\346\263\225\345\233\276\350\247\243 100 \351\201\223/\345\222\214\345\260\217\346\265\251\345\255\246\347\256\227\346\263\225(0701\347\211\210\346\234\254).pdf" rename to "PART_2_\345\212\233\346\211\243\345\233\276\350\247\243/\345\222\214\345\260\217\346\265\251\345\255\246\347\256\227\346\263\225(0820\347\211\210\346\234\254).pdf" diff --git "a/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/README.md" "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/README.md" new file mode 100644 index 00000000..dc9b7e8c --- /dev/null +++ "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/README.md" @@ -0,0 +1,13 @@ +## PART_3_大厂面试 + +考虑到现在网上面经实在太杂,很多都冠以 “BAT” 之名,重复率、错误率都非常高。所以我尽可能的挑选出了我认为比较好的 50 篇面经(基本不重复),并对内容做了分类。 + +建议大家把这个页面收藏起来,防止后面需要的时候找不到了。 + +希望大家可以点个 star 支持一下~ + +- [系统设计-长文(非常建议读,我自己也看了)](https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md) +- [后端-社招(两年): 蚂蚁 头条 PingCAP](https://github.com/aylei/interview) +- [后端-京东-JAVA](https://www.cnblogs.com/wupeixuan/p/8908524.html#%E4%B8%80%E3%80%81java) +- [后端-百度-高并发抢红包设计](https://github.com/xbox1994/Java-Interview/blob/master/MD/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1-%E9%AB%98%E5%B9%B6%E5%8F%91%E6%8A%A2%E7%BA%A2%E5%8C%85.md) +- [NLP(机器学习)-百度](https://www.e-learn.cn/topic/95743) diff --git "a/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\344\272\254\344\270\234\347\257\207.zip" "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\344\272\254\344\270\234\347\257\207.zip" new file mode 100644 index 00000000..eb3eb5e3 Binary files /dev/null and "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\344\272\254\344\270\234\347\257\207.zip" differ diff --git "a/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\345\215\216\344\270\272\347\257\207.zip" "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\345\215\216\344\270\272\347\257\207.zip" new file mode 100644 index 00000000..77eadbd6 Binary files /dev/null and "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\345\215\216\344\270\272\347\257\207.zip" differ diff --git "a/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\345\244\264\346\235\241\347\257\207.zip" "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\345\244\264\346\235\241\347\257\207.zip" new file mode 100644 index 00000000..69bf482d Binary files /dev/null and "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\345\244\264\346\235\241\347\257\207.zip" differ diff --git "a/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\346\273\264\346\273\264\347\257\207.zip" "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\346\273\264\346\273\264\347\257\207.zip" new file mode 100644 index 00000000..fa548543 Binary files /dev/null and "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\346\273\264\346\273\264\347\257\207.zip" differ diff --git "a/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\347\231\276\345\272\246\347\257\207.zip" "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\347\231\276\345\272\246\347\257\207.zip" new file mode 100644 index 00000000..0655cf21 Binary files /dev/null and "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\347\231\276\345\272\246\347\257\207.zip" differ diff --git "a/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\347\276\216\345\233\242\347\257\207.zip" "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\347\276\216\345\233\242\347\257\207.zip" new file mode 100644 index 00000000..79a43797 Binary files /dev/null and "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\347\276\216\345\233\242\347\257\207.zip" differ diff --git "a/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\350\205\276\350\256\257\347\257\207.zip" "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\350\205\276\350\256\257\347\257\207.zip" new file mode 100644 index 00000000..dd4ea160 Binary files /dev/null and "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\350\205\276\350\256\257\347\257\207.zip" differ diff --git "a/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\351\230\277\351\207\214\347\257\207.zip" "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\351\230\277\351\207\214\347\257\207.zip" new file mode 100644 index 00000000..1252ea2e Binary files /dev/null and "b/PART_3_\345\244\247\345\216\202\351\235\242\350\257\225/\346\261\207\346\200\273/\351\230\277\351\207\214\347\257\207.zip" differ diff --git "a/PART_4_CS\347\237\245\350\257\206\346\261\207\346\200\273/Linux/\344\270\200\346\226\207\350\257\273\346\207\202Linux.md" "b/PART_4_CS\347\237\245\350\257\206\346\261\207\346\200\273/Linux/\344\270\200\346\226\207\350\257\273\346\207\202Linux.md" new file mode 100644 index 00000000..1422a5a3 --- /dev/null +++ "b/PART_4_CS\347\237\245\350\257\206\346\261\207\346\200\273/Linux/\344\270\200\346\226\207\350\257\273\346\207\202Linux.md" @@ -0,0 +1,1264 @@ + +* [前言](#前言) +* [一、常用操作以及概念](#一常用操作以及概念) + * [快捷键](#快捷键) + * [求助](#求助) + * [关机](#关机) + * [PATH](#path) + * [sudo](#sudo) + * [包管理工具](#包管理工具) + * [发行版](#发行版) + * [VIM 三个模式](#vim-三个模式) + * [GNU](#gnu) + * [开源协议](#开源协议) +* [二、磁盘](#二磁盘) + * [磁盘接口](#磁盘接口) + * [磁盘的文件名](#磁盘的文件名) +* [三、分区](#三分区) + * [分区表](#分区表) + * [开机检测程序](#开机检测程序) +* [四、文件系统](#四文件系统) + * [分区与文件系统](#分区与文件系统) + * [组成](#组成) + * [文件读取](#文件读取) + * [磁盘碎片](#磁盘碎片) + * [block](#block) + * [inode](#inode) + * [目录](#目录) + * [日志](#日志) + * [挂载](#挂载) + * [目录配置](#目录配置) +* [五、文件](#五文件) + * [文件属性](#文件属性) + * [文件与目录的基本操作](#文件与目录的基本操作) + * [修改权限](#修改权限) + * [默认权限](#默认权限) + * [目录的权限](#目录的权限) + * [链接](#链接) + * [获取文件内容](#获取文件内容) + * [指令与文件搜索](#指令与文件搜索) +* [六、压缩与打包](#六压缩与打包) + * [压缩文件名](#压缩文件名) + * [压缩指令](#压缩指令) + * [打包](#打包) +* [七、Bash](#七bash) + * [特性](#特性) + * [变量操作](#变量操作) + * [指令搜索顺序](#指令搜索顺序) + * [数据流重定向](#数据流重定向) +* [八、管道指令](#八管道指令) + * [提取指令](#提取指令) + * [排序指令](#排序指令) + * [双向输出重定向](#双向输出重定向) + * [字符转换指令](#字符转换指令) + * [分区指令](#分区指令) +* [九、正则表达式](#九正则表达式) + * [grep](#grep) + * [printf](#printf) + * [awk](#awk) +* [十、进程管理](#十进程管理) + * [查看进程](#查看进程) + * [进程状态](#进程状态) + * [SIGCHLD](#sigchld) + * [wait()](#wait) + * [waitpid()](#waitpid) + * [孤儿进程](#孤儿进程) + * [僵尸进程](#僵尸进程) +* [参考资料](#参考资料) + + + +# 前言 + +为了便于理解,本文从常用操作和概念开始讲起。虽然已经尽量做到简化,但是涉及到的内容还是有点多。在面试中,Linux 知识点相对于网络和操作系统等知识点而言不是那么重要,只需要重点掌握一些原理和命令即可。为了方便大家准备面试,在此先将一些比较重要的知识点列出来: + +- 能简单使用 cat,grep,cut 等命令进行一些操作; +- 文件系统相关的原理,inode 和 block 等概念,数据恢复; +- 硬链接与软链接; +- 进程管理相关,僵尸进程与孤儿进程,SIGCHLD 。 + +# 一、常用操作以及概念 + +## 快捷键 + +- Tab:命令和文件名补全; +- Ctrl+C:中断正在运行的程序; +- Ctrl+D:结束键盘输入(End Of File,EOF) + +## 求助 + +### 1. --help + +指令的基本用法与选项介绍。 + +### 2. man + +man 是 manual 的缩写,将指令的具体信息显示出来。 + +当执行 `man date` 时,有 DATE(1) 出现,其中的数字代表指令的类型,常用的数字及其类型如下: + +| 代号 | 类型 | +| :--: | -- | +| 1 | 用户在 shell 环境中可以操作的指令或者可执行文件 | +| 5 | 配置文件 | +| 8 | 系统管理员可以使用的管理指令 | + +### 3. info + +info 与 man 类似,但是 info 将文档分成一个个页面,每个页面可以跳转。 + +### 4. doc + +/usr/share/doc 存放着软件的一整套说明文件。 + +## 关机 + +### 1. who + +在关机前需要先使用 who 命令查看有没有其它用户在线。 + +### 2. sync + +为了加快对磁盘文件的读写速度,位于内存中的文件数据不会立即同步到磁盘,因此关机之前需要先进行 sync 同步操作。 + +### 3. shutdown + +```html +# shutdown [-krhc] 时间 [信息] +-k : 不会关机,只是发送警告信息,通知所有在线的用户 +-r : 将系统的服务停掉后就重新启动 +-h : 将系统的服务停掉后就立即关机 +-c : 取消已经在进行的 shutdown +``` + +## PATH + +可以在环境变量 PATH 中声明可执行文件的路径,路径之间用 : 分隔。 + +```html +/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin +``` + +## sudo + +sudo 允许一般用户使用 root 可执行的命令,不过只有在 /etc/sudoers 配置文件中添加的用户才能使用该指令。 + +## 包管理工具 + +RPM 和 DPKG 为最常见的两类软件包管理工具: + +- RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成为许多 Linux 系统的既定软件标准。YUM 基于 RPM,具有依赖管理和软件升级功能。 +- 与 RPM 竞争的是基于 Debian 操作系统的 DEB 软件包管理工具 DPKG,全称为 Debian Package,功能方面与 RPM 相似。 + +## 发行版 + +Linux 发行版是 Linux 内核及各种应用软件的集成版本。 + +| 基于的包管理工具 | 商业发行版 | 社区发行版 | +| :--: | :--: | :--: | +| RPM | Red Hat | Fedora / CentOS | +| DPKG | Ubuntu | Debian | + +## VIM 三个模式 + +

+ + + +- 一般指令模式(Command mode):VIM 的默认模式,可以用于移动游标查看内容; +- 编辑模式(Insert mode):按下 "i" 等按键之后进入,可以对文本进行编辑; +- 指令列模式(Bottom-line mode):按下 ":" 按键之后进入,用于保存退出等操作。 + +在指令列模式下,有以下命令用于离开或者保存文件。 + +| 命令 | 作用 | +| :--: | :--: | +| :w | 写入磁盘| +| :w! | 当文件为只读时,强制写入磁盘。到底能不能写入,与用户对该文件的权限有关 | +| :q | 离开 | +| :q! | 强制离开不保存 | +| :wq | 写入磁盘后离开 | +| :wq!| 强制写入磁盘后离开 | + +## GNU + +GNU 计划,译为革奴计划,它的目标是创建一套完全自由的操作系统,称为 GNU,其内容软件完全以 GPL 方式发布。其中 GPL 全称为 GNU 通用公共许可协议(GNU General Public License),包含了以下内容: + +- 以任何目的运行此程序的自由; +- 再复制的自由; +- 改进此程序,并公开发布改进的自由。 + +## 开源协议 + +- [Choose an open source license](https://choosealicense.com/) +- [如何选择开源许可证?](http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html) + +# 二、磁盘 + +## 磁盘接口 + +### 1. IDE + +IDE(ATA)全称 Advanced Technology Attachment,接口速度最大为 133MB/s,因为并口线的抗干扰性太差,且排线占用空间较大,不利电脑内部散热,已逐渐被 SATA 所取代。 + +

+ +### 2. SATA + +SATA 全称 Serial ATA,也就是使用串口的 ATA 接口,抗干扰性强,且对数据线的长度要求比 ATA 低很多,支持热插拔等功能。SATA-II 的接口速度为 300MB/s,而 SATA-III 标准可达到 600MB/s 的传输速度。SATA 的数据线也比 ATA 的细得多,有利于机箱内的空气流通,整理线材也比较方便。 + +

+ +### 3. SCSI + +SCSI 全称是 Small Computer System Interface(小型机系统接口),SCSI 硬盘广为工作站以及个人电脑以及服务器所使用,因此会使用较为先进的技术,如碟片转速 15000rpm 的高转速,且传输时 CPU 占用率较低,但是单价也比相同容量的 ATA 及 SATA 硬盘更加昂贵。 + +

+ +### 4. SAS + +SAS(Serial Attached SCSI)是新一代的 SCSI 技术,和 SATA 硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到 6Gb/s。此外也通过缩小连接线改善系统内部空间等。 + +

+ +## 磁盘的文件名 + +Linux 中每个硬件都被当做一个文件,包括磁盘。磁盘以磁盘接口类型进行命名,常见磁盘的文件名如下: + +- IDE 磁盘:/dev/hd[a-d] +- SATA/SCSI/SAS 磁盘:/dev/sd[a-p] + +其中文件名后面的序号的确定与系统检测到磁盘的顺序有关,而与磁盘所插入的插槽位置无关。 + +# 三、分区 + +## 分区表 + +磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。 + +### 1. MBR + +MBR 中,第一个扇区最重要,里面有主要开机记录(Master boot record, MBR)及分区表(partition table),其中主要开机记录占 446 bytes,分区表占 64 bytes。 + +分区表只有 64 bytes,最多只能存储 4 个分区,这 4 个分区为主分区(Primary)和扩展分区(Extended)。其中扩展分区只有一个,它使用其它扇区来记录额外的分区表,因此通过扩展分区可以分出更多分区,这些分区称为逻辑分区。 + +Linux 也把分区当成文件,分区文件的命名方式为:磁盘文件名 + 编号,例如 /dev/sda1。注意,逻辑分区的编号从 5 开始。 + +### 2. GPT + +扇区是磁盘的最小存储单位,旧磁盘的扇区大小通常为 512 bytes,而最新的磁盘支持 4 k。GPT 为了兼容所有磁盘,在定义扇区上使用逻辑区块地址(Logical Block Address, LBA),LBA 默认大小为 512 bytes。 + +GPT 第 1 个区块记录了主要开机记录(MBR),紧接着是 33 个区块记录分区信息,并把最后的 33 个区块用于对分区信息进行备份。这 33 个区块第一个为 GPT 表头纪录,这个部份纪录了分区表本身的位置与大小和备份分区的位置,同时放置了分区表的校验码 (CRC32),操作系统可以根据这个校验码来判断 GPT 是否正确。若有错误,可以使用备份分区进行恢复。 + +GPT 没有扩展分区概念,都是主分区,每个 LBA 可以分 4 个分区,因此总共可以分 4 * 32 = 128 个分区。 + +MBR 不支持 2.2 TB 以上的硬盘,GPT 则最多支持到 233 TB = 8 ZB。 + +

+ +## 开机检测程序 + +### 1. BIOS + +BIOS(Basic Input/Output System,基本输入输出系统),它是一个固件(嵌入在硬件中的软件),BIOS 程序存放在断电后内容不会丢失的只读内存中。 + +

+ +BIOS 是开机的时候计算机执行的第一个程序,这个程序知道可以开机的磁盘,并读取磁盘第一个扇区的主要开机记录(MBR),由主要开机记录(MBR)执行其中的开机管理程序,这个开机管理程序会加载操作系统的核心文件。 + +主要开机记录(MBR)中的开机管理程序提供以下功能:选单、载入核心文件以及转交其它开机管理程序。转交这个功能可以用来实现多重引导,只需要将另一个操作系统的开机管理程序安装在其它分区的启动扇区上,在启动开机管理程序时,就可以通过选单选择启动当前的操作系统或者转交给其它开机管理程序从而启动另一个操作系统。 + +下图中,第一扇区的主要开机记录(MBR)中的开机管理程序提供了两个选单:M1、M2,M1 指向了 Windows 操作系统,而 M2 指向其它分区的启动扇区,里面包含了另外一个开机管理程序,提供了一个指向 Linux 的选单。 + +

+ +安装多重引导,最好先安装 Windows 再安装 Linux。因为安装 Windows 时会覆盖掉主要开机记录(MBR),而 Linux 可以选择将开机管理程序安装在主要开机记录(MBR)或者其它分区的启动扇区,并且可以设置开机管理程序的选单。 + +### 2. UEFI + +BIOS 不可以读取 GPT 分区表,而 UEFI 可以。 + +# 四、文件系统 + +## 分区与文件系统 + +对分区进行格式化是为了在分区上建立文件系统。一个分区通常只能格式化为一个文件系统,但是磁盘阵列等技术可以将一个分区格式化为多个文件系统。 + +## 组成 + +最主要的几个组成部分如下: + +- inode:一个文件占用一个 inode,记录文件的属性,同时记录此文件的内容所在的 block 编号; +- block:记录文件的内容,文件太大时,会占用多个 block。 + +除此之外还包括: + +- superblock:记录文件系统的整体信息,包括 inode 和 block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等; +- block bitmap:记录 block 是否被使用的位图。 + +

+ +## 文件读取 + +对于 Ext2 文件系统,当要读取一个文件的内容时,先在 inode 中查找文件内容所在的所有 block,然后把所有 block 的内容读出来。 + +

+ +而对于 FAT 文件系统,它没有 inode,每个 block 中存储着下一个 block 的编号。 + +

+ +## 磁盘碎片 + +指一个文件内容所在的 block 过于分散,导致磁盘磁头移动距离过大,从而降低磁盘读写性能。 + +## block + +在 Ext2 文件系统中所支持的 block 大小有 1K,2K 及 4K 三种,不同的大小限制了单个文件和文件系统的最大大小。 + +| 大小 | 1KB | 2KB | 4KB | +| :---: | :---: | :---: | :---: | +| 最大单一文件 | 16GB | 256GB | 2TB | +| 最大文件系统 | 2TB | 8TB | 16TB | + +一个 block 只能被一个文件所使用,未使用的部分直接浪费了。因此如果需要存储大量的小文件,那么最好选用比较小的 block。 + +## inode + +inode 具体包含以下信息: + +- 权限 (read/write/excute); +- 拥有者与群组 (owner/group); +- 容量; +- 建立或状态改变的时间 (ctime); +- 最近读取时间 (atime); +- 最近修改时间 (mtime); +- 定义文件特性的旗标 (flag),如 SetUID...; +- 该文件真正内容的指向 (pointer)。 + +inode 具有以下特点: + +- 每个 inode 大小均固定为 128 bytes (新的 ext4 与 xfs 可设定到 256 bytes); +- 每个文件都仅会占用一个 inode。 + +inode 中记录了文件内容所在的 block 编号,但是每个 block 非常小,一个大文件随便都需要几十万的 block。而一个 inode 大小有限,无法直接引用这么多 block 编号。因此引入了间接、双间接、三间接引用。间接引用让 inode 记录的引用 block 块记录引用信息。 + +

+ +## 目录 + +建立一个目录时,会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件名。 + +可以看到文件的 inode 本身不记录文件名,文件名记录在目录中,因此新增文件、删除文件、更改文件名这些操作与目录的写权限有关。 + +## 日志 + +如果突然断电,那么文件系统会发生错误,例如断电前只修改了 block bitmap,而还没有将数据真正写入 block 中。 + +ext3/ext4 文件系统引入了日志功能,可以利用日志来修复文件系统。 + +## 挂载 + +挂载利用目录作为文件系统的进入点,也就是说,进入目录之后就可以读取文件系统的数据。 + +## 目录配置 + +为了使不同 Linux 发行版本的目录结构保持一致性,Filesystem Hierarchy Standard (FHS) 规定了 Linux 的目录结构。最基础的三个目录如下: + +- / (root, 根目录) +- /usr (unix software resource):所有系统默认软件都会安装到这个目录; +- /var (variable):存放系统或程序运行过程中的数据文件。 + +

+ +# 五、文件 + +## 文件属性 + +用户分为三种:文件拥有者、群组以及其它人,对不同的用户有不同的文件权限。 + +使用 ls 查看一个文件时,会显示一个文件的信息,例如 `drwxr-xr-x 3 root root 17 May 6 00:14 .config`,对这个信息的解释如下: + +- drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段 +- 3:链接数 +- root:文件拥有者 +- root:所属群组 +- 17:文件大小 +- May 6 00:14:文件最后被修改的时间 +- .config:文件名 + +常见的文件类型及其含义有: + +- d:目录 +- -:文件 +- l:链接文件 + +9 位的文件权限字段中,每 3 个为一组,共 3 组,每一组分别代表对文件拥有者、所属群组以及其它人的文件权限。一组权限中的 3 位分别为 r、w、x 权限,表示可读、可写、可执行。 + +文件时间有以下三种: + +- modification time (mtime):文件的内容更新就会更新; +- status time (ctime):文件的状态(权限、属性)更新就会更新; +- access time (atime):读取文件时就会更新。 + +## 文件与目录的基本操作 + +### 1. ls + +列出文件或者目录的信息,目录的信息就是其中包含的文件。 + +```html +# ls [-aAdfFhilnrRSt] file|dir +-a :列出全部的文件 +-d :仅列出目录本身 +-l :以长数据串行列出,包含文件的属性与权限等等数据 +``` + +### 2. cd + +更换当前目录。 + +``` +cd [相对路径或绝对路径] +``` + +### 3. mkdir + +创建目录。 + +``` +# mkdir [-mp] 目录名称 +-m :配置目录权限 +-p :递归创建目录 +``` + +### 4. rmdir + +删除目录,目录必须为空。 + +```html +rmdir [-p] 目录名称 +-p :递归删除目录 +``` + +### 5. touch + +更新文件时间或者建立新文件。 + +```html +# touch [-acdmt] filename +-a : 更新 atime +-c : 更新 ctime,若该文件不存在则不建立新文件 +-m : 更新 mtime +-d : 后面可以接更新日期而不使用当前日期,也可以使用 --date="日期或时间" +-t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm] +``` + +### 6. cp + +复制文件。如果源文件有两个以上,则目的文件一定要是目录才行。 + +```html +cp [-adfilprsu] source destination +-a :相当于 -dr --preserve=all +-d :若来源文件为链接文件,则复制链接文件属性而非文件本身 +-i :若目标文件已经存在时,在覆盖前会先询问 +-p :连同文件的属性一起复制过去 +-r :递归复制 +-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制 +--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了 +``` + +### 7. rm + +删除文件。 + +```html +# rm [-fir] 文件或目录 +-r :递归删除 +``` + +### 8. mv + +移动文件。 + +```html +# mv [-fiu] source destination +# mv [options] source1 source2 source3 .... directory +-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 +``` + +## 修改权限 + +可以将一组权限用数字来表示,此时一组权限的 3 个位当做二进制数字的位,从左到右每个位的权值为 4、2、1,即每个权限对应的数字权值为 r : 4、w : 2、x : 1。 + +```html +# chmod [-R] xyz dirname/filename +``` + +示例:将 .bashrc 文件的权限修改为 -rwxr-xr--。 + +```html +# chmod 754 .bashrc +``` + +也可以使用符号来设定权限。 + +```html +# chmod [ugoa] [+-=] [rwx] dirname/filename +- u:拥有者 +- g:所属群组 +- o:其他人 +- a:所有人 +- +:添加权限 +- -:移除权限 +- =:设定权限 +``` + +示例:为 .bashrc 文件的所有用户添加写权限。 + +```html +# chmod a+w .bashrc +``` + +## 默认权限 + +- 文件默认权限:文件默认没有可执行权限,因此为 666,也就是 -rw-rw-rw- 。 +- 目录默认权限:目录必须要能够进入,也就是必须拥有可执行权限,因此为 777 ,也就是 drwxrwxrwx。 + +可以通过 umask 设置或者查看默认权限,通常以掩码的形式来表示,例如 002 表示其它用户的权限去除了一个 2 的权限,也就是写权限,因此建立新文件时默认的权限为 -rw-rw-r--。 + +## 目录的权限 + +文件名不是存储在一个文件的内容中,而是存储在一个文件所在的目录中。因此,拥有文件的 w 权限并不能对文件名进行修改。 + +目录存储文件列表,一个目录的权限也就是对其文件列表的权限。因此,目录的 r 权限表示可以读取文件列表;w 权限表示可以修改文件列表,具体来说,就是添加删除文件,对文件名进行修改;x 权限可以让该目录成为工作目录,x 权限是 r 和 w 权限的基础,如果不能使一个目录成为工作目录,也就没办法读取文件列表以及对文件列表进行修改了。 + +## 链接 + +

+ + +```html +# ln [-sf] source_filename dist_filename +-s :默认是实体链接,加 -s 为符号链接 +-f :如果目标文件存在时,先删除目标文件 +``` + +### 1. 实体链接 + +在目录下创建一个条目,记录着文件名与 inode 编号,这个 inode 就是源文件的 inode。 + +删除任意一个条目,文件还是存在,只要引用数量不为 0。 + +有以下限制:不能跨越文件系统、不能对目录进行链接。 + +```html +# ln /etc/crontab . +# ll -i /etc/crontab crontab +34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab +34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab +``` + +### 2. 符号链接 + +符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。 + +当源文件被删除了,链接文件就打不开了。 + +因为记录的是路径,所以可以为目录建立符号链接。 + +```html +# ll -i /etc/crontab /root/crontab2 +34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab +53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab +``` + +## 获取文件内容 + +### 1. cat + +取得文件内容。 + +```html +# cat [-AbEnTv] filename +-n :打印出行号,连同空白行也会有行号,-b 不会 +``` + +### 2. tac + +是 cat 的反向操作,从最后一行开始打印。 + +### 3. more + +和 cat 不同的是它可以一页一页查看文件内容,比较适合大文件的查看。 + +### 4. less + +和 more 类似,但是多了一个向前翻页的功能。 + +### 5. head + +取得文件前几行。 + +```html +# head [-n number] filename +-n :后面接数字,代表显示几行的意思 +``` + +### 6. tail + +是 head 的反向操作,只是取得是后几行。 + +### 7. od + +以字符或者十六进制的形式显示二进制文件。 + +## 指令与文件搜索 + +### 1. which + +指令搜索。 + +```html +# which [-a] command +-a :将所有指令列出,而不是只列第一个 +``` + +### 2. whereis + +文件搜索。速度比较快,因为它只搜索几个特定的目录。 + +```html +# whereis [-bmsu] dirname/filename +``` + +### 3. locate + +文件搜索。可以用关键字或者正则表达式进行搜索。 + +locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索,它存储在内存中,并且每天更新一次,所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。 + +```html +# locate [-ir] keyword +-r:正则表达式 +``` + +### 4. find + +文件搜索。可以使用文件的属性和权限进行搜索。 + +```html +# find [basedir] [option] +example: find . -name "shadow*" +``` + +**① 与时间有关的选项** + +```html +-mtime n :列出在 n 天前的那一天修改过内容的文件 +-mtime +n :列出在 n 天之前 (不含 n 天本身) 修改过内容的文件 +-mtime -n :列出在 n 天之内 (含 n 天本身) 修改过内容的文件 +-newer file : 列出比 file 更新的文件 +``` + ++4、4 和 -4 的指示的时间范围如下: + +

+ +**② 与文件拥有者和所属群组有关的选项** + +```html +-uid n +-gid n +-user name +-group name +-nouser :搜索拥有者不存在 /etc/passwd 的文件 +-nogroup:搜索所属群组不存在于 /etc/group 的文件 +``` + +**③ 与文件权限和名称有关的选项** + +```html +-name filename +-size [+-]SIZE:搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有:c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k +-type TYPE +-perm mode :搜索权限等于 mode 的文件 +-perm -mode :搜索权限包含 mode 的文件 +-perm /mode :搜索权限包含任一 mode 的文件 +``` + +# 六、压缩与打包 + +## 压缩文件名 + +Linux 底下有很多压缩文件名,常见的如下: + +| 扩展名 | 压缩程序 | +| -- | -- | +| \*.Z | compress | +|\*.zip | zip | +|\*.gz | gzip| +|\*.bz2 | bzip2 | +|\*.xz | xz | +|\*.tar | tar 程序打包的数据,没有经过压缩 | +|\*.tar.gz | tar 程序打包的文件,经过 gzip 的压缩 | +|\*.tar.bz2 | tar 程序打包的文件,经过 bzip2 的压缩 | +|\*.tar.xz | tar 程序打包的文件,经过 xz 的压缩 | + +## 压缩指令 + +### 1. gzip + +gzip 是 Linux 使用最广的压缩指令,可以解开 compress、zip 与 gzip 所压缩的文件。 + +经过 gzip 压缩过,源文件就不存在了。 + +有 9 个不同的压缩等级可以使用。 + +可以使用 zcat、zmore、zless 来读取压缩文件的内容。 + +```html +$ gzip [-cdtv#] filename +-c :将压缩的数据输出到屏幕上 +-d :解压缩 +-t :检验压缩文件是否出错 +-v :显示压缩比等信息 +-# : # 为数字的意思,代表压缩等级,数字越大压缩比越高,默认为 6 +``` + +### 2. bzip2 + +提供比 gzip 更高的压缩比。 + +查看命令:bzcat、bzmore、bzless、bzgrep。 + +```html +$ bzip2 [-cdkzv#] filename +-k :保留源文件 +``` + +### 3. xz + +提供比 bzip2 更佳的压缩比。 + +可以看到,gzip、bzip2、xz 的压缩比不断优化。不过要注意的是,压缩比越高,压缩的时间也越长。 + +查看命令:xzcat、xzmore、xzless、xzgrep。 + +```html +$ xz [-dtlkc#] filename +``` + +## 打包 + +压缩指令只能对一个文件进行压缩,而打包能够将多个文件打包成一个大文件。tar 不仅可以用于打包,也可以使用 gzip、bzip2、xz 将打包文件进行压缩。 + +```html +$ tar [-z|-j|-J] [cv] [-f 新建的 tar 文件] filename... ==打包压缩 +$ tar [-z|-j|-J] [tv] [-f 已有的 tar 文件] ==查看 +$ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录] ==解压缩 +-z :使用 zip; +-j :使用 bzip2; +-J :使用 xz; +-c :新建打包文件; +-t :查看打包文件里面有哪些文件; +-x :解打包或解压缩的功能; +-v :在压缩/解压缩的过程中,显示正在处理的文件名; +-f : filename:要处理的文件; +-C 目录 : 在特定目录解压缩。 +``` + +| 使用方式 | 命令 | +| :---: | --- | +| 打包压缩 | tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 | +| 查 看 | tar -jtv -f filename.tar.bz2 | +| 解压缩 | tar -jxv -f filename.tar.bz2 -C 要解压缩的目录 | + +# 七、Bash + +可以通过 Shell 请求内核提供服务,Bash 正是 Shell 的一种。 + +## 特性 + +- 命令历史:记录使用过的命令 +- 命令与文件补全:快捷键:tab +- 命名别名:例如 ll 是 ls -al 的别名 +- shell scripts +- 通配符:例如 ls -l /usr/bin/X\* 列出 /usr/bin 下面所有以 X 开头的文件 + +## 变量操作 + +对一个变量赋值直接使用 =。 + +对变量取用需要在变量前加上 \$ ,也可以用 \${} 的形式; + +输出变量使用 echo 命令。 + +```bash +$ x=abc +$ echo $x +$ echo ${x} +``` + +变量内容如果有空格,必须使用双引号或者单引号。 + +- 双引号内的特殊字符可以保留原本特性,例如 x="lang is \$LANG",则 x 的值为 lang is zh_TW.UTF-8; +- 单引号内的特殊字符就是特殊字符本身,例如 x='lang is \$LANG',则 x 的值为 lang is \$LANG。 + +可以使用 \`指令\` 或者 \$(指令) 的方式将指令的执行结果赋值给变量。例如 version=\$(uname -r),则 version 的值为 4.15.0-22-generic。 + +可以使用 export 命令将自定义变量转成环境变量,环境变量可以在子程序中使用,所谓子程序就是由当前 Bash 而产生的子 Bash。 + +Bash 的变量可以声明为数组和整数数字。注意数字类型没有浮点数。如果不进行声明,默认是字符串类型。变量的声明使用 declare 命令: + +```html +$ declare [-aixr] variable +-a : 定义为数组类型 +-i : 定义为整数类型 +-x : 定义为环境变量 +-r : 定义为 readonly 类型 +``` + +使用 [ ] 来对数组进行索引操作: + +```bash +$ array[1]=a +$ array[2]=b +$ echo ${array[1]} +``` + +## 指令搜索顺序 + +- 以绝对或相对路径来执行指令,例如 /bin/ls 或者 ./ls ; +- 由别名找到该指令来执行; +- 由 Bash 内置的指令来执行; +- 按 \$PATH 变量指定的搜索路径的顺序找到第一个指令来执行。 + +## 数据流重定向 + +重定向指的是使用文件代替标准输入、标准输出和标准错误输出。 + +| 1 | 代码 | 运算符 | +| :---: | :---: | :---:| +| 标准输入 (stdin) | 0 | < 或 << | +| 标准输出 (stdout) | 1 | > 或 >> | +| 标准错误输出 (stderr) | 2 | 2> 或 2>> | + +其中,有一个箭头的表示以覆盖的方式重定向,而有两个箭头的表示以追加的方式重定向。 + +可以将不需要的标准输出以及标准错误输出重定向到 /dev/null,相当于扔进垃圾箱。 + +如果需要将标准输出以及标准错误输出同时重定向到一个文件,需要将某个输出转换为另一个输出,例如 2>&1 表示将标准错误输出转换为标准输出。 + +```bash +$ find /home -name .bashrc > list 2>&1 +``` + +# 八、管道指令 + +管道是将一个命令的标准输出作为另一个命令的标准输入,在数据需要经过多个步骤的处理之后才能得到我们想要的内容时就可以使用管道。 + +在命令之间使用 | 分隔各个管道命令。 + +```bash +$ ls -al /etc | less +``` + +## 提取指令 + +cut 对数据进行切分,取出想要的部分。 + +切分过程一行一行地进行。 + +```html +$ cut +-d :分隔符 +-f :经过 -d 分隔后,使用 -f n 取出第 n 个区间 +-c :以字符为单位取出区间 +``` + +示例 1:last 显示登入者的信息,取出用户名。 + +```html +$ last +root pts/1 192.168.201.101 Sat Feb 7 12:35 still logged in +root pts/1 192.168.201.101 Fri Feb 6 12:13 - 18:46 (06:33) +root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 (01:16) + +$ last | cut -d ' ' -f 1 +``` + +示例 2:将 export 输出的信息,取出第 12 字符以后的所有字符串。 + +```html +$ export +declare -x HISTCONTROL="ignoredups" +declare -x HISTSIZE="1000" +declare -x HOME="/home/dmtsai" +declare -x HOSTNAME="study.centos.vbird" +.....(其他省略)..... + +$ export | cut -c 12- +``` + +## 排序指令 + +**sort** 用于排序。 + +```html +$ sort [-fbMnrtuk] [file or stdin] +-f :忽略大小写 +-b :忽略最前面的空格 +-M :以月份的名字来排序,例如 JAN,DEC +-n :使用数字 +-r :反向排序 +-u :相当于 unique,重复的内容只出现一次 +-t :分隔符,默认为 tab +-k :指定排序的区间 +``` + +示例:/etc/passwd 文件内容以 : 来分隔,要求以第三列进行排序。 + +```html +$ cat /etc/passwd | sort -t ':' -k 3 +root:x:0:0:root:/root:/bin/bash +dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash +alex:x:1001:1002::/home/alex:/bin/bash +arod:x:1002:1003::/home/arod:/bin/bash +``` + +**uniq** 可以将重复的数据只取一个。 + +```html +$ uniq [-ic] +-i :忽略大小写 +-c :进行计数 +``` + +示例:取得每个人的登录总次数 + +```html +$ last | cut -d ' ' -f 1 | sort | uniq -c +1 +6 (unknown +47 dmtsai +4 reboot +7 root +1 wtmp +``` + +## 双向输出重定向 + +输出重定向会将输出内容重定向到文件中,而 **tee** 不仅能够完成这个功能,还能保留屏幕上的输出。也就是说,使用 tee 指令,一个输出会同时传送到文件和屏幕上。 + +```html +$ tee [-a] file +``` + +## 字符转换指令 + +**tr** 用来删除一行中的字符,或者对字符进行替换。 + +```html +$ tr [-ds] SET1 ... +-d : 删除行中 SET1 这个字符串 +``` + +示例,将 last 输出的信息所有小写转换为大写。 + +```html +$ last | tr '[a-z]' '[A-Z]' +``` + + **col** 将 tab 字符转为空格字符。 + +```html +$ col [-xb] +-x : 将 tab 键转换成对等的空格键 +``` + +**expand** 将 tab 转换一定数量的空格,默认是 8 个。 + +```html +$ expand [-t] file +-t :tab 转为空格的数量 +``` + +**join** 将有相同数据的那一行合并在一起。 + +```html +$ join [-ti12] file1 file2 +-t :分隔符,默认为空格 +-i :忽略大小写的差异 +-1 :第一个文件所用的比较字段 +-2 :第二个文件所用的比较字段 +``` + +**paste** 直接将两行粘贴在一起。 + +```html +$ paste [-d] file1 file2 +-d :分隔符,默认为 tab +``` + +## 分区指令 + +**split** 将一个文件划分成多个文件。 + +```html +$ split [-bl] file PREFIX +-b :以大小来进行分区,可加单位,例如 b, k, m 等 +-l :以行数来进行分区。 +- PREFIX :分区文件的前导名称 +``` + +# 九、正则表达式 + +## grep + +g/re/p(globally search a regular expression and print),使用正则表示式进行全局查找并打印。 + +```html +$ grep [-acinv] [--color=auto] 搜寻字符串 filename +-c : 统计匹配到行的个数 +-i : 忽略大小写 +-n : 输出行号 +-v : 反向选择,也就是显示出没有 搜寻字符串 内容的那一行 +--color=auto :找到的关键字加颜色显示 +``` + +示例:把含有 the 字符串的行提取出来(注意默认会有 --color=auto 选项,因此以下内容在 Linux 中有颜色显示 the 字符串) + +```html +$ grep -n 'the' regular_express.txt +8:I can't finish the test. +12:the symbol '*' is represented as start. +15:You are the best is mean you are the no. 1. +16:The world Happy is the same with "glad". +18:google is the best tools for search keyword +``` + +示例:正则表达式 a{m,n} 用来匹配字符 a m\~n 次,这里需要将 { 和 } 进行转义,因为它们在 shell 是有特殊意义的。 + +```html +$ grep -n 'a\{2,5\}' regular_express.txt +``` + +## printf + +用于格式化输出。它不属于管道命令,在给 printf 传数据时需要使用 $( ) 形式。 + +```html +$ printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt) + DmTsai 80 60 92 77.33 + VBird 75 55 80 70.00 + Ken 60 90 70 73.33 +``` + +## awk + +是由 Alfred Aho,Peter Weinberger 和 Brian Kernighan 创造,awk 这个名字就是这三个创始人名字的首字母。 + +awk 每次处理一行,处理的最小单位是字段,每个字段的命名方式为:\$n,n 为字段号,从 1 开始,\$0 表示一整行。 + +示例:取出最近五个登录用户的用户名和 IP。首先用 last -n 5 取出用最近五个登录用户的所有信息,可以看到用户名和 IP 分别在第 1 列和第 3 列,我们用 \$1 和 \$3 就能取出这两个字段,然后用 print 进行打印。 + +```html +$ last -n 5 +dmtsai pts/0 192.168.1.100 Tue Jul 14 17:32 still logged in +dmtsai pts/0 192.168.1.100 Thu Jul 9 23:36 - 02:58 (03:22) +dmtsai pts/0 192.168.1.100 Thu Jul 9 17:23 - 23:36 (06:12) +dmtsai pts/0 192.168.1.100 Thu Jul 9 08:02 - 08:17 (00:14) +dmtsai tty1 Fri May 29 11:55 - 12:11 (00:15) +``` + +```html +$ last -n 5 | awk '{print $1 "\t" $3}' +``` + +可以根据字段的某些条件进行匹配,例如匹配字段小于某个值的那一行数据。 + +```html +$ awk '条件类型 1 {动作 1} 条件类型 2 {动作 2} ...' filename +``` + +示例:/etc/passwd 文件第三个字段为 UID,对 UID 小于 10 的数据进行处理。 + +```text +$ cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}' +root 0 +bin 1 +daemon 2 +``` + +awk 变量: + +| 变量名称 | 代表意义 | +| :--: | -- | +| NF | 每一行拥有的字段总数 | +| NR | 目前所处理的是第几行数据 | +| FS | 目前的分隔字符,默认是空格键 | + +示例:显示正在处理的行号以及每一行有多少字段 + +```html +$ last -n 5 | awk '{print $1 "\t lines: " NR "\t columns: " NF}' +dmtsai lines: 1 columns: 10 +dmtsai lines: 2 columns: 10 +dmtsai lines: 3 columns: 10 +dmtsai lines: 4 columns: 10 +dmtsai lines: 5 columns: 9 +``` + +# 十、进程管理 + +## 查看进程 + +### 1. ps + +查看某个时间点的进程信息。 + +示例:查看自己的进程 + +```sh +# ps -l +``` + +示例:查看系统所有进程 + +```sh +# ps aux +``` + +示例:查看特定的进程 + +```sh +# ps aux | grep threadx +``` + +### 2. pstree + +查看进程树。 + +示例:查看所有进程树 + +```sh +# pstree -A +``` + +### 3. top + +实时显示进程信息。 + +示例:两秒钟刷新一次 + +```sh +# top -d 2 +``` + +### 4. netstat + +查看占用端口的进程 + +示例:查看特定端口的进程 + +```sh +# netstat -anp | grep port +``` + +## 进程状态 + +| 状态 | 说明 | +| :---: | --- | +| R | running or runnable (on run queue)
正在执行或者可执行,此时进程位于执行队列中。| +| D | uninterruptible sleep (usually I/O)
不可中断阻塞,通常为 IO 阻塞。 | +| S | interruptible sleep (waiting for an event to complete)
可中断阻塞,此时进程正在等待某个事件完成。| +| Z | zombie (terminated but not reaped by its parent)
僵死,进程已经终止但是尚未被其父进程获取信息。| +| T | stopped (either by a job control signal or because it is being traced)
结束,进程既可以被作业控制信号结束,也可能是正在被追踪。| +
+ +

+ +## SIGCHLD + +当一个子进程改变了它的状态时(停止运行,继续运行或者退出),有两件事会发生在父进程中: + +- 得到 SIGCHLD 信号; +- waitpid() 或者 wait() 调用会返回。 + +其中子进程发送的 SIGCHLD 信号包含了子进程的信息,比如进程 ID、进程状态、进程使用 CPU 的时间等。 + +在子进程退出时,它的进程描述符不会立即释放,这是为了让父进程得到子进程信息,父进程通过 wait() 和 waitpid() 来获得一个已经退出的子进程的信息。 + +

+ +## wait() + +```c +pid_t wait(int *status) +``` + +父进程调用 wait() 会一直阻塞,直到收到一个子进程退出的 SIGCHLD 信号,之后 wait() 函数会销毁子进程并返回。 + +如果成功,返回被收集的子进程的进程 ID;如果调用进程没有子进程,调用就会失败,此时返回 -1,同时 errno 被置为 ECHILD。 + +参数 status 用来保存被收集的子进程退出时的一些状态,如果对这个子进程是如何死掉的毫不在意,只想把这个子进程消灭掉,可以设置这个参数为 NULL。 + +## waitpid() + +```c +pid_t waitpid(pid_t pid, int *status, int options) +``` + +作用和 wait() 完全相同,但是多了两个可由用户控制的参数 pid 和 options。 + +pid 参数指示一个子进程的 ID,表示只关心这个子进程退出的 SIGCHLD 信号。如果 pid=-1 时,那么和 wait() 作用相同,都是关心所有子进程退出的 SIGCHLD 信号。 + +options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 waitpid() 调用变成非阻塞的,也就是说它会立即返回,父进程可以继续执行其它任务。 + +## 孤儿进程 + +一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。 + +孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。 + +由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。 + +## 僵尸进程 + +一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。 + +僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。 + +系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。 + +要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。 + +# 参考资料 + +- 鸟哥. 鸟 哥 的 Linux 私 房 菜 基 础 篇 第 三 版[J]. 2009. +- [Linux 平台上的软件包管理](https://www.ibm.com/developerworks/cn/linux/l-cn-rpmdpkg/index.html) +- [Linux 之守护进程、僵死进程与孤儿进程](http://liubigbin.github.io/2016/03/11/Linux-%E4%B9%8B%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E3%80%81%E5%83%B5%E6%AD%BB%E8%BF%9B%E7%A8%8B%E4%B8%8E%E5%AD%A4%E5%84%BF%E8%BF%9B%E7%A8%8B/) +- [What is the difference between a symbolic link and a hard link?](https://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link) +- [Linux process states](https://idea.popcount.org/2012-12-11-linux-process-states/) +- [GUID Partition Table](https://en.wikipedia.org/wiki/GUID_Partition_Table) +- [详解 wait 和 waitpid 函数](https://blog.csdn.net/kevinhg/article/details/7001719) +- [IDE、SATA、SCSI、SAS、FC、SSD 硬盘类型介绍](https://blog.csdn.net/tianlesoftware/article/details/6009110) +- [Akai IB-301S SCSI Interface for S2800,S3000](http://www.mpchunter.com/s3000/akai-ib-301s-scsi-interface-for-s2800s3000/) +- [Parallel ATA](https://en.wikipedia.org/wiki/Parallel_ATA) +- [ADATA XPG SX900 256GB SATA 3 SSD Review – Expanded Capacity and SandForce Driven Speed](http://www.thessdreview.com/our-reviews/adata-xpg-sx900-256gb-sata-3-ssd-review-expanded-capacity-and-sandforce-driven-speed/4/) +- [Decoding UCS Invicta – Part 1](https://blogs.cisco.com/datacenter/decoding-ucs-invicta-part-1) +- [硬盘](https://zh.wikipedia.org/wiki/%E7%A1%AC%E7%9B%98) +- [Difference between SAS and SATA](http://www.differencebetween.info/difference-between-sas-and-sata) +- [BIOS](https://zh.wikipedia.org/wiki/BIOS) +- [File system design case studies](https://www.cs.rutgers.edu/\~pxk/416/notes/13-fs-studies.html) +- [Programming Project #4](https://classes.soe.ucsc.edu/cmps111/Fall08/proj4.shtml) +- [FILE SYSTEM DESIGN](http://web.cs.ucla.edu/classes/fall14/cs111/scribe/11a/index.html) + + + + + + + diff --git a/README.md b/README.md index 002ec93c..3dfcf6b3 100644 --- a/README.md +++ b/README.md @@ -1,136 +1,201 @@ -# 和小浩学算法 - ## 简介 -小浩算法是我在疫情期间完成的一部图解算法题典! 目前共完成 100+ 道高频面试算法题目,全部采用漫画图解的方式,简单易懂,适合初中级读者。 - -## 如何学习 - -1、因为本教程完全免费,但现在被一些不良商家拿去卖钱, 所以我需要你先帮我点一个 star ,助力原创,防止更多人上当受骗,也顺便支持我一下。 - -2、目前我的内容除整理成一本 30w 字的电子书外,还会每天定期发布新的内容在公众号上。公众号中可以通过回复【加群】 - 进入万人刷题群,我们可以一起讨论问题。 - -> [![图片展示失败,点击查看](https://www.geekxh.com/code.png)](https://www.geekxh.com/code.png) - -3、为了大家更好的学习,我还将所有的内容同步到了我的网站上。如果 github 网速慢,可以 通过网站直接下载我写的这本书,以及所有导图 - -网站地址:https://www.geekxh.com - -4、当然,也许你就想加我的私人微信: [个人名片](https://www.geekxh.com/contact.jpeg) - -## 内容展示 - -我这里截取了思维导图以及算法题解的内容图片,可以先看一下效果: - -导图目录:[点击查看](https://www.geekxh.com/daotu-1.png) - -导图效果展示:[点击查看](https://www.geekxh.com/daotu-2.png) - -电子书效果展示: [点击查看](https://www.geekxh.com/book.png) - -网站效果:[点击查看](https://www.geekxh.com/demo.png) - -## 获取方式(任选其一) - -1、通过网站下载(推荐):[下载地址](https://www.geekxh.com/0.0.%E5%AD%A6%E4%B9%A0%E9%A1%BB%E7%9F%A5/03.html) - -2、直接通过 github clone 项目。(因为资源较大,网速会比较慢) - -3、公众号扫码回复 999。 - -## 题解目录 - -* [开始学习](http://www.geekxh.com) - -* [阅读指南](http://www.geekxh.com/c99/hello.html) - -* [1.数组]() - * [01.两个数组的交集(350)](http://www.geekxh.com/1.0.数组系列/001.html) - * [02.最长公共前缀(14)](http://www.geekxh.com/1.0.数组系列/002.html) - * [03.买卖股票的最佳时机(122)](http://www.geekxh.com/1.0.数组系列/003.html) - * [04.旋转数组(189)](http://www.geekxh.com/1.0.数组系列/004.html) - * [05.原地删除(27)](http://www.geekxh.com/1.0.数组系列/005.html) - * [06.加一(66)](http://www.geekxh.com/1.0.数组系列/006.html) - * [07.两数之和(1)](http://www.geekxh.com/1.0.数组系列/007.html) - -* [2.链表]() - * [01.删除链表倒数第N个节点(19)](http://www.geekxh.com/1.1.链表系列/101.html) - * [02.合并两个有序链表(21)](http://www.geekxh.com/1.1.链表系列/102.html) - * [03.环形链表(21)](http://www.geekxh.com/1.1.链表系列/103.html) - -* [3.动态规划]() - * [01.爬楼梯(70)](http://www.geekxh.com/1.2.动态规划系列/201.html) - * [02.最大子序和(53)](http://www.geekxh.com/1.2.动态规划系列/202.html) - * [03.最长上升子序列(300)](http://www.geekxh.com/1.2.动态规划系列/203.html) - * [04.三角形最小路径和(120)](http://www.geekxh.com/1.2.动态规划系列/204.html) - * [05.最小路径和(64)](http://www.geekxh.com/1.2.动态规划系列/205.html) - * [06.打家劫舍(198)](http://www.geekxh.com/1.2.动态规划系列/206.html) - -* [4.字符串]() - * [01.反转字符串(344)](http://www.geekxh.com/1.3.字符串系列/301.html) - * [02.字符串中的第一个唯一字符(387)](http://www.geekxh.com/1.3.字符串系列/302.html) - -* [5.二叉树]() - * [01.最大深度与DFS(104)](http://www.geekxh.com/1.4.二叉树系列/401.html) - * [02.层次遍历与BFS(102)](http://www.geekxh.com/1.4.二叉树系列/402.html) - * [03.BST与其验证(98)](http://www.geekxh.com/1.4.二叉树系列/403.html) - * [04.BST 的查找(700)](http://www.geekxh.com/1.4.二叉树系列/404.html) - * [05.BST 的删除(450)](http://www.geekxh.com/1.4.二叉树系列/405.html) - * [06.平衡二叉树(110)](http://www.geekxh.com/1.4.二叉树系列/406.html) - * [07.完全二叉树(222)](http://www.geekxh.com/1.4.二叉树系列/407.html) - * [08.二叉树的剪枝(814)](http://www.geekxh.com/1.4.二叉树系列/408.html) - -* [6.滑动窗口]() - * [01.滑动窗口最大值(239)](http://www.geekxh.com/1.5.滑动窗口系列/501.html) - * [02.无重复字符的最长子串(3)](http://www.geekxh.com/1.5.滑动窗口系列/502.html) - * [03.找到字符串中所有字母异位词(438)](http://www.geekxh.com/1.5.滑动窗口系列/503.html) - -* [7.博弈论系列]() - * [01.囚徒困境](http://www.geekxh.com/1.6.博弈论系列/601.html) - * [02.辛普森悖论](http://www.geekxh.com/1.6.博弈论系列/602.html) - * [03.红眼睛和蓝眼睛](http://www.geekxh.com/1.6.博弈论系列/603.html) - * [04.海盗分金币](http://www.geekxh.com/1.6.博弈论系列/604.html) - -* [8.位运算系列]() - * [01.使用位运算求和](http://www.geekxh.com/1.8.位运算系列/801.html) - * [02.2的幂(231)](http://www.geekxh.com/1.8.位运算系列/802.html) - * [03.返回一个数二进制中1的个数](http://www.geekxh.com/1.8.位运算系列/803.html) - * [04.只出现一次的数字Ⅱ](http://www.geekxh.com/1.8.位运算系列/804.html) - * [05.缺失数字(268)](http://www.geekxh.com/1.8.位运算系列/805.html) +English version repo and Gitbook is on [english branch](https://github.com/geekxh/hello-algorithm/tree/english) + +> ### **小浩算法是一套针对小白的完整的算法训练流程!** +> +> css +> Statr +> Statr +> +> 目前共包括以下几个步骤: +> - PART_1_算法基础 +> - PART_2_力扣图解 +> - PART_3_大厂面试 +> - PART_4_CS知识汇总 +> +> [目前已支持 PDF 下载](https://www.cxyhub.com/all/programming/7786/) + +
+ +
+ +

+css +Statr +Statr +

+

+ 这也许是东半球最好的算法学习类项目! +

+
+ +> 我自己刷题都是在 lintcode 进行,也会在上面更新题解!下方可以直接进入~ +- [www.lintcode.com](https://www.lintcode.com/?utm_source=tf-github-xh2022) +- [另外推荐一套算法课,北大FB双料大佬的,我之前上过,性价比很高](https://www.jiuzhang.com/course/71/?utm_source=tf-github-xh2022) +- 最后,下方扫码可以领取我准备的刷题模板 +

+ +

+ + +### 正文 + +### PART_1_算法基础 + +主要包括两部分: + +- a:数据结构知识框架:为了大家更好的掌握数据结构和算法,我把基础知识整理成了一张思维导图,包括下面这些知识点: + +> [开始学习](PART_1_算法基础/README.md) + +- b:对常用的数据结构知识进行总结: + +* [链表](PART_1_算法基础/2_基础知识/linked-list/README.md) +* [双向链表](PART_1_算法基础/2_基础知识/doubly-linked-list/README.md) +* [队列](PART_1_算法基础/2_基础知识/queue/README.md) +* [栈](PART_1_算法基础/2_基础知识/stack/README.md) +* [哈希表(散列)](PART_1_算法基础/2_基础知识/hash-table/README.md) +* [堆](PART_1_算法基础/2_基础知识/heap/README.md) +* [优先队列](PART_1_算法基础/2_基础知识/priority-queue/README.md) +* [字典树](PART_1_算法基础/2_基础知识/trie/README.md) +* [树](PART_1_算法基础/2_基础知识/tree/README.md) +* [图](PART_1_算法基础/2_基础知识/graph/README.md) + +### PART_2_力扣图解 + +
显示更多
-* [其他补充题目]() - * [01.螺旋矩阵(54)](http://www.geekxh.com/1.99.其他补充题目/01.html) - * [02.只有两个键的键盘(650)](http://www.geekxh.com/1.99.其他补充题目/02.html) - * [03.24点游戏(679)](http://www.geekxh.com/1.99.其他补充题目/03.html) - * [04.飞机座位分配概率(1227)](http://www.geekxh.com/1.99.其他补充题目/04.html) - * [05.水分子的产生](http://www.geekxh.com/1.99.其他补充题目/05.html) - * [06.救生艇(881)](http://www.geekxh.com/1.99.其他补充题目/06.html) - * [07.救生艇(881)](http://www.geekxh.com/1.99.其他补充题目/07.html) - * [08.灯泡开关(319)](http://www.geekxh.com/1.99.其他补充题目/08.html) - * [09.三门问题](http://www.geekxh.com/1.99.其他补充题目/09.html) - * [10.猜数字游戏(299)](http://www.geekxh.com/1.99.其他补充题目/10.html) - * [11.LRU缓存机制(146)](http://www.geekxh.com/1.99.其他补充题目/11.html) - * [12.最小的k个数](http://www.geekxh.com/1.99.其他补充题目/12.html) - * [13.不同路径](http://www.geekxh.com/1.99.其他补充题目/13.html) - * [14.不同路径-障碍物](http://www.geekxh.com/1.99.其他补充题目/14.html) - * [15.连续n个数的和](http://www.geekxh.com/1.99.其他补充题目/15.html) - * [16.盛水最多的容器](http://www.geekxh.com/1.99.其他补充题目/16.html) - * [17.扑克牌中的顺子容器](http://www.geekxh.com/1.99.其他补充题目/17.html) - * [18.整数拆分(343)](http://www.geekxh.com/1.99.其他补充题目/18.html) - * [19.移动石子到连续(1033)](http://www.geekxh.com/1.99.其他补充题目/19.html) - * [20.Nim游戏(292)](http://www.geekxh.com/1.99.其他补充题目/20.html) - * [21.寻找两个正序数组的中位数(4)](http://www.geekxh.com/1.99.其他补充题目/21.html) - -* [其他:排序专栏]() - * [排序算法](http://www.geekxh.com/2.0.排序系列/0.hello.html) - * [冒泡排序](http://www.geekxh.com/2.0.排序系列/1.bubbleSort.html) - * [选择排序](http://www.geekxh.com/2.0.排序系列/2.selectionSort.html) - * [插入排序](http://www.geekxh.com/2.0.排序系列/3.insertionSort.html) - * [希尔排序](http://www.geekxh.com/2.0.排序系列/4.shellSort.html) - * [归并排序](http://www.geekxh.com/2.0.排序系列/5.mergeSort.html) - * [快速排序](http://www.geekxh.com/2.0.排序系列/6.quickSort.html) - * [堆排序](http://www.geekxh.com/2.0.排序系列/7.heapSort.html) - * [计数排序](http://www.geekxh.com/2.0.排序系列/8.countingSort.html) - * [桶排序](http://www.geekxh.com/2.0.排序系列/9.bucketSort.html) - * [基数排序](http://www.geekxh.com/2.0.排序系列/10.radixSort.html) +> [小浩图解算法题典.PDF【完整版】下载](https://www.cxyhub.com/all/programming/7786/) + +- [开始学习](http://www.geekxh.com) +- [阅读指南](http://www.geekxh.com/c99/hello.html) +- 数组 + - [01.最长公共前缀(14)](http://www.geekxh.com/1.0.数组系列/002.html) + - [02.买卖股票的最佳时机(122)](http://www.geekxh.com/1.0.数组系列/003.html) + - [03.旋转数组(189)](http://www.geekxh.com/1.0.数组系列/004.html) + - [04.原地删除(27)](http://www.geekxh.com/1.0.数组系列/005.html) + - [05.加一(66)](http://www.geekxh.com/1.0.数组系列/006.html) + - [06.两数之和(1)](http://www.geekxh.com/1.0.数组系列/007.html) + - [07.三数之和(15)](http://www.geekxh.com/1.0.数组系列/008.html) + - [08.Z字形变换(6)](http://www.geekxh.com/1.0.数组系列/009.html) +- 链表 + - [01.删除链表倒数第N个节点(19)](http://www.geekxh.com/1.1.链表系列/101.html) + - [02.合并两个有序链表(21)](http://www.geekxh.com/1.1.链表系列/102.html) + - [03.环形链表(141)](http://www.geekxh.com/1.1.链表系列/103.html) + - [04.两数相加(2)](http://www.geekxh.com/1.1.链表系列/104.html) +- 动态规划 + - [01.爬楼梯(70)](http://www.geekxh.com/1.2.动态规划系列/201.html) + - [02.最大子序和(53)](http://www.geekxh.com/1.2.动态规划系列/202.html) + - [03.最长上升子序列(300)](http://www.geekxh.com/1.2.动态规划系列/203.html) + - [04.三角形最小路径和(120)](http://www.geekxh.com/1.2.动态规划系列/204.html) + - [05.最小路径和(64)](http://www.geekxh.com/1.2.动态规划系列/205.html) + - [06.打家劫舍(198)](http://www.geekxh.com/1.2.动态规划系列/206.html) +- 字符串 + - [01.反转字符串(344)](http://www.geekxh.com/1.3.字符串系列/301.html) + - [02.字符串中的第一个唯一字符(387)](http://www.geekxh.com/1.3.字符串系列/302.html) + - [03.实现 Sunday 匹配](http://www.geekxh.com/1.3.字符串系列/303.html) + - [04.大数打印](http://www.geekxh.com/1.3.字符串系列/304.html) + - [05.验证回文串(125)](http://www.geekxh.com/1.3.字符串系列/305.html) + - [06.KMP 精讲](http://www.geekxh.com/1.3.字符串系列/306.html) + - [07.旋转字符串(796)](http://www.geekxh.com/1.3.字符串系列/307.html) + - [08.最后一个单词的长度(58)](http://www.geekxh.com/1.3.字符串系列/308.html) +- 二叉树 + - [01.最大深度与DFS(104)](http://www.geekxh.com/1.4.二叉树系列/401.html) + - [02.层次遍历与BFS(102)](http://www.geekxh.com/1.4.二叉树系列/402.html) + - [03.BST与其验证(98)](http://www.geekxh.com/1.4.二叉树系列/403.html) + - [04.BST 的查找(700)](http://www.geekxh.com/1.4.二叉树系列/404.html) + - [05.BST 的删除(450)](http://www.geekxh.com/1.4.二叉树系列/405.html) + - [06.平衡二叉树(110)](http://www.geekxh.com/1.4.二叉树系列/406.html) + - [07.完全二叉树(222)](http://www.geekxh.com/1.4.二叉树系列/407.html) + - [08.二叉树的剪枝(814)](http://www.geekxh.com/1.4.二叉树系列/408.html) +- 滑动窗口 + - [01.滑动窗口最大值(239)](http://www.geekxh.com/1.5.滑动窗口系列/501.html) + - [02.无重复字符的最长子串(3)](http://www.geekxh.com/1.5.滑动窗口系列/502.html) + - [03.找到字符串中所有字母异位词(438)](http://www.geekxh.com/1.5.滑动窗口系列/503.html) + - [04.和为s的连续正数序列](http://www.geekxh.com/1.5.滑动窗口系列/504.html) +- 博弈论 + - [01.囚徒困境](http://www.geekxh.com/1.6.博弈论系列/601.html) + - [02.辛普森悖论](http://www.geekxh.com/1.6.博弈论系列/602.html) + - [03.红眼睛和蓝眼睛](http://www.geekxh.com/1.6.博弈论系列/603.html) + - [04.海盗分金币](http://www.geekxh.com/1.6.博弈论系列/604.html) + - [05.智猪博弈](http://www.geekxh.com/1.6.博弈论系列/605.html) + - [06.生男生女的问题](http://www.geekxh.com/1.6.博弈论系列/606.html) + - [07.硬币问题](http://www.geekxh.com/1.6.博弈论系列/607.html) + - [08.画圈圈的问题](http://www.geekxh.com/1.6.博弈论系列/608.html) + - [09.巧克力问题](http://www.geekxh.com/1.6.博弈论系列/609.html) + - [10.大鱼和小鱼的问题](http://www.geekxh.com/1.6.博弈论系列/610.html) +- 位运算 + - [01.使用位运算求和](http://www.geekxh.com/1.8.位运算系列/801.html) + - [02.2的幂(231)](http://www.geekxh.com/1.8.位运算系列/802.html) + - [03.返回一个数二进制中1的个数](http://www.geekxh.com/1.8.位运算系列/803.html) + - [04.只出现一次的数字](http://www.geekxh.com/1.8.位运算系列/804.html) + - [05.只出现一次的数字Ⅱ](http://www.geekxh.com/1.8.位运算系列/805.html) + - [06.缺失数字(268)](http://www.geekxh.com/1.8.位运算系列/806.html) +- 二分法 + - [01.爱吃香蕉的珂珂(875)](http://www.geekxh.com/1.9.二分法系列/901.html) + - [02.x的平方根(69)](http://www.geekxh.com/1.9.二分法系列/902.html) + - [03.x的平方根(69)](http://www.geekxh.com/1.9.二分法系列/903.html) + - [04.旋转排序数组中的最小值Ⅰ(153)](http://www.geekxh.com/1.9.二分法系列/904.html) + - [05.旋转排序数组中的最小值Ⅱ(154)](http://www.geekxh.com/1.9.二分法系列/905.html) + - [06.供暖器(475)](http://www.geekxh.com/1.9.二分法系列/906.html) +- 其他高频面试题目 + - [01.螺旋矩阵(54)](http://www.geekxh.com/1.99.其他补充题目/01.html) + - [02.只有两个键的键盘(650)](http://www.geekxh.com/1.99.其他补充题目/02.html) + - [03.24点游戏(679)](http://www.geekxh.com/1.99.其他补充题目/03.html) + - [04.飞机座位分配概率(1227)](http://www.geekxh.com/1.99.其他补充题目/04.html) + - [05.水分子的产生](http://www.geekxh.com/1.99.其他补充题目/05.html) + - [06.救生艇(881)](http://www.geekxh.com/1.99.其他补充题目/06.html) + - [07.救生艇(881)](http://www.geekxh.com/1.99.其他补充题目/07.html) + - [08.灯泡开关(319)](http://www.geekxh.com/1.99.其他补充题目/08.html) + - [09.三门问题](http://www.geekxh.com/1.99.其他补充题目/09.html) + - [10.猜数字游戏(299)](http://www.geekxh.com/1.99.其他补充题目/10.html) + - [11.LRU缓存机制(146)](http://www.geekxh.com/1.99.其他补充题目/11.html) + - [12.最小的k个数](http://www.geekxh.com/1.99.其他补充题目/12.html) + - [13.不同路径](http://www.geekxh.com/1.99.其他补充题目/13.html) + - [14.不同路径-障碍物](http://www.geekxh.com/1.99.其他补充题目/14.html) + - [15.连续n个数的和](http://www.geekxh.com/1.99.其他补充题目/15.html) + - [16.盛水最多的容器](http://www.geekxh.com/1.99.其他补充题目/16.html) + - [17.扑克牌中的顺子容器](http://www.geekxh.com/1.99.其他补充题目/17.html) + - [18.整数拆分(343)](http://www.geekxh.com/1.99.其他补充题目/18.html) + - [19.移动石子到连续(1033)](http://www.geekxh.com/1.99.其他补充题目/19.html) + - [20.Nim游戏(292)](http://www.geekxh.com/1.99.其他补充题目/20.html) + - [21.寻找两个正序数组的中位数(4)](http://www.geekxh.com/1.99.其他补充题目/21.html) + - [22.第k个最大元素(215)](http://www.geekxh.com/1.99.其他补充题目/22.html) + - [23.镜面反射(858)](http://www.geekxh.com/1.99.其他补充题目/23.html) + - [25.整数转罗马数字(12)](http://www.geekxh.com/1.99.其他补充题目/25.html) + - [26.荷兰国旗问题](http://www.geekxh.com/1.99.其他补充题目/26.html) + - [27.六九问题](http://www.geekxh.com/1.99.其他补充题目/27.html) + - [28.有效的数独](http://www.geekxh.com/1.99.其他补充题目/28.html) + - [29.费米估算](http://www.geekxh.com/1.99.其他补充题目/29.html) + - [30.分发饼干](http://www.geekxh.com/1.99.其他补充题目/30.html) + - [31.生命游戏(289)](http://www.geekxh.com/1.99.其他补充题目/31.html) + - [32.搜索二维矩阵(74)](http://www.geekxh.com/1.99.其他补充题目/32.html) + - [33.子集(78)](http://www.geekxh.com/1.99.其他补充题目/33.html) + - [34.面试中的智力题](http://www.geekxh.com/1.99.其他补充题目/34.html) + - [35.旋转图像(48)](http://www.geekxh.com/1.99.其他补充题目/51.html) + +
+ +### PART_3_大厂面试(更新中) + +
显示更多
+ +考虑到现在网上面经实在太杂,很多都冠以 “BAT” 之名,重复率、错误率都非常高。所以我尽可能的挑选出了我认为比较好的 50 篇面经(基本不重复),并对内容做了分类。 + +建议大家把这个页面收藏起来,防止后面需要的时候找不到了。(整理了近40个小时,跪求star~) + +- [系统设计-长文(非常建议读,我自己也看了)](https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md) +- [后端-社招(两年): 蚂蚁 头条 PingCAP](https://github.com/aylei/interview) +- [后端-京东-JAVA](https://www.cnblogs.com/wupeixuan/p/8908524.html#%E4%B8%80%E3%80%81java) +- [后端-百度-高并发抢红包设计](https://github.com/xbox1994/Java-Interview/blob/master/MD/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1-%E9%AB%98%E5%B9%B6%E5%8F%91%E6%8A%A2%E7%BA%A2%E5%8C%85.md) +- [NLP(机器学习)-百度](https://www.e-learn.cn/topic/95743) + +
+ + +### PART_4_CS_知识汇总(TODO) + +### License + +本项目除部分引用开源技术文档的内容外,大部分为本人原创。欢迎任何以学习为目的的传播,但未授权任何平台进行转载! diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/10.Python14\345\274\240\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" b/git similarity index 100% rename from "\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/10.Python14\345\274\240\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" rename to git diff --git a/hello-algorithm.iml b/hello-algorithm.iml new file mode 100644 index 00000000..47ffbb0a --- /dev/null +++ b/hello-algorithm.iml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/01.html" "b/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/01.html" deleted file mode 100644 index 54c8f156..00000000 --- "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/01.html" +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - 小浩算法 | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 2:55:23 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/02.html" "b/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/02.html" deleted file mode 100644 index b4ca351d..00000000 --- "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/02.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 阅读指南 | 小浩算法 - - - - - - - -
文章修订于: 6/30/2020, 10:44:42 AM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/021.html" "b/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/021.html" deleted file mode 100644 index e2f3158d..00000000 --- "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/021.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 指导学习(一) | 小浩算法 - - - - - - - -
文章修订于: 7/13/2020, 12:24:08 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/022.html" "b/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/022.html" deleted file mode 100644 index 151939ce..00000000 --- "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/022.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 指导学习(二) | 小浩算法 - - - - - - - -
文章修订于: 7/13/2020, 12:24:08 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/023.html" "b/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/023.html" deleted file mode 100644 index 369ba463..00000000 --- "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/023.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 指导学习(三) | 小浩算法 - - - - - - - -
文章修订于: 7/13/2020, 12:24:08 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/03.html" "b/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/03.html" deleted file mode 100644 index a42ef7f6..00000000 --- "a/learning/.vuepress/dist/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/03.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 资源下载 | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 3:07:35 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001.html" "b/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001.html" deleted file mode 100644 index 829248a4..00000000 --- "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/001.html" +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - 两个数组的交集(350) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002.html" "b/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002.html" deleted file mode 100644 index 768f87cf..00000000 --- "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002.html" +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - 最长公共前缀(14) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/003.html" "b/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/003.html" deleted file mode 100644 index 0564e799..00000000 --- "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/003.html" +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - 买卖股票的最佳时机(122) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/004.html" "b/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/004.html" deleted file mode 100644 index 761b726e..00000000 --- "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/004.html" +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - 旋转数组(189) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/005.html" "b/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/005.html" deleted file mode 100644 index 99d37ec6..00000000 --- "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/005.html" +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - 原地删除(27) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/006.html" "b/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/006.html" deleted file mode 100644 index 43f0fe10..00000000 --- "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/006.html" +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - 加一(66) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007.html" "b/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007.html" deleted file mode 100644 index 947acb59..00000000 --- "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/007.html" +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - 两数之和(1) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008.html" "b/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008.html" deleted file mode 100644 index 11c34269..00000000 --- "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/008.html" +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - 三数之和(15) | 小浩算法 - - - - - - - -
文章修订于: 7/6/2020, 10:20:58 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009.html" "b/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009.html" deleted file mode 100644 index af9967f9..00000000 --- "a/learning/.vuepress/dist/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/009.html" +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - Z字形变换(6) | 小浩算法 - - - - - - - -
文章修订于: 7/10/2020, 10:21:53 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101.html" "b/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101.html" deleted file mode 100644 index c1e84c29..00000000 --- "a/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/101.html" +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - 删除链表倒数第N个节点(19) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102.html" "b/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102.html" deleted file mode 100644 index 3ddbbad7..00000000 --- "a/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/102.html" +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - 合并两个有序链表(21) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103.html" "b/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103.html" deleted file mode 100644 index 06d6c9a6..00000000 --- "a/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/103.html" +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - 环形链表(21) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104.html" "b/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104.html" deleted file mode 100644 index 129c18f7..00000000 --- "a/learning/.vuepress/dist/1.1.\351\223\276\350\241\250\347\263\273\345\210\227/104.html" +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - 两数相加(2) | 小浩算法 - - - - - - - -
文章修订于: 7/10/2020, 10:21:53 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201.html" "b/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201.html" deleted file mode 100644 index 1e299004..00000000 --- "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/201.html" +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - 爬楼梯(70) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202.html" "b/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202.html" deleted file mode 100644 index 0a1065a8..00000000 --- "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/202.html" +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - 最大子序和(53) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203.html" "b/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203.html" deleted file mode 100644 index 07ae3724..00000000 --- "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/203.html" +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - 最长上升子序列(300) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204.html" "b/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204.html" deleted file mode 100644 index ce3ccda6..00000000 --- "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/204.html" +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - 三角形最小路径和(120) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205.html" "b/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205.html" deleted file mode 100644 index 3bd7c513..00000000 --- "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/205.html" +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - 最小路径和(64) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206.html" "b/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206.html" deleted file mode 100644 index a59695f4..00000000 --- "a/learning/.vuepress/dist/1.2.\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/206.html" +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - 打家劫舍(198) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301.html" "b/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301.html" deleted file mode 100644 index 2544d189..00000000 --- "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/301.html" +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - 反转字符串(301) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302.html" "b/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302.html" deleted file mode 100644 index 2a1b7268..00000000 --- "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/302.html" +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - 字符串中的第一个唯一字符(387) | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303.html" "b/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303.html" deleted file mode 100644 index 04da141d..00000000 --- "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/303.html" +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - 实现 Sunday 匹配 | 小浩算法 - - - - - - - -
文章修订于: 7/8/2020, 10:18:05 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304.html" "b/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304.html" deleted file mode 100644 index 4eae2802..00000000 --- "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/304.html" +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - 大数打印 | 小浩算法 - - - - - - - -
文章修订于: 7/8/2020, 10:18:05 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305.html" "b/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305.html" deleted file mode 100644 index 36b6898a..00000000 --- "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/305.html" +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - 验证回文串(125) | 小浩算法 - - - - - - - -
文章修订于: 7/10/2020, 10:21:53 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306.html" "b/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306.html" deleted file mode 100644 index a43dc100..00000000 --- "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/306.html" +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - KMP(上篇) | 小浩算法 - - - - - - - -
文章修订于: 7/11/2020, 10:13:00 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307.html" "b/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307.html" deleted file mode 100644 index acd3e1ff..00000000 --- "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/307.html" +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - 旋转字符串(796) | 小浩算法 - - - - - - - -
文章修订于: 7/12/2020, 9:17:31 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308.html" "b/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308.html" deleted file mode 100644 index f4165332..00000000 --- "a/learning/.vuepress/dist/1.3.\345\255\227\347\254\246\344\270\262\347\263\273\345\210\227/308.html" +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - 最后一个单词的长度(58) | 小浩算法 - - - - - - - -
文章修订于: 7/12/2020, 9:17:31 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401.html" "b/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401.html" deleted file mode 100644 index cedee752..00000000 --- "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/401.html" +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - 最大深度与DFS(104) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402.html" "b/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402.html" deleted file mode 100644 index 0a524909..00000000 --- "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/402.html" +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - 层次遍历与BFS(102) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403.html" "b/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403.html" deleted file mode 100644 index eb0f914f..00000000 --- "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/403.html" +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - BST与其验证(98) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404.html" "b/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404.html" deleted file mode 100644 index fe8777ce..00000000 --- "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/404.html" +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - BST 的查找(700) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405.html" "b/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405.html" deleted file mode 100644 index 4e881633..00000000 --- "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/405.html" +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - BST 的删除(450) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406.html" "b/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406.html" deleted file mode 100644 index 26e7ed80..00000000 --- "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/406.html" +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - 平衡二叉树(110) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407.html" "b/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407.html" deleted file mode 100644 index b4a7722e..00000000 --- "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/407.html" +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - 完全二叉树(222) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408.html" "b/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408.html" deleted file mode 100644 index c9e4c667..00000000 --- "a/learning/.vuepress/dist/1.4.\344\272\214\345\217\211\346\240\221\347\263\273\345\210\227/408.html" +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - 二叉树的剪枝(814) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1.html" "b/learning/.vuepress/dist/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1.html" deleted file mode 100644 index b937fab3..00000000 --- "a/learning/.vuepress/dist/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1.html" +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - 全排列算法 | 小浩算法 - - - - - - - -
文章修订于: 7/13/2020, 12:24:08 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501.html" "b/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501.html" deleted file mode 100644 index 72596a6a..00000000 --- "a/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/501.html" +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - 滑动窗口最大值(239) | 小浩算法 - - - - - - - -
文章修订于: 6/14/2020, 12:10:10 AM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502.html" "b/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502.html" deleted file mode 100644 index 2248ece3..00000000 --- "a/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/502.html" +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - 无重复字符的最长子串(3) | 小浩算法 - - - - - - - -
文章修订于: 6/14/2020, 12:10:10 AM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503.html" "b/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503.html" deleted file mode 100644 index 153c50ef..00000000 --- "a/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/503.html" +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - 字母异位词(438) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504.html" "b/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504.html" deleted file mode 100644 index e27adf08..00000000 --- "a/learning/.vuepress/dist/1.5.\346\273\221\345\212\250\347\252\227\345\217\243\347\263\273\345\210\227/504.html" +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - 和为s的连续正数序列 | 小浩算法 - - - - - - - -
文章修订于: 7/8/2020, 10:18:05 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601.html" "b/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601.html" deleted file mode 100644 index 8af0e086..00000000 --- "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/601.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 囚徒困境 | 小浩算法 - - - - - - - -
文章修订于: 6/14/2020, 6:33:53 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602.html" "b/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602.html" deleted file mode 100644 index 34c05a18..00000000 --- "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/602.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 辛普森悖论 | 小浩算法 - - - - - - - -
文章修订于: 6/15/2020, 6:22:02 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/603.html" "b/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/603.html" deleted file mode 100644 index a967757e..00000000 --- "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/603.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 红眼睛和蓝眼睛 | 小浩算法 - - - - - - - -
文章修订于: 6/15/2020, 6:22:02 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/604.html" "b/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/604.html" deleted file mode 100644 index 64b9dd7d..00000000 --- "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/604.html" +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - 海盗分金币 | 小浩算法 - - - - - - - -
文章修订于: 6/14/2020, 6:33:53 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605.html" "b/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605.html" deleted file mode 100644 index 2a225f3d..00000000 --- "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/605.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 智猪博弈 | 小浩算法 - - - - - - - -
文章修订于: 7/3/2020, 9:35:10 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606.html" "b/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606.html" deleted file mode 100644 index 3dfadd7d..00000000 --- "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/606.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 生男生女的问题 | 小浩算法 - - - - - - - -
文章修订于: 7/6/2020, 10:20:58 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607.html" "b/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607.html" deleted file mode 100644 index d27238f7..00000000 --- "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/607.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 硬币问题 | 小浩算法 - - - - - - - -
文章修订于: 7/6/2020, 10:20:58 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608.html" "b/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608.html" deleted file mode 100644 index aabeb30d..00000000 --- "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/608.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 画圈圈的问题 | 小浩算法 - - - - - - - -
文章修订于: 7/6/2020, 10:20:58 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609.html" "b/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609.html" deleted file mode 100644 index df22faca..00000000 --- "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/609.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 巧克力问题 | 小浩算法 - - - - - - - -
文章修订于: 7/6/2020, 10:20:58 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610.html" "b/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610.html" deleted file mode 100644 index abfbdf1a..00000000 --- "a/learning/.vuepress/dist/1.6.\345\215\232\345\274\210\350\256\272\347\263\273\345\210\227/610.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 大鱼和小鱼的问题 | 小浩算法 - - - - - - - -
文章修订于: 7/8/2020, 10:18:05 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701.html" "b/learning/.vuepress/dist/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701.html" deleted file mode 100644 index 59eec797..00000000 --- "a/learning/.vuepress/dist/1.7.\346\216\222\345\272\217\347\261\273\351\242\230\347\233\256/701.html" +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - 按奇偶排序数组(905) | 小浩算法 - - - - - - - -
文章修订于: 6/14/2020, 6:33:53 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801.html" "b/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801.html" deleted file mode 100644 index ed7e3987..00000000 --- "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/801.html" +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - 使用位运算求和 | 小浩算法 - - - - - - - -
文章修订于: 6/28/2020, 6:40:28 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802.html" "b/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802.html" deleted file mode 100644 index aaebcb31..00000000 --- "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/802.html" +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - 2的幂(231) | 小浩算法 - - - - - - - -
文章修订于: 6/28/2020, 6:40:28 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803.html" "b/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803.html" deleted file mode 100644 index 83500c22..00000000 --- "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/803.html" +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - 返回二进制中1的个数(191) | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 12:09:22 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804.html" "b/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804.html" deleted file mode 100644 index bfc373a6..00000000 --- "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/804.html" +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - 只出现一次的数字(136) | 小浩算法 - - - - - - - -
文章修订于: 6/28/2020, 6:40:28 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805.html" "b/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805.html" deleted file mode 100644 index 5a364d05..00000000 --- "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/805.html" +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - 只出现一次的数字Ⅱ(137) | 小浩算法 - - - - - - - -
文章修订于: 6/30/2020, 5:47:11 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806.html" "b/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806.html" deleted file mode 100644 index 16e03e3b..00000000 --- "a/learning/.vuepress/dist/1.8.\344\275\215\350\277\220\347\256\227\347\263\273\345\210\227/806.html" +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - 缺失数字(268) | 小浩算法 - - - - - - - -
文章修订于: 6/30/2020, 5:47:11 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901.html" "b/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901.html" deleted file mode 100644 index ceb9bf7f..00000000 --- "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/901.html" +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - 爱吃香蕉的珂珂(875) | 小浩算法 - - - - - - - -
文章修订于: 6/30/2020, 5:47:11 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902.html" "b/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902.html" deleted file mode 100644 index a29162dd..00000000 --- "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/902.html" +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - x的平方根(69) | 小浩算法 - - - - - - - -
文章修订于: 6/30/2020, 5:47:11 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903.html" "b/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903.html" deleted file mode 100644 index ef232d26..00000000 --- "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/903.html" +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - 第一个错误的版本(287) | 小浩算法 - - - - - - - -
文章修订于: 6/30/2020, 5:47:11 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904.html" "b/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904.html" deleted file mode 100644 index 5cac5c80..00000000 --- "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/904.html" +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - 旋转排序数组中的最小值Ⅰ(153) | 小浩算法 - - - - - - - -
文章修订于: 7/6/2020, 10:20:58 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905.html" "b/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905.html" deleted file mode 100644 index 8a22e284..00000000 --- "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/905.html" +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - 旋转排序数组中的最小值Ⅱ(154) | 小浩算法 - - - - - - - -
文章修订于: 7/5/2020, 10:02:32 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906.html" "b/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906.html" deleted file mode 100644 index 0a8abe28..00000000 --- "a/learning/.vuepress/dist/1.9.\344\272\214\345\210\206\346\263\225\347\263\273\345\210\227/906.html" +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - 供暖器(475) | 小浩算法 - - - - - - - -
文章修订于: 7/6/2020, 10:20:58 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01.html" deleted file mode 100644 index a5a6eb1d..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01.html" +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - 螺旋矩阵Ⅰ(54) | 小浩算法 - - - - - - - -
文章修订于: 7/12/2020, 9:17:31 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02.html" deleted file mode 100644 index d098bfc0..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02.html" +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - 只有两个键的键盘(650) | 小浩算法 - - - - - - - -
文章修订于: 6/16/2020, 9:13:23 AM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03.html" deleted file mode 100644 index 9f900415..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03.html" +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - 24点游戏(679) | 小浩算法 - - - - - - - -
文章修订于: 6/16/2020, 9:13:23 AM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04.html" deleted file mode 100644 index 9989d84e..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/04.html" +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - 飞机座位分配概率(1227) | 小浩算法 - - - - - - - -
文章修订于: 6/16/2020, 9:13:23 AM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/05.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/05.html" deleted file mode 100644 index 97649836..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/05.html" +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - 水分子的产生 | 小浩算法 - - - - - - - -
文章修订于: 6/16/2020, 4:12:47 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/06.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/06.html" deleted file mode 100644 index 0fc2ed64..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/06.html" +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - 救生艇(881) | 小浩算法 - - - - - - - -
文章修订于: 6/16/2020, 4:12:47 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07.html" deleted file mode 100644 index 871a6c35..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/07.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 25匹马的经典问题 | 小浩算法 - - - - - - - -
文章修订于: 6/16/2020, 4:12:47 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08.html" deleted file mode 100644 index 6516bccf..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/08.html" +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - 灯泡开关(319) | 小浩算法 - - - - - - - -
文章修订于: 6/18/2020, 4:13:04 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09.html" deleted file mode 100644 index 50979078..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/09.html" +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - 三门问题 | 小浩算法 - - - - - - - -
文章修订于: 6/18/2020, 4:13:04 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10.html" deleted file mode 100644 index b5868ba5..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/10.html" +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - 猜数字游戏(299) | 小浩算法 - - - - - - - -
文章修订于: 6/18/2020, 4:13:04 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11.html" deleted file mode 100644 index 3b7fd2e0..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/11.html" +++ /dev/null @@ -1,357 +0,0 @@ - - - - - - LRU缓存机制(146) | 小浩算法 - - - - - - - -
文章修订于: 6/18/2020, 8:09:25 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12.html" deleted file mode 100644 index 3f17221f..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/12.html" +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - 最小的k个数 | 小浩算法 - - - - - - - -
文章修订于: 6/18/2020, 8:09:25 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13.html" deleted file mode 100644 index b1f4db20..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/13.html" +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - 不同路径 | 小浩算法 - - - - - - - -
文章修订于: 6/18/2020, 8:09:25 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14.html" deleted file mode 100644 index 51a8c554..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/14.html" +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - 不同路径 - 障碍物 | 小浩算法 - - - - - - - -
文章修订于: 6/18/2020, 8:09:25 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15.html" deleted file mode 100644 index 2a617988..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/15.html" +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - 伪蒙特卡洛 | 小浩算法 - - - - - - - -
文章修订于: 6/28/2020, 7:49:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16.html" deleted file mode 100644 index 2b247337..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/16.html" +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - 盛最多水的容器 | 小浩算法 - - - - - - - -
文章修订于: 6/19/2020, 9:56:29 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17.html" deleted file mode 100644 index 1941bc67..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/17.html" +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - 扑克牌中的顺子容器 | 小浩算法 - - - - - - - -
文章修订于: 6/19/2020, 9:56:29 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18.html" deleted file mode 100644 index a79ace34..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/18.html" +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - 整数拆分(343) | 小浩算法 - - - - - - - -
文章修订于: 6/19/2020, 9:56:29 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19.html" deleted file mode 100644 index 5b60eb6c..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/19.html" +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - 移动石子直到连续(1033) | 小浩算法 - - - - - - - -
文章修订于: 6/20/2020, 9:24:13 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20.html" deleted file mode 100644 index 3bdde8df..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/20.html" +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - Nim 游戏(292) | 小浩算法 - - - - - - - -
文章修订于: 6/20/2020, 9:24:13 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21.html" deleted file mode 100644 index a177a956..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/21.html" +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - 寻找两个正序数组的中位数(292) | 小浩算法 - - - - - - - -
文章修订于: 6/20/2020, 9:24:13 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22.html" deleted file mode 100644 index c4d6f80e..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/22.html" +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - 第k个最大元素(215) | 小浩算法 - - - - - - - -
文章修订于: 7/3/2020, 9:35:10 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23.html" deleted file mode 100644 index 90a90701..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/23.html" +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - 镜面反射(858) | 小浩算法 - - - - - - - -
文章修订于: 7/10/2020, 10:21:53 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25.html" deleted file mode 100644 index c912b76b..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/25.html" +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - 整数转罗马数字(12) | 小浩算法 - - - - - - - -
文章修订于: 7/10/2020, 10:21:53 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26.html" deleted file mode 100644 index e94729b8..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/26.html" +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - 荷兰国旗问题 | 小浩算法 - - - - - - - -
文章修订于: 7/10/2020, 10:21:53 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27.html" deleted file mode 100644 index dc9fcd0f..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/27.html" +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - 六九问题 | 小浩算法 - - - - - - - -
文章修订于: 7/10/2020, 10:21:53 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28.html" deleted file mode 100644 index 3421af7b..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/28.html" +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - 有效的数独 | 小浩算法 - - - - - - - -
文章修订于: 7/11/2020, 12:12:34 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29.html" deleted file mode 100644 index be92cade..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/29.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 费米估算 | 小浩算法 - - - - - - - -
文章修订于: 7/11/2020, 10:13:00 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30.html" deleted file mode 100644 index 5b0716e4..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/30.html" +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - 分发饼干 | 小浩算法 - - - - - - - -
文章修订于: 7/11/2020, 10:13:00 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31.html" deleted file mode 100644 index 4222c1fe..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/31.html" +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - 生命游戏(289) | 小浩算法 - - - - - - - -
文章修订于: 7/11/2020, 10:13:00 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32.html" deleted file mode 100644 index f7847536..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/32.html" +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - 搜索二维矩阵(74) | 小浩算法 - - - - - - - -
文章修订于: 7/12/2020, 9:17:31 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33.html" deleted file mode 100644 index a1863e0c..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/33.html" +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - 子集(78) | 小浩算法 - - - - - - - -
文章修订于: 7/12/2020, 9:17:31 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34.html" deleted file mode 100644 index eaa0ae2a..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/34.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 面试中的智力题 | 小浩算法 - - - - - - - -
文章修订于: 7/12/2020, 9:17:31 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50.html" deleted file mode 100644 index 245f8e5f..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/50.html" +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 图的基础知识 | 小浩算法 - - - - - - - -
文章修订于: 7/11/2020, 10:13:00 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51.html" deleted file mode 100644 index a0521508..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/51.html" +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - 旋转图像(48) | 小浩算法 - - - - - - - -
文章修订于: 7/11/2020, 10:13:00 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52.html" "b/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52.html" deleted file mode 100644 index e01fe1e8..00000000 --- "a/learning/.vuepress/dist/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/52.html" +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - 螺旋矩阵Ⅱ(59) | 小浩算法 - - - - - - - -
文章修订于: 7/12/2020, 9:17:31 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/0.hello.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/0.hello.html" deleted file mode 100644 index 5012134d..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/0.hello.html" +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - 排序专栏 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 5:04:59 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/1.bubbleSort.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/1.bubbleSort.html" deleted file mode 100644 index 74121654..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/1.bubbleSort.html" +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - 冒泡排序 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 4:24:27 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/10.radixSort.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/10.radixSort.html" deleted file mode 100644 index 2bc1645c..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/10.radixSort.html" +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - 基数排序 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 4:24:27 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/2.selectionSort.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/2.selectionSort.html" deleted file mode 100644 index 442df158..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/2.selectionSort.html" +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - 选择排序 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 4:24:27 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/3.insertionSort.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/3.insertionSort.html" deleted file mode 100644 index d4a2e139..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/3.insertionSort.html" +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - 插入排序 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 4:24:27 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/4.shellSort.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/4.shellSort.html" deleted file mode 100644 index 05619843..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/4.shellSort.html" +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - 希尔排序 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 4:24:27 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/5.mergeSort.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/5.mergeSort.html" deleted file mode 100644 index 8c20a9d3..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/5.mergeSort.html" +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - 归并排序 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 4:24:27 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/6.quickSort.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/6.quickSort.html" deleted file mode 100644 index 74a20bf7..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/6.quickSort.html" +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - 快速排序 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 4:24:27 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/7.heapSort.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/7.heapSort.html" deleted file mode 100644 index 23e5fc5c..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/7.heapSort.html" +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - 堆排序 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 4:24:27 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/8.countingSort.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/8.countingSort.html" deleted file mode 100644 index af696a0a..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/8.countingSort.html" +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - 计数排序 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 4:24:27 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/9.bucketSort.html" "b/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/9.bucketSort.html" deleted file mode 100644 index 1accf895..00000000 --- "a/learning/.vuepress/dist/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/9.bucketSort.html" +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - 桶排序 | 小浩算法 - - - - - - - -
文章修订于: 6/12/2020, 4:24:27 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git a/learning/.vuepress/dist/404.html b/learning/.vuepress/dist/404.html deleted file mode 100644 index e2376d1b..00000000 --- a/learning/.vuepress/dist/404.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - 小浩算法 - - - - - - - -

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git a/learning/.vuepress/dist/assets/css/0.styles.9ca2b61f.css b/learning/.vuepress/dist/assets/css/0.styles.9ca2b61f.css deleted file mode 100644 index a207fc3d..00000000 --- a/learning/.vuepress/dist/assets/css/0.styles.9ca2b61f.css +++ /dev/null @@ -1,10 +0,0 @@ -.medium-zoom-overlay{z-index:100}.medium-zoom-overlay~img{z-index:101}.navbar .logo[data-v-44bd5a18]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}.back-to-ceiling[data-v-44bd5a18]{background-color:#fff;background-color:var(--background-color);box-shadow:0 1px 6px 0 rgba(0,0,0,.2);box-shadow:var(--box-shadow);position:fixed;display:inline-block;text-align:center;cursor:pointer}.back-to-ceiling[data-v-44bd5a18]::hover{background:#d5dbe7}.back-to-ceiling .icon[data-v-44bd5a18]{position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;width:26px;height:26px;fill:#0074af}.fade-enter-active[data-v-44bd5a18],.fade-leave-active[data-v-44bd5a18]{transition:all .5s}.fade-enter[data-v-44bd5a18],.fade-leave-to[data-v-44bd5a18]{opacity:0;transform:translateY(120px)}.navbar .logo[data-v-d48f4d20]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}#loader-wrapper[data-v-d48f4d20]{height:100vh;width:100vw;background:#fff;background:var(--background-color)}#loader-wrapper .loader-main[data-v-d48f4d20]{position:fixed;width:120px;height:50px;top:45%;left:50%;z-index:555;transform:translate(-50%)}#loader-wrapper .loader-main div[data-v-d48f4d20]:nth-child(2){-webkit-animation:pacman-balls-data-v-d48f4d20 1s linear 0s infinite;animation:pacman-balls-data-v-d48f4d20 1s linear 0s infinite}#loader-wrapper .loader-main div[data-v-d48f4d20]:nth-child(3){-webkit-animation:pacman-balls-data-v-d48f4d20 1s linear .33s infinite;animation:pacman-balls-data-v-d48f4d20 1s linear .33s infinite}#loader-wrapper .loader-main div[data-v-d48f4d20]:nth-child(4){-webkit-animation:pacman-balls-data-v-d48f4d20 1s linear .66s infinite;animation:pacman-balls-data-v-d48f4d20 1s linear .66s infinite}#loader-wrapper .loader-main div[data-v-d48f4d20]:nth-child(5){-webkit-animation:pacman-balls-data-v-d48f4d20 1s linear .99s infinite;animation:pacman-balls-data-v-d48f4d20 1s linear .99s infinite}#loader-wrapper .loader-main div[data-v-d48f4d20]:first-of-type{width:0;height:0;border:25px solid #0074af;border-right-color:transparent;border-radius:25px;-webkit-animation:rotate_pacman_half_up-data-v-d48f4d20 .5s 0s infinite;animation:rotate_pacman_half_up-data-v-d48f4d20 .5s 0s infinite}#loader-wrapper .loader-main div[data-v-d48f4d20]:nth-child(2){width:0;height:0;border:25px solid #0074af;border-right-color:transparent;border-radius:25px;-webkit-animation:rotate_pacman_half_down-data-v-d48f4d20 .5s 0s infinite;animation:rotate_pacman_half_down-data-v-d48f4d20 .5s 0s infinite;margin-top:-50px}#loader-wrapper .loader-main div[data-v-d48f4d20]:nth-child(3),#loader-wrapper .loader-main div[data-v-d48f4d20]:nth-child(4),#loader-wrapper .loader-main div[data-v-d48f4d20]:nth-child(5),#loader-wrapper .loader-main div[data-v-d48f4d20]:nth-child(6){background-color:#0074af;width:15px;height:15px;border-radius:100%;margin:2px;width:10px;height:10px;position:absolute;transform:translateY(-6.25px);top:25px;left:100px}#loader-wrapper .title[data-v-d48f4d20]{margin:8rem auto 2rem;font-size:30px}#loader-wrapper .description[data-v-d48f4d20],#loader-wrapper .title[data-v-d48f4d20]{text-align:center;color:#2c3e50;color:var(--text-color);box-sizing:border-box;padding:0 10px;text-shadow:0 2px 10px rgba(0,0,0,.2)}#loader-wrapper .description[data-v-d48f4d20]{margin:auto;font-size:22px}@-webkit-keyframes pacman-balls-data-v-d48f4d20{75%{opacity:.7}to{transform:translate(-100px,-6.25px)}}@keyframes pacman-balls-data-v-d48f4d20{75%{opacity:.7}to{transform:translate(-100px,-6.25px)}}@-webkit-keyframes rotate_pacman_half_up-data-v-d48f4d20{0%{transform:rotate(270deg)}50%{transform:rotate(1turn)}to{transform:rotate(270deg)}}@keyframes rotate_pacman_half_up-data-v-d48f4d20{0%{transform:rotate(270deg)}50%{transform:rotate(1turn)}to{transform:rotate(270deg)}}@-webkit-keyframes rotate_pacman_half_down-data-v-d48f4d20{0%{transform:rotate(90deg)}50%{transform:rotate(0deg)}to{transform:rotate(90deg)}}@keyframes rotate_pacman_half_down-data-v-d48f4d20{0%{transform:rotate(90deg)}50%{transform:rotate(0deg)}to{transform:rotate(90deg)}}.valine-wrapper #valine.v .vbtn{color:#2c3e50;color:var(--text-color);border:1px solid #eaecef;border-color:var(--border-color)}.valine-wrapper #valine.v .vbtn:hover{color:#0074af;border-color:#0074af}.valine-wrapper #valine.v .vwrap{background:rgba(27,31,35,.05);background:var(--code-color);border:1px solid #eaecef;border-color:var(--border-color)}.valine-wrapper #valine.v .vwrap .vheader .vinput{border-bottom:1px dashed var(--border-color)}.valine-wrapper #valine.v .vwrap .vheader .vinput:focus{border-bottom-color:#0074af}.valine-wrapper #valine.v .vwrap .vheader .vinput:-internal-autofill-selected{background-color:var(--code-color)!important}.valine-wrapper #valine.v .vinfo{padding-left:.6rem}.valine-wrapper #valine.v .vcard .vquote{margin-left:0;border-left:none}.valine-wrapper #valine.v .vcard .vimg{width:2.8rem;height:2.8rem;border-radius:.25rem;border:none}.valine-wrapper #valine.v .vcard .vhead .vnick{color:#0074af}.valine-wrapper #valine.v .vcard .vhead .vnick:before{background:#0074af}.valine-wrapper #valine.v .vh{border-bottom:none}.valine-wrapper #valine.v .vh .vhead .vsys{color:#0074af;color:var(--text-color);background:rgba(27,31,35,.05);background:var(--code-color)}.valine-wrapper #valine.v .vh .vmeta{margin-bottom:1rem}.valine-wrapper #valine.v .vh .vmeta .vat{margin-right:.3rem;background:rgba(27,31,35,.05);background:var(--code-color);border-radius:.25rem;padding:0 .4rem;color:var(--text-color);border:1px solid #eaecef;border-color:var(--border-color)}.valine-wrapper #valine.v .vh .vmeta .vat:hover{color:#0074af;border-color:#0074af}.valine-wrapper #valine.v .vh .vcontent{background:rgba(27,31,35,.05);background:var(--code-color);border-radius:.25rem;margin:0 .3rem;padding:.1rem .6rem .05rem}.valine-wrapper #valine.v .vh .vcontent p .at{color:#0074af}.valine-wrapper #valine.v .vh .vcontent.expand:before{z-index:1;background:linear-gradient(180deg,hsla(0,0%,100%,0),#fff);background:linear-gradient(180deg,hsla(0,0%,100%,0),var(--background-color))}.valine-wrapper #valine.v .vh .vcontent.expand:after{color:#0074af;color:var(--text-color);background:#fff;background:var(--background-color)}.valine-wrapper #valine.v .info{padding-right:.6rem}.valine-wrapper #valine.v .vbtn,.valine-wrapper #valine.v code,.valine-wrapper #valine.v pre{background:var(--background-color);color:var(--text-color)}.valine-wrapper #valine.v a{color:#0074af}.valine-wrapper #valine.v a:before{background:#0074af} - -/*! - * vssue - A vue-powered issue-based comment plugin - * - * @version v1.4.6 - * @link https://vssue.js.org - * @license MIT - * @copyright 2018-2020 meteorlxy - */.vssue .vssue-button{color:#3eaf7c;border:2px solid #3eaf7c}.vssue .vssue-button:not(:disabled).vssue-button-primary{color:#3eaf7c;border-color:#3eaf7c}.vssue .vssue-icon{fill:#3eaf7c}.vssue .vssue-notice .vssue-alert{color:#3eaf7c;border:2px solid #c3ead8;background-color:#f5fbf8}.vssue .vssue-notice .vssue-progress{background-color:#3eaf7c}.vssue .vssue-status{color:#3eaf7c}@media screen and (max-width:576px){.vssue .vssue-new-comment .vssue-new-comment-body{margin-left:60px}}@media screen and (min-width:577px){.vssue .vssue-new-comment .vssue-new-comment-body{margin-left:70px}}@media screen and (max-width:576px){.vssue .vssue-new-comment .vssue-new-comment-footer{text-align:center}.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-new-comment-operations{margin-top:10px}}@media screen and (min-width:577px){.vssue .vssue-new-comment .vssue-new-comment-footer{margin-left:70px;text-align:right}.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-current-user{float:left}}.vssue .vssue-new-comment .vssue-new-comment-input{background-color:#f5fbf8}.vssue .vssue-comments .vssue-comment.vssue-comment-edit-mode .vssue-comment-main,.vssue .vssue-new-comment .vssue-new-comment-input:focus{border-color:#9adbbe;box-shadow:0 0 1px 1px #9adbbe}@media screen and (max-width:576px){.vssue .vssue-comments .vssue-comment .vssue-comment-body{margin-left:60px}}@media screen and (min-width:577px){.vssue .vssue-comments .vssue-comment .vssue-comment-body{margin-left:70px}}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-operations,.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-reactions .vssue-comment-reaction{color:#3eaf7c}@media screen and (max-width:576px){.vssue .vssue-pagination{flex-direction:column;justify-content:center;text-align:center}}@media screen and (max-width:576px){.vssue .vssue-pagination .vssue-pagination-page{margin-top:10px}}@media screen and (min-width:577px){.vssue .vssue-pagination .vssue-pagination-page{text-align:right}}.vssue .vssue-pagination .vssue-pagination-select{border:1px solid #9adbbe}.vssue .vssue-pagination .vssue-pagination-select:focus{box-shadow:0 0 .2px .2px #9adbbe}.vssue .vssue-pagination .vssue-pagination-link:not(.disabled),.vssue :not(.vssue-comment-content) a{color:#3eaf7c}.markdown-body .tab-size[data-tab-size="1"]{-o-tab-size:1}.markdown-body .tab-size[data-tab-size="2"]{-o-tab-size:2}.markdown-body .tab-size[data-tab-size="3"]{-o-tab-size:3}.markdown-body .tab-size[data-tab-size="4"]{-o-tab-size:4}.markdown-body .tab-size[data-tab-size="5"]{-o-tab-size:5}.markdown-body .tab-size[data-tab-size="6"]{-o-tab-size:6}.markdown-body .tab-size[data-tab-size="7"]{-o-tab-size:7}.markdown-body .tab-size[data-tab-size="8"]{-o-tab-size:8}.markdown-body .tab-size[data-tab-size="9"]{-o-tab-size:9}.markdown-body .tab-size[data-tab-size="10"]{-o-tab-size:10}.markdown-body .tab-size[data-tab-size="11"]{-o-tab-size:11}.markdown-body .tab-size[data-tab-size="12"]{-o-tab-size:12}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format("woff")}.markdown-body .octicon{display:inline-block;fill:currentColor;vertical-align:text-bottom}.markdown-body .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}.markdown-body .anchor:focus{outline:none}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{background-color:#b31d28;color:#fafbfc}.markdown-body .pl-c2{background-color:#d73a49;color:#fafbfc}.markdown-body .pl-c2:before{content:"^M"}.markdown-body .pl-sr .pl-cce{color:#22863a;font-weight:700}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{color:#005cc5;font-weight:700}.markdown-body .pl-mi{color:#24292e;font-style:italic}.markdown-body .pl-mb{color:#24292e;font-weight:700}.markdown-body .pl-md{background-color:#ffeef0;color:#b31d28}.markdown-body .pl-mi1{background-color:#f0fff4;color:#22863a}.markdown-body .pl-mc{background-color:#ffebda;color:#e36209}.markdown-body .pl-mi2{background-color:#005cc5;color:#f6f8fa}.markdown-body .pl-mdr{color:#6f42c1;font-weight:700}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{color:#032f62;text-decoration:underline}.markdown-body details{display:block}.markdown-body summary{display:list-item}.markdown-body a{background-color:transparent}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit;font-weight:bolder}.markdown-body h1{margin:.67em 0}.markdown-body img{border-style:none}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:monospace,monospace;font-size:1em}.markdown-body hr{box-sizing:content-box;overflow:visible}.markdown-body input{font:inherit;margin:0;overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{background:transparent;border-bottom:1px solid #dfe2e5;height:0;margin:15px 0;overflow:hidden}.markdown-body hr:after,.markdown-body hr:before{content:"";display:table}.markdown-body hr:after{clear:both}.markdown-body table{border-collapse:collapse;border-spacing:0}.markdown-body td,.markdown-body th{padding:0}.markdown-body details summary{cursor:pointer}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-bottom:0;margin-top:0}.markdown-body h1{font-size:32px}.markdown-body h1,.markdown-body h2{font-weight:600}.markdown-body h2{font-size:24px}.markdown-body h3{font-size:20px}.markdown-body h3,.markdown-body h4{font-weight:600}.markdown-body h4{font-size:16px}.markdown-body h5{font-size:14px}.markdown-body h5,.markdown-body h6{font-weight:600}.markdown-body h6{font-size:12px}.markdown-body p{margin-bottom:10px;margin-top:0}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{margin-bottom:0;margin-top:0;padding-left:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code,.markdown-body pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px}.markdown-body pre{margin-bottom:0;margin-top:0}.markdown-body input::-webkit-inner-spin-button,.markdown-body input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.markdown-body .border{border:1px solid #e1e4e8!important}.markdown-body .border-0{border:0!important}.markdown-body .border-bottom{border-bottom:1px solid #e1e4e8!important}.markdown-body .rounded-1{border-radius:3px!important}.markdown-body .bg-white{background-color:#fff!important}.markdown-body .bg-gray-light{background-color:#fafbfc!important}.markdown-body .text-gray-light{color:#6a737d!important}.markdown-body .mb-0{margin-bottom:0!important}.markdown-body .my-2{margin-bottom:8px!important;margin-top:8px!important}.markdown-body .py-0{padding-bottom:0!important;padding-top:0!important}.markdown-body .py-2{padding-bottom:8px!important;padding-top:8px!important}.markdown-body .pl-3,.markdown-body .px-3{padding-left:16px!important}.markdown-body .px-3{padding-right:16px!important}.markdown-body .f6{font-size:12px!important}.markdown-body .lh-condensed{line-height:1.25!important}.markdown-body .text-bold{font-weight:600!important}.markdown-body:after,.markdown-body:before{content:"";display:table}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-bottom:16px;margin-top:0}.markdown-body hr{background-color:#e1e4e8;border:0;height:.25em;margin:24px 0;padding:0}.markdown-body blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;padding:0 1em}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{border:1px solid #c6cbd1;border-bottom-color:#959da5;box-shadow:inset 0 -1px 0 #959da5;font-size:11px}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{font-weight:600;line-height:1.25;margin-bottom:16px;margin-top:24px}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{border-bottom:1px solid #eaecef;padding-bottom:.3em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{color:#6a737d;font-size:.85em}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-bottom:0;margin-top:0}.markdown-body li{word-wrap:break-all}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:16px;padding:0}.markdown-body dl dd{margin-bottom:16px;padding:0 16px}.markdown-body table{display:block;overflow:auto;width:100%}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{border:1px solid #dfe2e5;padding:6px 13px}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{background-color:#fff;box-sizing:content-box;max-width:100%}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body code{background-color:rgba(27,31,35,.05);border-radius:3px;font-size:85%;margin:0;padding:.2em .4em}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{background:transparent;border:0;font-size:100%;margin:0;padding:0;white-space:pre;word-break:normal}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{background-color:#f6f8fa;border-radius:3px;font-size:85%;line-height:1.45;overflow:auto;padding:16px}.markdown-body pre code{background-color:transparent;border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0;word-wrap:normal}.markdown-body .commit-tease-sha{color:#444d56;display:inline-block;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:90%}.markdown-body .blob-wrapper{border-bottom-left-radius:3px;border-bottom-right-radius:3px;overflow-x:auto;overflow-y:hidden}.markdown-body .blob-wrapper-embedded{max-height:240px;overflow-y:auto}.markdown-body .blob-num{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;color:rgba(27,31,35,.3);cursor:pointer;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px;line-height:20px;min-width:50px;padding-left:10px;padding-right:10px;text-align:right;user-select:none;vertical-align:top;white-space:nowrap;width:1%}.markdown-body .blob-num:hover{color:rgba(27,31,35,.6)}.markdown-body .blob-num:before{content:attr(data-line-number)}.markdown-body .blob-code{line-height:20px;padding-left:10px;padding-right:10px;position:relative;vertical-align:top}.markdown-body .blob-code-inner{color:#24292e;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px;overflow:visible;white-space:pre;word-wrap:normal}.markdown-body .pl-token.active,.markdown-body .pl-token:hover{background:#ffea7f;cursor:pointer}.markdown-body kbd{background-color:#fafbfc;border:1px solid #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1;color:#444d56;display:inline-block;font:11px SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;padding:3px 5px;vertical-align:middle}.markdown-body :checked+.radio-label{border-color:#0366d6;position:relative;z-index:1}.markdown-body .tab-size[data-tab-size="1"]{-moz-tab-size:1;tab-size:1}.markdown-body .tab-size[data-tab-size="2"]{-moz-tab-size:2;tab-size:2}.markdown-body .tab-size[data-tab-size="3"]{-moz-tab-size:3;tab-size:3}.markdown-body .tab-size[data-tab-size="4"]{-moz-tab-size:4;tab-size:4}.markdown-body .tab-size[data-tab-size="5"]{-moz-tab-size:5;tab-size:5}.markdown-body .tab-size[data-tab-size="6"]{-moz-tab-size:6;tab-size:6}.markdown-body .tab-size[data-tab-size="7"]{-moz-tab-size:7;tab-size:7}.markdown-body .tab-size[data-tab-size="8"]{-moz-tab-size:8;tab-size:8}.markdown-body .tab-size[data-tab-size="9"]{-moz-tab-size:9;tab-size:9}.markdown-body .tab-size[data-tab-size="10"]{-moz-tab-size:10;tab-size:10}.markdown-body .tab-size[data-tab-size="11"]{-moz-tab-size:11;tab-size:11}.markdown-body .tab-size[data-tab-size="12"]{-moz-tab-size:12;tab-size:12}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body .pl-7{padding-left:48px!important}.markdown-body .pl-8{padding-left:64px!important}.markdown-body .pl-9{padding-left:80px!important}.markdown-body .pl-10{padding-left:96px!important}.markdown-body .pl-11{padding-left:112px!important}.markdown-body .pl-12{padding-left:128px!important}.clearfix:after,.vssue .vssue-new-comment .vssue-new-comment-footer:after{display:block;clear:both;content:""}.vssue{width:100%;color:#2c3e50;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:10px}.vssue .vssue-button{outline:none;cursor:pointer;padding:10px 20px;font-size:1.05;font-weight:700;color:#0074af;background-color:transparent;border:2px solid #0074af;border-radius:10px}.vssue .vssue-button:disabled{cursor:not-allowed;color:#eaecef;border-color:#eaecef}.vssue .vssue-button:disabled .vssue-icon{fill:#eaecef}.vssue .vssue-button:not(:disabled).vssue-button-default{color:#a3aab1;border-color:#a3aab1}.vssue .vssue-button:not(:disabled).vssue-button-primary{color:#0074af;border-color:#0074af}.vssue .vssue-icon{width:1em;height:1em;vertical-align:-.15em;fill:#0074af;overflow:hidden}.vssue .vssue-icon-loading{-webkit-animation:vssue-keyframe-rotation 1s linear infinite;animation:vssue-keyframe-rotation 1s linear infinite}@-webkit-keyframes vssue-keyframe-rotation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes vssue-keyframe-rotation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.vssue .fade-appear-active,.vssue .fade-enter-active{transition:all .3s ease}.vssue .fade-leave-active{transition:all .3s cubic-bezier(1,.5,.8,1)}.vssue .fade-appear,.vssue .fade-enter,.vssue .fade-leave-to{opacity:0}.vssue .vssue-notice{position:relative;z-index:100;transform:translateY(-11px)}.vssue .vssue-notice .vssue-alert{position:absolute;z-index:101;cursor:pointer;top:0;padding:10px 20px;width:100%;color:#0074af;border:2px solid #9bddff;border-radius:5px;background-color:#eef9ff}.vssue .vssue-notice .vssue-progress{position:absolute;top:0;left:0;height:2px;background-color:#0074af}.vssue .vssue-status{text-align:center;padding-top:20px;padding-bottom:10px;color:#0074af}.vssue .vssue-status .vssue-icon{font-size:1.4em}.vssue .vssue-status .vssue-status-info{margin-top:10px;margin-bottom:10px}.vssue .vssue-header{padding-bottom:10px;border-bottom:1px solid #eaecef;margin-bottom:10px;overflow:hidden}.vssue .vssue-header .vssue-header-powered-by{float:right}.vssue .vssue-new-comment{border-bottom:1px solid #eaecef;margin-top:10px;margin-bottom:10px}.vssue .vssue-new-comment .vssue-comment-avatar{float:left;width:50px;height:50px}.vssue .vssue-new-comment .vssue-comment-avatar img{width:50px;height:50px}.vssue .vssue-new-comment .vssue-comment-avatar .vssue-icon{cursor:pointer;padding:5px;font-size:50px;fill:#757f8a}.vssue .vssue-new-comment .vssue-new-comment-body{position:relative}@media screen and (max-width:719px){.vssue .vssue-new-comment .vssue-new-comment-body{margin-left:60px}}@media screen and (min-width:720px){.vssue .vssue-new-comment .vssue-new-comment-body{margin-left:70px}}.vssue .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.vssue .vssue-new-comment .vssue-new-comment-footer{margin-top:10px;margin-bottom:10px}.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-current-user{color:#a3aab1}.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-current-user .vssue-logout{cursor:pointer;text-decoration:underline;color:#a3aab1;font-weight:400}@media screen and (max-width:719px){.vssue .vssue-new-comment .vssue-new-comment-footer{text-align:center}.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-new-comment-operations{margin-top:10px}}@media screen and (min-width:720px){.vssue .vssue-new-comment .vssue-new-comment-footer{margin-left:70px;text-align:right}.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-current-user{float:left}}.vssue .vssue-new-comment .vssue-new-comment-input{resize:none;outline:none;width:100%;padding:15px;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;background-color:#eef9ff;border:1px solid #eaecef;border-radius:5px}.vssue .vssue-new-comment .vssue-new-comment-input:disabled{cursor:not-allowed;background-color:#f0f2f4}.vssue .vssue-new-comment .vssue-new-comment-input:focus{background-color:#fff;border-color:#58c7ff;box-shadow:0 0 1px 1px #58c7ff}.vssue .vssue-new-comment .vssue-new-comment-input::-moz-placeholder{color:#a3aab1}.vssue .vssue-new-comment .vssue-new-comment-input:-ms-input-placeholder{color:#a3aab1}.vssue .vssue-new-comment .vssue-new-comment-input::-ms-input-placeholder{color:#a3aab1}.vssue .vssue-new-comment .vssue-new-comment-input::placeholder{color:#a3aab1}.vssue .vssue-comments .vssue-comment{margin:15px 0}.vssue .vssue-comments .vssue-comment.vssue-comment-edit-mode .vssue-comment-main{border-color:#58c7ff;box-shadow:0 0 1px 1px #58c7ff}.vssue .vssue-comments .vssue-comment.vssue-comment-disabled{pointer-events:none}.vssue .vssue-comments .vssue-comment.vssue-comment-disabled .vssue-comment-body{background-color:#f9f9fa}.vssue .vssue-comments .vssue-comment .vssue-comment-avatar{float:left;width:50px;height:50px}.vssue .vssue-comments .vssue-comment .vssue-comment-avatar img{width:50px;height:50px}@media screen and (max-width:719px){.vssue .vssue-comments .vssue-comment .vssue-comment-body{margin-left:60px}}@media screen and (min-width:720px){.vssue .vssue-comments .vssue-comment .vssue-comment-body{margin-left:70px}}.vssue .vssue-comments .vssue-comment .vssue-comment-header{padding:10px 15px;overflow:hidden;border-top-left-radius:5px;border-top-right-radius:5px;border:1px solid #eaecef;border-bottom:none}.vssue .vssue-comments .vssue-comment .vssue-comment-header .vssue-comment-created-at{float:right;cursor:default;color:#a3aab1}.vssue .vssue-comments .vssue-comment .vssue-comment-main{padding:15px;border:1px solid #eaecef}.vssue .vssue-comments .vssue-comment .vssue-comment-main .vssue-edit-comment-input{resize:none;outline:none;border:none;width:100%;background:transparent}.vssue .vssue-comments .vssue-comment .vssue-comment-footer{padding:10px 15px;overflow:hidden;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border:1px solid #eaecef;border-top:none}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-hint{cursor:default;color:#a3aab1}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-reactions .vssue-comment-reaction{cursor:pointer;display:inline-block;margin-right:8px;color:#0074af}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-operations{float:right;color:#0074af}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-operations .vssue-comment-operation{cursor:pointer;margin-left:8px}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-operations .vssue-comment-operation.vssue-comment-operation-muted{color:#a3aab1}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-operations .vssue-comment-operation.vssue-comment-operation-muted .vssue-icon{fill:#a3aab1}.vssue .vssue-pagination{cursor:default;display:flex;padding:5px;color:#a3aab1}@media screen and (max-width:719px){.vssue .vssue-pagination{flex-direction:column;justify-content:center;text-align:center}}.vssue .vssue-pagination .vssue-pagination-loading,.vssue .vssue-pagination .vssue-pagination-page,.vssue .vssue-pagination .vssue-pagination-per-page{flex:1}@media screen and (max-width:719px){.vssue .vssue-pagination .vssue-pagination-page{margin-top:10px}}@media screen and (min-width:720px){.vssue .vssue-pagination .vssue-pagination-page{text-align:right}}.vssue .vssue-pagination .vssue-pagination-select{outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #58c7ff;padding-left:.2rem;padding-right:1rem;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg class='icon' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3Cstyle/%3E%3C/defs%3E%3Cpath d='M676.395 432.896a21.333 21.333 0 0 0-30.166 0L511.061 568.021 377.728 434.645a21.333 21.333 0 0 0-30.165 30.166l148.394 148.48a21.419 21.419 0 0 0 30.208 0l150.23-150.187a21.333 21.333 0 0 0 0-30.208'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100%}.vssue .vssue-pagination .vssue-pagination-select:disabled{cursor:not-allowed}.vssue .vssue-pagination .vssue-pagination-select:focus{background-color:#fff;box-shadow:0 0 .2px .2px #58c7ff}.vssue .vssue-pagination .vssue-pagination-link{display:inline-block;min-width:1em;text-align:center}.vssue .vssue-pagination .vssue-pagination-link.disabled{pointer-events:none}.vssue .vssue-pagination .vssue-pagination-link:not(.disabled){color:#0074af;font-weight:500;cursor:pointer}.vssue,.vssue *{box-sizing:border-box}.vssue :not(.vssue-comment-content) a{cursor:pointer;font-weight:500;color:#0074af;text-decoration:none}.vssue :not(.vssue-comment-content) hr{display:block;height:1px;border:0;border-top:1px solid #eaecef;margin:1.2rem 0;padding:0}.vssue-wrapper.vssue{color:#2c3e50;color:var(--text-color)}.vssue-wrapper.vssue .vssue-new-comment{border-bottom:1px solid #eaecef;border-bottom:1px solid var(--border-color)}.vssue-wrapper.vssue .vssue-new-comment .vssue-new-comment-input:disabled{background-color:#fff;background-color:var(--background-color);border:1px solid #eaecef;border:1px solid var(--border-color)}.vssue-wrapper.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-current-user{color:#2c3e50;color:var(--text-color)}.vssue-wrapper.vssue .vssue-header{border-bottom:1px solid #eaecef;border-bottom:1px solid var(--border-color)}.vssue-wrapper.vssue .vssue-comments .vssue-pagination .vssue-pagination-per-page .vssue-pagination-select{color:var(--text-color)}.vssue-wrapper.vssue .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-footer,.vssue-wrapper.vssue .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-header,.vssue-wrapper.vssue .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-main{border:none}.vssue-wrapper.vssue .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-footer,.vssue-wrapper.vssue .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-main{background:var(--code-color)}.vssue-wrapper.vssue .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-footer{border-top:2px solid var(--background-color)}.vssue-wrapper.vssue .vssue-comments .vssue-comment .vssue-comment-avatar img{width:2.8rem;height:2.8rem;border-radius:.25rem}.vssue-wrapper.vssue .markdown-body{color:var(--text-color)}#nprogress{pointer-events:none}#nprogress .bar{background:#0074af;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #0074af,0 0 5px #0074af;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#0074af transparent transparent #0074af;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.navbar .logo[data-v-34310651]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}.notification-wrapper[data-v-34310651]{position:fixed;top:80px;right:20px;z-index:19;width:260px;box-sizing:border-box;background:#fff;border:1px solid #0074af;border-radius:.25rem;background:var(--background-color);box-shadow:var(--box-shadow)}.notification-wrapper .notification-title[data-v-34310651]{position:relative;box-sizing:border-box;padding:10px;margin:0;background:#0074af;color:#fff}.notification-wrapper .notification-title i[data-v-34310651]{color:#fff}.notification-wrapper .notification-title .btn-close[data-v-34310651]{position:absolute;display:inline-block;width:22px;height:22px;right:10px;top:0;bottom:0;margin:auto;cursor:pointer}.notification-wrapper .notification-title .btn-close svg[data-v-34310651]{fill:#fff}.notification-wrapper .notification-content[data-v-34310651]{box-sizing:border-box;padding:10px 15px 0}.notification-wrapper .notification-content h5[data-v-34310651]{margin:.2rem 0;text-align:center}.notification-wrapper .notification-content img[data-v-34310651]{width:100%}.notification-wrapper .btn-donate[data-v-34310651]{display:block;margin:2rem auto;width:3.4rem;line-height:3.4rem;text-align:center;background-color:#0074af;border-radius:50%;color:#fff;font-size:1rem;box-shadow:var(--box-shadow);cursor:pointer}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.navbar .logo[data-v-312e2a2a]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}[data-v-312e2a2a]:root{--default-color-10:#fff;--default-color-9:hsla(0,0%,100%,0.9);--default-color-8:hsla(0,0%,100%,0.8);--default-color-7:hsla(0,0%,100%,0.7);--default-color-6:hsla(0,0%,100%,0.6);--default-color-5:hsla(0,0%,100%,0.5);--default-color-4:hsla(0,0%,100%,0.4);--default-color-3:hsla(0,0%,100%,0.3);--default-color-2:hsla(0,0%,100%,0.2);--default-color-1:hsla(0,0%,100%,0.1);--background-color:#fff;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.2);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.2);--text-color:#2c3e50;--text-color-sub:#7f7f7f;--border-color:#eaecef;--code-color:rgba(27,31,35,0.05);--mask-color:#888}@media (prefers-color-scheme:dark){[data-v-312e2a2a]:root{--default-color-10:#000;--default-color-9:rgba(0,0,0,0.9);--default-color-8:rgba(0,0,0,0.8);--default-color-7:rgba(0,0,0,0.7);--default-color-6:rgba(0,0,0,0.6);--default-color-5:rgba(0,0,0,0.5);--default-color-4:rgba(0,0,0,0.4);--default-color-3:rgba(0,0,0,0.3);--default-color-2:rgba(0,0,0,0.2);--default-color-1:rgba(0,0,0,0.1);--background-color:#181818;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.6);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.6);--text-color:hsla(0,0%,100%,0.8);--text-color-sub:#8b8b8b;--border-color:rgba(0,0,0,0.3);--code-color:rgba(0,0,0,0.3);--mask-color:#000}}.badge[data-v-312e2a2a]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:.25rem;padding:0 6px;color:#fff}.badge.green[data-v-312e2a2a],.badge.tip[data-v-312e2a2a],.badge[data-v-312e2a2a]{background-color:#42b983}.badge.error[data-v-312e2a2a]{background-color:#da5961}.badge.warn[data-v-312e2a2a],.badge.warning[data-v-312e2a2a],.badge.yellow[data-v-312e2a2a]{background-color:#e7c000}.badge+.badge[data-v-312e2a2a]{margin-left:5px}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box .iconfont{position:absolute;top:0;bottom:0;z-index:0;left:.6rem;margin:auto}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid var(--border-color);border-radius:.25rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:transparent;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#0074af}.search-box .suggestions{background:var(--background-color);width:20rem;position:absolute;top:1.5rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:var(--text-color)}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:var(--border-color)}.search-box .suggestion.focused a{color:#0074af}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box{margin-right:0}.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.module-enter,.module-leave-to{opacity:0;transform:translateY(-20px)}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto}.home .hero{text-align:center}.home .hero h1{font-size:2.5rem;color:var(--text-color)}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{font-size:1.6rem;line-height:1.3;color:var(--text-color)}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#0074af;padding:.6rem 1.2rem;border-radius:.25rem;transition:background-color .1s ease;box-sizing:border-box}.home .hero .action-button:hover{background-color:#008ad1}.home .features{border-top:1px solid var(--border-color);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%;transition:all .5s;color:var(--text-color)}.home .feature h2{font-size:1.6rem;font-weight:500;border-bottom:none;padding-bottom:0}.home .feature:hover{transform:scale(1.05)}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title{display:block}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid var(--border-color);padding:.45rem 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#0074af}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #0074af;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid var(--text-color-sub);border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--background-color);padding:.6rem 0;box-shadow:var(--box-shadow);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:var(--text-color)}.nav-links a.router-link-active,.nav-links a.router-link-active .iconfont,.nav-links a:hover,.nav-links a:hover .iconfont{color:#0074af}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #0086ca}}.mode-options{background-color:var(--background-color);min-width:125px;margin:0;padding:1em;box-shadow:var(--box-shadow);border-radius:.25rem}.mode-options .title{margin-top:0;margin-bottom:.6rem;font-weight:700;color:var(--text-color)}.mode-options .color-mode-options{display:flex;flex-wrap:wrap}.mode-options .color-mode-options li{text-align:center;font-size:12px;color:var(--text-color);line-height:18px;padding:3px 6px;border-top:1px solid #666;border-bottom:1px solid #666;background-color:var(--background-color);cursor:pointer}.mode-options .color-mode-options li.dark{border-radius:.25rem 0 0 .25rem;border-left:1px solid #666}.mode-options .color-mode-options li.light{border-radius:0 .25rem .25rem 0;border-right:1px solid #666}.mode-options .color-mode-options li.active{background-color:#0074af;color:#fff}.mode-options .color-mode-options li:not(.active){border-right:1px solid #666}.color-picker{position:relative;margin-right:1em;cursor:pointer}.color-picker .color-button{align-items:center;height:100%}.color-picker .color-button .iconfont{font-size:1.4rem;color:#0074af}.color-picker .color-picker-menu{position:absolute;top:40px;left:50%;transform:translateX(-50%);z-index:150}.color-picker .color-picker-menu.menu-transition-enter-active,.color-picker .color-picker-menu.menu-transition-leave-active{transition:all .25s ease-in-out}.color-picker .color-picker-menu.menu-transition-enter,.color-picker .color-picker-menu.menu-transition-leave-to{top:50px;opacity:0}.color-picker .color-picker-menu ul{list-style-type:none;margin:0;padding:0}@media (max-width:719px){.color-picker{margin-right:1rem}.color-picker .color-picker-menu{left:calc(50% - 35px)}.color-picker .color-picker-menu:before{left:calc(50% + 35px)}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem;box-shadow:var(--box-shadow);background:var(--background-color)}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{border-radius:50%}.navbar .site-name{font-size:1.2rem;font-weight:600;color:var(--text-color);position:relative;background:var(--background-color)}.navbar .links{padding-left:1.5rem;box-sizing:border-box;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex;background-color:var(--background-color)}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:.2rem}}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:var(--text-color)}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:var(--text-color);transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:#0074af}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#0074af;border-left-color:#0074af}.sidebar-heading.clickable:hover{color:#0074af}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.navbar .logo[data-v-36b9f66a]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}[data-v-36b9f66a]:root{--default-color-10:#fff;--default-color-9:hsla(0,0%,100%,0.9);--default-color-8:hsla(0,0%,100%,0.8);--default-color-7:hsla(0,0%,100%,0.7);--default-color-6:hsla(0,0%,100%,0.6);--default-color-5:hsla(0,0%,100%,0.5);--default-color-4:hsla(0,0%,100%,0.4);--default-color-3:hsla(0,0%,100%,0.3);--default-color-2:hsla(0,0%,100%,0.2);--default-color-1:hsla(0,0%,100%,0.1);--background-color:#fff;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.2);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.2);--text-color:#2c3e50;--text-color-sub:#7f7f7f;--border-color:#eaecef;--code-color:rgba(27,31,35,0.05);--mask-color:#888}@media (prefers-color-scheme:dark){[data-v-36b9f66a]:root{--default-color-10:#000;--default-color-9:rgba(0,0,0,0.9);--default-color-8:rgba(0,0,0,0.8);--default-color-7:rgba(0,0,0,0.7);--default-color-6:rgba(0,0,0,0.6);--default-color-5:rgba(0,0,0,0.5);--default-color-4:rgba(0,0,0,0.4);--default-color-3:rgba(0,0,0,0.3);--default-color-2:rgba(0,0,0,0.2);--default-color-1:rgba(0,0,0,0.1);--background-color:#181818;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.6);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.6);--text-color:hsla(0,0%,100%,0.8);--text-color-sub:#8b8b8b;--border-color:rgba(0,0,0,0.3);--code-color:rgba(0,0,0,0.3);--mask-color:#000}}.tags[data-v-36b9f66a]{margin:30px 0}.tags span[data-v-36b9f66a]{vertical-align:middle;margin:4px 4px 10px;padding:4px 8px;display:inline-block;cursor:pointer;border-radius:.25rem;background:#fff;color:#fff;line-height:13px;font-size:13px;box-shadow:var(--box-shadow);transition:all .5s}.tags span[data-v-36b9f66a]:hover{transform:scale(1.04)}.tags span.active[data-v-36b9f66a]{transform:scale(1.2)}.navbar .logo[data-v-48a8cd70]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}[data-v-48a8cd70]:root{--default-color-10:#fff;--default-color-9:hsla(0,0%,100%,0.9);--default-color-8:hsla(0,0%,100%,0.8);--default-color-7:hsla(0,0%,100%,0.7);--default-color-6:hsla(0,0%,100%,0.6);--default-color-5:hsla(0,0%,100%,0.5);--default-color-4:hsla(0,0%,100%,0.4);--default-color-3:hsla(0,0%,100%,0.3);--default-color-2:hsla(0,0%,100%,0.2);--default-color-1:hsla(0,0%,100%,0.1);--background-color:#fff;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.2);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.2);--text-color:#2c3e50;--text-color-sub:#7f7f7f;--border-color:#eaecef;--code-color:rgba(27,31,35,0.05);--mask-color:#888}@media (prefers-color-scheme:dark){[data-v-48a8cd70]:root{--default-color-10:#000;--default-color-9:rgba(0,0,0,0.9);--default-color-8:rgba(0,0,0,0.8);--default-color-7:rgba(0,0,0,0.7);--default-color-6:rgba(0,0,0,0.6);--default-color-5:rgba(0,0,0,0.5);--default-color-4:rgba(0,0,0,0.4);--default-color-3:rgba(0,0,0,0.3);--default-color-2:rgba(0,0,0,0.2);--default-color-1:rgba(0,0,0,0.1);--background-color:#181818;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.6);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.6);--text-color:hsla(0,0%,100%,0.8);--text-color-sub:#8b8b8b;--border-color:rgba(0,0,0,0.3);--code-color:rgba(0,0,0,0.3);--mask-color:#000}}.friend-link-wrapper[data-v-48a8cd70]{position:relative;margin:30px 0}.friend-link-wrapper .friend-link-item[data-v-48a8cd70]{position:relative;vertical-align:middle;margin:4px 4px 10px;padding:4px 8px 4px 20px;line-height:20px;display:inline-block;cursor:default;border-radius:.25rem;font-size:13px;box-shadow:var(--box-shadow);transition:all .5s}.friend-link-wrapper .friend-link-item .list-style[data-v-48a8cd70]{position:absolute;left:.4rem;top:0;bottom:0;margin:auto;display:block;width:.4rem;height:.4rem;border-radius:.1rem;background:#0074af;content:""}.friend-link-wrapper .friend-link-item .popup-window-wrapper[data-v-48a8cd70]{display:none}.friend-link-wrapper .friend-link-item .popup-window-wrapper .popup-window[data-v-48a8cd70]{position:absolute;display:flex;background:var(--background-color);box-shadow:var(--box-shadow);border-radius:.25rem;box-sizing:border-box;padding:.8rem 1rem;width:300px}.friend-link-wrapper .friend-link-item .popup-window-wrapper .popup-window .logo[data-v-48a8cd70]{margin-right:.4rem;width:2rem;height:2rem;flex:0 0 2rem;border-radius:.25rem;overflow:hidden}.friend-link-wrapper .friend-link-item .popup-window-wrapper .popup-window .logo img[data-v-48a8cd70]{width:2rem;height:2rem}.friend-link-wrapper .friend-link-item .popup-window-wrapper .popup-window .info[data-v-48a8cd70]{flex:0 0 85%;width:85%}.friend-link-wrapper .friend-link-item .popup-window-wrapper .popup-window .info .title[data-v-48a8cd70]{display:flex;align-items:center;justify-content:space-between;height:2rem}.friend-link-wrapper .friend-link-item .popup-window-wrapper .popup-window .info .title h4[data-v-48a8cd70]{margin:.2rem 0;flex:0 0 86%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.friend-link-wrapper .friend-link-item .popup-window-wrapper .popup-window .info .title .btn-go[data-v-48a8cd70]{width:1.4rem;height:1.2rem;border-radius:.25rem;font-size:.1rem;color:#fff;text-align:center;line-height:1.2rem;cursor:pointer;transition:all .5s}.friend-link-wrapper .friend-link-item .popup-window-wrapper .popup-window .info .title .btn-go[data-v-48a8cd70]:hover{transform:scale(1.1)}.fade-enter-active[data-v-48a8cd70],.fade-leave-active[data-v-48a8cd70]{transition:opacity .5s}.fade-enter[data-v-48a8cd70],.fade-leave-to[data-v-48a8cd70]{opacity:0}.navbar .logo[data-v-484a899e]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}.iconfont[data-v-484a899e]{display:inline-block;line-height:1.5rem}.iconfont[data-v-484a899e]:not(:last-child){margin-right:1rem}.iconfont span[data-v-484a899e]{margin-left:.5rem}.tags .tag-item[data-v-484a899e]{cursor:pointer;font-family:Ubuntu,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.tags .tag-item.active[data-v-484a899e],.tags .tag-item[data-v-484a899e]:hover{color:#0074af}@media (max-width:719px){.tags[data-v-484a899e]{display:block;margin-left:0!important}}.navbar .logo[data-v-28f76ce9]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}[data-v-28f76ce9]:root{--default-color-10:#fff;--default-color-9:hsla(0,0%,100%,0.9);--default-color-8:hsla(0,0%,100%,0.8);--default-color-7:hsla(0,0%,100%,0.7);--default-color-6:hsla(0,0%,100%,0.6);--default-color-5:hsla(0,0%,100%,0.5);--default-color-4:hsla(0,0%,100%,0.4);--default-color-3:hsla(0,0%,100%,0.3);--default-color-2:hsla(0,0%,100%,0.2);--default-color-1:hsla(0,0%,100%,0.1);--background-color:#fff;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.2);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.2);--text-color:#2c3e50;--text-color-sub:#7f7f7f;--border-color:#eaecef;--code-color:rgba(27,31,35,0.05);--mask-color:#888}@media (prefers-color-scheme:dark){[data-v-28f76ce9]:root{--default-color-10:#000;--default-color-9:rgba(0,0,0,0.9);--default-color-8:rgba(0,0,0,0.8);--default-color-7:rgba(0,0,0,0.7);--default-color-6:rgba(0,0,0,0.6);--default-color-5:rgba(0,0,0,0.5);--default-color-4:rgba(0,0,0,0.4);--default-color-3:rgba(0,0,0,0.3);--default-color-2:rgba(0,0,0,0.2);--default-color-1:rgba(0,0,0,0.1);--background-color:#181818;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.6);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.6);--text-color:hsla(0,0%,100%,0.8);--text-color-sub:#8b8b8b;--border-color:rgba(0,0,0,0.3);--code-color:rgba(0,0,0,0.3);--mask-color:#000}}.abstract-item[data-v-28f76ce9]{position:relative;margin:0 auto 20px;padding:16px 20px;width:100%;overflow:hidden;border-radius:.25rem;box-shadow:var(--box-shadow);box-sizing:border-box;transition:all .3s;background-color:var(--background-color)}.abstract-item .reco-sticky[data-v-28f76ce9]{position:absolute;top:0;left:0;display:inline-block;color:#0074af;font-size:2.4rem}.abstract-item[data-v-28f76ce9]:hover{box-shadow:var(--box-shadow-hover)}.abstract-item .title[data-v-28f76ce9]{position:relative;font-size:1.28rem;line-height:36px;display:inline-block}.abstract-item .title .reco-lock[data-v-28f76ce9]{font-size:1.28rem;color:#0074af}.abstract-item .title[data-v-28f76ce9]:after{content:"";position:absolute;width:100%;height:2px;bottom:0;left:0;background-color:#0074af;visibility:hidden;transform:scaleX(0);transition:.3s ease-in-out}.abstract-item .title:hover a[data-v-28f76ce9]{color:#0074af}.abstract-item .title[data-v-28f76ce9]:hover:after{visibility:visible;transform:scaleX(1)}.abstract-item .tags .tag-item[data-v-28f76ce9]{cursor:pointer}.abstract-item .tags .tag-item.active[data-v-28f76ce9],.abstract-item .tags .tag-item[data-v-28f76ce9]:hover{color:#0074af}@media (max-width:719px){.tags[data-v-28f76ce9]{display:block;margin-top:1rem;margin-left:0!important}}.sidebar .sidebar-sub-headers{padding-left:1.5rem;font-size:.95em}.sidebar-sub-headers a.sidebar-link{margin:0 1rem 0 .6rem}a.sidebar-link{font-size:1em;font-weight:400;display:block!important;color:var(--text-color);padding:.35rem 1rem .35rem .75rem;line-height:1.4;margin:0 1rem 0 1.5rem;box-sizing:border-box;border-radius:.25rem}a.sidebar-link:hover{color:#0074af}a.sidebar-link.active{font-weight:600;color:#fff;background:#0074af}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500;background:transparent;color:#0074af}.navbar .logo[data-v-b038cec6]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}.personal-info-wrapper .personal-img[data-v-b038cec6]{display:block;margin:2rem auto;width:8rem;height:8rem;border-radius:50%}.personal-info-wrapper .name[data-v-b038cec6]{text-align:center;color:var(--text-color)}.personal-info-wrapper .num[data-v-b038cec6]{display:flex;margin:0 auto 1rem;width:80%}.personal-info-wrapper .num>div[data-v-b038cec6]{text-align:center;flex:auto}.personal-info-wrapper .num>div[data-v-b038cec6]:first-child{border-right:1px solid #333}.personal-info-wrapper .num>div h3[data-v-b038cec6]{line-height:auto;margin:0 0 .6rem;color:var(--text-color)}.personal-info-wrapper .num>div h6[data-v-b038cec6]{line-height:auto;color:var(--text-color);margin:0}.navbar .logo[data-v-b014bc36]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}.abstract-wrapper[data-v-b014bc36]{width:100%}.home-blog{padding:3.6rem 0 0;margin:0 auto}.home-blog .hero{position:relative}.home-blog .hero .mask{position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1}.home-blog .hero .mask:after{display:block;content:" ";background:var(--mask-color);position:absolute;top:0;bottom:0;left:0;right:0;z-index:0;opacity:.2}.home-blog .hero figure{position:absolute;background:#ff0}.home-blog .hero h1{margin:7rem auto 1.8rem;font-size:2.5rem}.home-blog .hero .action,.home-blog .hero .description,.home-blog .hero .huawei,.home-blog .hero h1{color:#fff}.home-blog .hero .description{margin:1.8rem auto;font-size:1.6rem;line-height:1.3}.home-blog .home-blog-wrapper{display:flex;align-items:flex-start;margin:20px auto 0;max-width:1126px}.home-blog .home-blog-wrapper .blog-list{flex:auto;width:0}.home-blog .home-blog-wrapper .blog-list .abstract-wrapper .abstract-item:last-child{margin-bottom:0}.home-blog .home-blog-wrapper .info-wrapper{position:-webkit-sticky;position:sticky;top:70px;transition:all .3s;margin-left:15px;flex:0 0 300px;height:auto;box-shadow:var(--box-shadow);border-radius:.25rem;box-sizing:border-box;padding:0 15px;background:var(--background-color)}.home-blog .home-blog-wrapper .info-wrapper:hover{box-shadow:var(--box-shadow-hover)}.home-blog .home-blog-wrapper .info-wrapper h4{color:var(--text-color)}.home-blog .home-blog-wrapper .info-wrapper .category-wrapper{list-style:none;padding-left:0}.home-blog .home-blog-wrapper .info-wrapper .category-wrapper .category-item{margin-bottom:.4rem;padding:.4rem .8rem;transition:all .5s;border-radius:.25rem;box-shadow:var(--box-shadow);background-color:var(--background-color)}.home-blog .home-blog-wrapper .info-wrapper .category-wrapper .category-item:hover{transform:scale(1.04)}.home-blog .home-blog-wrapper .info-wrapper .category-wrapper .category-item a{display:flex;justify-content:space-between}.home-blog .home-blog-wrapper .info-wrapper .category-wrapper .category-item a .post-num{width:1.6rem;height:1.6rem;text-align:center;line-height:1.6rem;border-radius:.25rem;background:#eee;font-size:.6rem;color:#fff}@media (max-width:719px){.home-blog{padding-left:1.5rem;padding-right:1.5rem}.home-blog .hero{margin:0 -1.5rem;height:450px}.home-blog .hero img{max-height:210px;margin:2rem auto 1.2rem}.home-blog .hero h1{margin:6rem auto 1.8rem;font-size:2rem}.home-blog .hero .description{font-size:1.2rem}.home-blog .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home-blog .home-blog-wrapper .info-wrapper{display:none!important}}@media (max-width:419px){.home-blog{padding-left:1.5rem;padding-right:1.5rem}.home-blog .hero{margin:0 -1.5rem;height:350px}.home-blog .hero img{max-height:210px;margin:2rem auto 1.2rem}.home-blog .hero h1{margin:6rem auto 1.8rem;font-size:2rem}.home-blog .hero .description{font-size:1.2rem}.home-blog .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home-blog .home-blog-wrapper .info-wrapper{display:none!important}}.page-nav,.page .comments-wrapper,.page .page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav,.page .comments-wrapper,.page .page-edit{padding:2rem}}@media (max-width:419px){.page-nav,.page .comments-wrapper,.page .page-edit{padding:1.5rem}}.page{padding-top:5rem;padding-bottom:2rem;display:block}.page .page-title{max-width:740px;margin:0 auto;padding:1rem 2.5rem;color:var(--text-color)}.page .page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page .page-edit .edit-link{display:inline-block}.page .page-edit .edit-link a{color:#0074af;margin-right:.25rem}.page .page-edit .last-updated{float:right;font-size:.9em}.page .page-edit .last-updated .prefix{font-weight:500;color:#0074af}.page .page-edit .last-updated .time{font-weight:400;color:#aaa}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--border-color);padding-top:1rem;overflow:auto}.page-nav .next{float:right}@media (max-width:719px){.page-title{padding:0 1rem}.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.navbar .logo[data-v-ae2be87e]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}.footer-wrapper[data-v-ae2be87e]{padding:1.5rem 2.5rem;border-top:1px solid var(--border-color);text-align:center;color:#4e6e8e}.footer-wrapper a[data-v-ae2be87e]{font-size:14px}.footer-wrapper>span[data-v-ae2be87e]{margin-left:1rem}.footer-wrapper>span>i[data-v-ae2be87e]{margin-right:.5rem}.footer-wrapper .cyber-security img[data-v-ae2be87e]{margin-right:.5rem;width:20px;height:20px;vertical-align:middle}.footer-wrapper .cyber-security a[data-v-ae2be87e]{vertical-align:middle}@media (max-width:719px){.footer[data-v-ae2be87e]{text-align:left!important}.footer>span[data-v-ae2be87e]{display:block;margin-left:0;line-height:2rem}}.sidebar .personal-info-wrapper{display:none}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid var(--border-color);padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links,.sidebar .personal-info-wrapper{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.navbar .logo[data-v-64685f0e]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}[data-v-64685f0e]:root{--default-color-10:#fff;--default-color-9:hsla(0,0%,100%,0.9);--default-color-8:hsla(0,0%,100%,0.8);--default-color-7:hsla(0,0%,100%,0.7);--default-color-6:hsla(0,0%,100%,0.6);--default-color-5:hsla(0,0%,100%,0.5);--default-color-4:hsla(0,0%,100%,0.4);--default-color-3:hsla(0,0%,100%,0.3);--default-color-2:hsla(0,0%,100%,0.2);--default-color-1:hsla(0,0%,100%,0.1);--background-color:#fff;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.2);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.2);--text-color:#2c3e50;--text-color-sub:#7f7f7f;--border-color:#eaecef;--code-color:rgba(27,31,35,0.05);--mask-color:#888}@media (prefers-color-scheme:dark){[data-v-64685f0e]:root{--default-color-10:#000;--default-color-9:rgba(0,0,0,0.9);--default-color-8:rgba(0,0,0,0.8);--default-color-7:rgba(0,0,0,0.7);--default-color-6:rgba(0,0,0,0.6);--default-color-5:rgba(0,0,0,0.5);--default-color-4:rgba(0,0,0,0.4);--default-color-3:rgba(0,0,0,0.3);--default-color-2:rgba(0,0,0,0.2);--default-color-1:rgba(0,0,0,0.1);--background-color:#181818;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.6);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.6);--text-color:hsla(0,0%,100%,0.8);--text-color-sub:#8b8b8b;--border-color:rgba(0,0,0,0.3);--code-color:rgba(0,0,0,0.3);--mask-color:#000}}.password-shadow[data-v-64685f0e]{overflow:hidden;position:relative;background:#fff;background:var(--background-color);box-sizing:border-box}.password-shadow .title[data-v-64685f0e]{margin:8rem auto 2rem;width:100%;font-size:30px}.password-shadow .description[data-v-64685f0e],.password-shadow .title[data-v-64685f0e]{text-align:center;box-sizing:border-box;text-shadow:0 2px 4px rgba(0,0,0,.1);color:#2c3e50;color:var(--text-color)}.password-shadow .description[data-v-64685f0e]{margin:0 auto 6rem;font-size:22px;padding:0 10px}.password-shadow .inputBox[data-v-64685f0e]{position:absolute;top:40%;left:0;right:0;margin:auto;display:block;max-width:700px;height:100px;background:#0074af;border-radius:.25rem;padding-left:20px;box-sizing:border-box;opacity:.9}.password-shadow .inputBox input[data-v-64685f0e]{width:600px;height:100%;border:none;padding:0 0 0 5px;color:#fff;background:none;outline:none;position:absolute;bottom:0;left:20px;opacity:0;font-size:50px}.password-shadow .inputBox input[data-v-64685f0e]:focus{opacity:1}.password-shadow .inputBox input:focus~span[data-v-64685f0e]{transform:translateY(-80px);color:#0074af;font-size:30px;opacity:.8}.password-shadow .inputBox input:focus~button[data-v-64685f0e]{opacity:1;width:100px}.password-shadow .inputBox span[data-v-64685f0e]{width:200px;height:100%;display:block;position:absolute;line-height:100px;top:0;left:20px;color:#fff;cursor:text;transition:.5s;transform-origin:left top;font-size:30px}.password-shadow .inputBox button[data-v-64685f0e]{overflow:hidden;width:0;height:98px;border-radius:.25rem;position:absolute;background:var(--background-color);right:1px;top:1px;border:0;padding:0;color:#0074af;font-size:18px;outline:none;cursor:pointer;opacity:0;transition:.5s;z-index:1}.password-shadow .footer[data-v-64685f0e]{position:absolute;left:0;right:0;bottom:10%;padding:2.5rem;text-align:center;color:#4e6e8e}.password-shadow .footer>span[data-v-64685f0e]{margin-left:1rem}.password-shadow .footer>span>i[data-v-64685f0e]{margin-right:.5rem}@media (max-width:719px){.password-shadow .inputBox[data-v-64685f0e]{max-width:700px;height:60px;background:#0074af;border-radius:.25rem;position:absolute;left:0;right:0;top:43%;margin:auto 20px;padding-left:0;box-sizing:border-box;opacity:.9}.password-shadow .inputBox input[data-v-64685f0e]{width:60%;height:100%;border:none;padding:0 0 0 5px;color:#fff;background:none;outline:none;position:absolute;bottom:0;opacity:0;font-size:30px}.password-shadow .inputBox input[data-v-64685f0e]:focus{opacity:1}.password-shadow .inputBox input:focus~span[data-v-64685f0e]{transform:translateY(-60px);color:#0074af;font-size:20px;opacity:.8}.password-shadow .inputBox input:focus~button[data-v-64685f0e]{opacity:1;width:60px}.password-shadow .inputBox span[data-v-64685f0e]{width:200px;height:100%;display:block;position:absolute;line-height:60px;top:0;left:20px;color:#fff;cursor:text;transition:.5s;transform-origin:left top;font-size:20px}.password-shadow .inputBox button[data-v-64685f0e]{width:0;height:58px;border-radius:.25rem;position:absolute;right:1px;top:1px;border:0;padding:0;background:#fff;color:#0074af;font-size:18px;outline:none;cursor:pointer;opacity:0;transition:.5s;z-index:1}.password-shadow .footer[data-v-64685f0e]{margin-left:0}}@media (max-width:959px){.password-shadow .footer[data-v-64685f0e]{margin-left:0}}.navbar .logo[data-v-19557b78]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}.theme-container .loading-wrapper[data-v-19557b78]{position:absolute;z-index:22;top:0;bottom:0;left:0;right:0;margin:auto}.theme-container .password-wrapper-out[data-v-19557b78]{position:absolute;z-index:21;top:0;bottom:0;left:0;right:0;margin:auto}.theme-container .password-wrapper-in[data-v-19557b78]{position:absolute;z-index:8;top:0;bottom:0;left:0;right:0}.theme-container .hide[data-v-19557b78]{height:100vh;overflow:hidden}.fade-enter-active[data-v-19557b78],.fade-leave-active[data-v-19557b78]{transition:opacity .5s}.fade-enter[data-v-19557b78],.fade-leave-to[data-v-19557b78]{opacity:0}@font-face{font-family:iconfont;src:url(http://at.alicdn.com/t/font_1030519_ookn0nnv0z8.eot?t=1574737898757);src:url(http://at.alicdn.com/t/font_1030519_ookn0nnv0z8.eot?t=1574737898757#iefix) format("embedded-opentype"),url("data:application/x-font-woff2;charset=utf-8;base64,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") format("woff2"),url(http://at.alicdn.com/t/font_1030519_ookn0nnv0z8.woff?t=1574737898757) format("woff"),url(http://at.alicdn.com/t/font_1030519_ookn0nnv0z8.ttf?t=1574737898757) format("truetype"),url(http://at.alicdn.com/t/font_1030519_ookn0nnv0z8.svg?t=1574737898757#iconfont) format("svg")}.iconfont{font-family:iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.reco-douban:before{content:"\e603"}.reco-wechat:before{content:"\e720"}.reco-color:before{content:"\eae9"}.reco-blog:before{content:"\e61d"}.reco-sf:before{content:"\e610"}.reco-message:before{content:"\e634"}.reco-eye:before{content:"\e669"}.reco-search:before{content:"\e611"}.reco-category:before{content:"\e61e"}.reco-npm:before{content:"\e88d"}.reco-menu:before{content:"\e67c"}.reco-suggestion:before{content:"\e608"}.reco-coding:before{content:"\e601"}.reco-github:before{content:"\e628"}.reco-mail:before{content:"\e624"}.reco-other:before{content:"\e60e"}.reco-home:before{content:"\e65b"}.reco-document:before{content:"\e67a"}.reco-huawei:before{content:"\e6b9"}.reco-up:before{content:"\e68b"}.reco-weibo:before{content:"\e612"}.reco-lock:before{content:"\e60f"}.reco-fullscreen:before{content:"\e602"}.reco-tag:before{content:"\e633"}.reco-date:before{content:"\e63b"}.reco-jianshu:before{content:"\e60c"}.reco-friend:before{content:"\e62f"}.reco-bokeyuan:before{content:"\e626"}.reco-beian:before{content:"\e667"}.reco-copyright:before{content:"\ef87"}.reco-rss:before{content:"\f09d"}.reco-bilibili:before{content:"\e630"}.reco-account:before{content:"\e607"}.reco-qq:before{content:"\e67b"}.reco-theme:before{content:"\e7e8"}.reco-three:before{content:"\e644"}.reco-gitlab:before{content:"\e63c"}.reco-api:before{content:"\e662"}.reco-mayun:before{content:"\e6d0"}.reco-zhihu:before{content:"\e605"}.reco-facebook:before{content:"\e606"}.reco-taobao:before{content:"\e6a5"}.reco-tongzhi:before{content:"\e764"}.reco-douyin:before{content:"\e654"}.reco-v2ex:before{content:"\e62a"}.reco-sticky:before{content:"\e62b"}.reco-toutiao:before{content:"\e6b7"}.reco-linkedin:before{content:"\e668"}.reco-faq:before{content:"\e643"}.reco-twitter:before{content:"\e60b"}.reco-csdn:before{content:"\e609"}.reco-juejin:before{content:"\e613"}.content{margin:4rem auto 0;max-width:800px;padding:0 2rem}.mod_404 .desc .desc_link{display:inline-block;background:#424242!important;color:#fff;padding:6px 20px!important;text-decoration:none!important;border-radius:4px}@media screen and (max-width:720px){.mod_404 .desc{margin:50px 0}.mod_404 .wrapper{margin:0!important;padding-top:20px}}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.navbar .logo[data-v-e7537b8a]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}[data-v-e7537b8a]:root{--default-color-10:#fff;--default-color-9:hsla(0,0%,100%,0.9);--default-color-8:hsla(0,0%,100%,0.8);--default-color-7:hsla(0,0%,100%,0.7);--default-color-6:hsla(0,0%,100%,0.6);--default-color-5:hsla(0,0%,100%,0.5);--default-color-4:hsla(0,0%,100%,0.4);--default-color-3:hsla(0,0%,100%,0.3);--default-color-2:hsla(0,0%,100%,0.2);--default-color-1:hsla(0,0%,100%,0.1);--background-color:#fff;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.2);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.2);--text-color:#2c3e50;--text-color-sub:#7f7f7f;--border-color:#eaecef;--code-color:rgba(27,31,35,0.05);--mask-color:#888}@media (prefers-color-scheme:dark){[data-v-e7537b8a]:root{--default-color-10:#000;--default-color-9:rgba(0,0,0,0.9);--default-color-8:rgba(0,0,0,0.8);--default-color-7:rgba(0,0,0,0.7);--default-color-6:rgba(0,0,0,0.6);--default-color-5:rgba(0,0,0,0.5);--default-color-4:rgba(0,0,0,0.4);--default-color-3:rgba(0,0,0,0.3);--default-color-2:rgba(0,0,0,0.2);--default-color-1:rgba(0,0,0,0.1);--background-color:#181818;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.6);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.6);--text-color:hsla(0,0%,100%,0.8);--text-color-sub:#8b8b8b;--border-color:rgba(0,0,0,0.3);--code-color:rgba(0,0,0,0.3);--mask-color:#000}}.categories-wrapper[data-v-e7537b8a]{max-width:740px;margin:0 auto;padding:4.6rem 2.5rem 0}.categories-wrapper .category-wrapper[data-v-e7537b8a]{list-style:none;padding-left:0}.categories-wrapper .category-wrapper .category-item[data-v-e7537b8a]{vertical-align:middle;margin:4px 8px 10px;display:inline-block;cursor:pointer;border-radius:.25rem;font-size:13px;box-shadow:var(--box-shadow);transition:all .5s;background-color:var(--background-color)}.categories-wrapper .category-wrapper .category-item.active[data-v-e7537b8a],.categories-wrapper .category-wrapper .category-item[data-v-e7537b8a]:hover{background:#0074af}.categories-wrapper .category-wrapper .category-item.active a span.category-name[data-v-e7537b8a],.categories-wrapper .category-wrapper .category-item:hover a span.category-name[data-v-e7537b8a]{color:#fff}.categories-wrapper .category-wrapper .category-item.active a span.category-name .post-num[data-v-e7537b8a],.categories-wrapper .category-wrapper .category-item:hover a span.category-name .post-num[data-v-e7537b8a]{color:#0074af}.categories-wrapper .category-wrapper .category-item a[data-v-e7537b8a]{display:flex;box-sizing:border-box;width:100%;height:100%;padding:8px 14px;justify-content:space-between;align-items:center;color:#666}.categories-wrapper .category-wrapper .category-item a .post-num[data-v-e7537b8a]{margin-left:4px;width:1.2rem;height:1.2rem;text-align:center;line-height:1.2rem;border-radius:.25rem;font-size:.7rem;color:#fff}@media (max-width:719px){.categories-wrapper[data-v-e7537b8a]{padding:4.6rem 1rem 0}.page-edit .edit-link[data-v-e7537b8a]{margin-bottom:.5rem}.page-edit .last-updated[data-v-e7537b8a]{font-size:.8em;float:none;text-align:left}}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}:root{--default-color-10:#fff;--default-color-9:hsla(0,0%,100%,0.9);--default-color-8:hsla(0,0%,100%,0.8);--default-color-7:hsla(0,0%,100%,0.7);--default-color-6:hsla(0,0%,100%,0.6);--default-color-5:hsla(0,0%,100%,0.5);--default-color-4:hsla(0,0%,100%,0.4);--default-color-3:hsla(0,0%,100%,0.3);--default-color-2:hsla(0,0%,100%,0.2);--default-color-1:hsla(0,0%,100%,0.1);--background-color:#fff;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.2);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.2);--text-color:#2c3e50;--text-color-sub:#7f7f7f;--border-color:#eaecef;--code-color:rgba(27,31,35,0.05);--mask-color:#888}@media (prefers-color-scheme:dark){:root{--default-color-10:#000;--default-color-9:rgba(0,0,0,0.9);--default-color-8:rgba(0,0,0,0.8);--default-color-7:rgba(0,0,0,0.7);--default-color-6:rgba(0,0,0,0.6);--default-color-5:rgba(0,0,0,0.5);--default-color-4:rgba(0,0,0,0.4);--default-color-3:rgba(0,0,0,0.3);--default-color-2:rgba(0,0,0,0.2);--default-color-1:rgba(0,0,0,0.1);--background-color:#181818;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.6);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.6);--text-color:hsla(0,0%,100%,0.8);--text-color-sub:#8b8b8b;--border-color:rgba(0,0,0,0.3);--code-color:rgba(0,0,0,0.3);--mask-color:#000}}.content__default code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:var(--code-color);border-radius:3px}.content__default code .token.deleted{color:#ec5975}.content__default code .token.inserted{color:#0074af}.content__default pre,.content__default pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.content__default pre[class*=language-] code,.content__default pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:2.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:3.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:2.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number,div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:2.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:var(--code-color);border-color:#67cc86}.custom-block.tip .custom-block-title{color:#67cc86}.custom-block.warning{background-color:var(--code-color);border-color:#fb9b5f}.custom-block.warning .custom-block-title{color:#fb9b5f}.custom-block.danger{background-color:var(--code-color);border-color:#f26d6d}.custom-block.danger .custom-block-title{color:#f26d6d}.custom-block.right{color:rgba(0,0,0,.4);font-size:.9rem;text-align:right}.custom-block.theorem{margin:1rem 0;padding:.1rem 1.5rem;border-radius:.4rem;background-color:var(--code-color)}.custom-block.theorem .title{font-weight:700}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1em 0;padding:1rem;background-color:var(--code-color)}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid var(--text-color-sub)}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid var(--text-color-sub)}.arrow.right{border-left:6px solid var(--text-color-sub)}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid var(--text-color-sub)}.content__default:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.content__default:not(.custom){padding:2rem}}@media (max-width:419px){.content__default:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0}body{font-family:Ubuntu,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:15px;color:var(--text-color);background-color:var(--background-color)}.page,.password-wrapper-in{overflow-x:hidden;margin-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;box-sizing:border-box}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none;background-color:rgba(0,0,0,.65)}.sidebar{font-size:16px;background-color:var(--background-color);width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--border-color);overflow-y:auto}.content__default:not(.custom) a:hover{text-decoration:underline}.content__default:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.content__default:not(.custom) img{max-width:100%}.content__default.custom{padding:0;margin:0}.content__default.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#0074af}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:.9rem;color:#999;border-left:.25rem solid #999;background-color:var(--code-color);margin:.5rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.25}.content__default:not(.custom)>h1,.content__default:not(.custom)>h2,.content__default:not(.custom)>h3,.content__default:not(.custom)>h4,.content__default:not(.custom)>h5,.content__default:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.content__default:not(.custom)>h1:first-child,.content__default:not(.custom)>h2:first-child,.content__default:not(.custom)>h3:first-child,.content__default:not(.custom)>h4:first-child,.content__default:not(.custom)>h5:first-child,.content__default:not(.custom)>h6:first-child{margin-top:-3.5rem;margin-bottom:1rem}.content__default:not(.custom)>h1:first-child+.custom-block,.content__default:not(.custom)>h1:first-child+p,.content__default:not(.custom)>h1:first-child+pre,.content__default:not(.custom)>h2:first-child+.custom-block,.content__default:not(.custom)>h2:first-child+p,.content__default:not(.custom)>h2:first-child+pre,.content__default:not(.custom)>h3:first-child+.custom-block,.content__default:not(.custom)>h3:first-child+p,.content__default:not(.custom)>h3:first-child+pre,.content__default:not(.custom)>h4:first-child+.custom-block,.content__default:not(.custom)>h4:first-child+p,.content__default:not(.custom)>h4:first-child+pre,.content__default:not(.custom)>h5:first-child+.custom-block,.content__default:not(.custom)>h5:first-child+p,.content__default:not(.custom)>h5:first-child+pre,.content__default:not(.custom)>h6:first-child+.custom-block,.content__default:not(.custom)>h6:first-child+p,.content__default:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:1.6rem}h2{font-size:1.4rem;padding-bottom:.3rem;border-bottom:1px solid var(--border-color)}h3{font-size:1.2rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid var(--border-color)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid var(--border-color)}tr:nth-child(2n){background-color:var(--code-color)}td,th{border:1px solid var(--border-color);padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .content__default:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page,.theme-container.no-sidebar .password-wrapper-in{margin-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page,.password-wrapper-in{margin-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page,.password-wrapper-in{margin-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}.password-shadow{padding-left:0}}@media (max-width:419px){h1{font-size:1.9rem}.content__default div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.iconfont{font-size:.9rem;color:var(--text-color-sub)}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-thumb:vertical{height:5px;background-color:#0074af}::-webkit-scrollbar-thumb:horizontal{width:5px;background-color:#0074af}.vuepress-flowchart{overflow:auto}.sw-update-popup{border-radius:.25rem!important;box-shadow:var(--box-shadow)!important;color:var(--text-color)!important;background:var(--background-color)!important;border:none!important}.sw-update-popup>button{background:#0074af;border-radius:.25rem;color:#fff;-webkit-tap-highlight-color:rgba(0,0,0,0);border:none}.navbar .logo[data-v-7984cb6f]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}[data-v-7984cb6f]:root{--default-color-10:#fff;--default-color-9:hsla(0,0%,100%,0.9);--default-color-8:hsla(0,0%,100%,0.8);--default-color-7:hsla(0,0%,100%,0.7);--default-color-6:hsla(0,0%,100%,0.6);--default-color-5:hsla(0,0%,100%,0.5);--default-color-4:hsla(0,0%,100%,0.4);--default-color-3:hsla(0,0%,100%,0.3);--default-color-2:hsla(0,0%,100%,0.2);--default-color-1:hsla(0,0%,100%,0.1);--background-color:#fff;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.2);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.2);--text-color:#2c3e50;--text-color-sub:#7f7f7f;--border-color:#eaecef;--code-color:rgba(27,31,35,0.05);--mask-color:#888}@media (prefers-color-scheme:dark){[data-v-7984cb6f]:root{--default-color-10:#000;--default-color-9:rgba(0,0,0,0.9);--default-color-8:rgba(0,0,0,0.8);--default-color-7:rgba(0,0,0,0.7);--default-color-6:rgba(0,0,0,0.6);--default-color-5:rgba(0,0,0,0.5);--default-color-4:rgba(0,0,0,0.4);--default-color-3:rgba(0,0,0,0.3);--default-color-2:rgba(0,0,0,0.2);--default-color-1:rgba(0,0,0,0.1);--background-color:#181818;--box-shadow:0 1px 6px 0 rgba(0,0,0,0.6);--box-shadow-hover:0 2px 16px 0 rgba(0,0,0,0.6);--text-color:hsla(0,0%,100%,0.8);--text-color-sub:#8b8b8b;--border-color:rgba(0,0,0,0.3);--code-color:rgba(0,0,0,0.3);--mask-color:#000}}.tag-wrapper[data-v-7984cb6f]{max-width:740px;margin:0 auto;padding:4.6rem 2.5rem 0}@media (max-width:719px){.tag-wrapper[data-v-7984cb6f]{padding:4.6rem 1rem 0}}.navbar .logo[data-v-31ab3906]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}.tags-wrapper[data-v-31ab3906]{max-width:740px;margin:0 auto;padding:4.6rem 2.5rem 0}@media (max-width:719px){.tags-wrapper[data-v-31ab3906]{padding:5rem .6rem 0}}.navbar .logo[data-v-8590c612]{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top;border-radius:0}.timeline-wrapper[data-v-8590c612]{max-width:740px;margin:0 auto;padding:4.6rem 2.5rem 0}.timeline-wrapper .timeline-content[data-v-8590c612]{box-sizing:border-box;position:relative;list-style:none}.timeline-wrapper .timeline-content[data-v-8590c612]:after{content:" ";position:absolute;top:14px;left:0;z-index:-1;margin-left:-2px;width:4px;height:100%;background:var(--border-color)}.timeline-wrapper .timeline-content .desc[data-v-8590c612],.timeline-wrapper .timeline-content .year[data-v-8590c612]{position:relative;color:var(--text-color);font-size:16px}.timeline-wrapper .timeline-content .desc[data-v-8590c612]:before,.timeline-wrapper .timeline-content .year[data-v-8590c612]:before{content:" ";position:absolute;z-index:2;left:-20px;top:50%;margin-left:-4px;margin-top:-4px;width:8px;height:8px;background:var(--background-color);border:1px solid var(--border-color);border-radius:50%}.timeline-wrapper .timeline-content .year[data-v-8590c612]{margin:80px 0 0;color:var(--text-color);font-weight:700;font-size:26px}.timeline-wrapper .timeline-content .year-wrapper[data-v-8590c612]{padding-left:0!important}.timeline-wrapper .timeline-content .year-wrapper li[data-v-8590c612]{display:flex;padding:30px 0 10px;list-style:none;border-bottom:1px dashed var(--border-color);position:relative}.timeline-wrapper .timeline-content .year-wrapper li:hover .date[data-v-8590c612]{color:#0074af}.timeline-wrapper .timeline-content .year-wrapper li:hover .date[data-v-8590c612]:before{background:#0074af}.timeline-wrapper .timeline-content .year-wrapper li:hover .title[data-v-8590c612]{color:#0074af}.timeline-wrapper .timeline-content .year-wrapper li .date[data-v-8590c612]{width:40px;line-height:30px;color:var(--text-color-sub);font-size:12px}.timeline-wrapper .timeline-content .year-wrapper li .date[data-v-8590c612]:before{content:" ";position:absolute;left:-19px;top:41px;width:6px;height:6px;margin-left:-4px;background:var(--background-color);border-radius:50%;border:1px solid var(--border-color);z-index:2}.timeline-wrapper .timeline-content .year-wrapper li .title[data-v-8590c612]{line-height:30px;color:var(--text-color-sub);font-size:16px;cursor:pointer}@media (max-width:719px){.timeline-wrapper[data-v-8590c612]{margin:0 1.2rem}} \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/img/1.01bdd0e0.jpg b/learning/.vuepress/dist/assets/img/1.01bdd0e0.jpg deleted file mode 100644 index 8b38d5e3..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.01bdd0e0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.03e01a60.jpg b/learning/.vuepress/dist/assets/img/1.03e01a60.jpg deleted file mode 100644 index c2a8f8f2..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.03e01a60.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.048fe315.jpg b/learning/.vuepress/dist/assets/img/1.048fe315.jpg deleted file mode 100644 index 138432d6..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.048fe315.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.04bdda04.png b/learning/.vuepress/dist/assets/img/1.04bdda04.png deleted file mode 100644 index da859a9f..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.04bdda04.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.0507c071.jpg b/learning/.vuepress/dist/assets/img/1.0507c071.jpg deleted file mode 100644 index 3f8be3f2..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.0507c071.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.057d45eb.jpg b/learning/.vuepress/dist/assets/img/1.057d45eb.jpg deleted file mode 100644 index f96263c2..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.057d45eb.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.0690e47c.jpg b/learning/.vuepress/dist/assets/img/1.0690e47c.jpg deleted file mode 100644 index f0366b31..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.0690e47c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.1605b951.jpg b/learning/.vuepress/dist/assets/img/1.1605b951.jpg deleted file mode 100644 index f193abe7..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.1605b951.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.167e9c39.jpg b/learning/.vuepress/dist/assets/img/1.167e9c39.jpg deleted file mode 100644 index 845766ef..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.167e9c39.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.18f4e142.jpg b/learning/.vuepress/dist/assets/img/1.18f4e142.jpg deleted file mode 100644 index a62f8bca..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.18f4e142.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.1ad4dbe0.jpg b/learning/.vuepress/dist/assets/img/1.1ad4dbe0.jpg deleted file mode 100644 index 6efd8e56..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.1ad4dbe0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.1afc39f1.png b/learning/.vuepress/dist/assets/img/1.1afc39f1.png deleted file mode 100644 index 945c206e..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.1afc39f1.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.1fdf7c8b.jpg b/learning/.vuepress/dist/assets/img/1.1fdf7c8b.jpg deleted file mode 100644 index ce451f3f..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.1fdf7c8b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.21ffa5ba.jpg b/learning/.vuepress/dist/assets/img/1.21ffa5ba.jpg deleted file mode 100644 index 41ca46af..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.21ffa5ba.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.26128aab.jpg b/learning/.vuepress/dist/assets/img/1.26128aab.jpg deleted file mode 100644 index f8d478a6..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.26128aab.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.277dc868.jpg b/learning/.vuepress/dist/assets/img/1.277dc868.jpg deleted file mode 100644 index b5e051f7..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.277dc868.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.2c7f8b37.gif b/learning/.vuepress/dist/assets/img/1.2c7f8b37.gif deleted file mode 100644 index 0bae8e03..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.2c7f8b37.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.309ccfa3.gif b/learning/.vuepress/dist/assets/img/1.309ccfa3.gif deleted file mode 100644 index c481c242..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.309ccfa3.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.3cb2cf78.jpg b/learning/.vuepress/dist/assets/img/1.3cb2cf78.jpg deleted file mode 100644 index aa0fb89d..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.3cb2cf78.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.458698c8.jpg b/learning/.vuepress/dist/assets/img/1.458698c8.jpg deleted file mode 100644 index e5a887ff..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.458698c8.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.4875b097.jpg b/learning/.vuepress/dist/assets/img/1.4875b097.jpg deleted file mode 100644 index 2bcdaef7..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.4875b097.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.4a84211e.jpg b/learning/.vuepress/dist/assets/img/1.4a84211e.jpg deleted file mode 100644 index 46b98652..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.4a84211e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.5118c910.gif b/learning/.vuepress/dist/assets/img/1.5118c910.gif deleted file mode 100644 index 4ab62695..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.5118c910.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.57963985.jpg b/learning/.vuepress/dist/assets/img/1.57963985.jpg deleted file mode 100644 index 6085f015..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.57963985.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.58ab1a31.png b/learning/.vuepress/dist/assets/img/1.58ab1a31.png deleted file mode 100644 index 55f7571e..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.58ab1a31.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.5b25afb3.jpg b/learning/.vuepress/dist/assets/img/1.5b25afb3.jpg deleted file mode 100644 index 217d4492..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.5b25afb3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.5ce7b4a9.jpg b/learning/.vuepress/dist/assets/img/1.5ce7b4a9.jpg deleted file mode 100644 index 976079a5..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.5ce7b4a9.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.5d3b351e.jpg b/learning/.vuepress/dist/assets/img/1.5d3b351e.jpg deleted file mode 100644 index 8d5ed526..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.5d3b351e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.651abd82.jpg b/learning/.vuepress/dist/assets/img/1.651abd82.jpg deleted file mode 100644 index b8a23a2c..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.651abd82.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.6b32d5f0.jpg b/learning/.vuepress/dist/assets/img/1.6b32d5f0.jpg deleted file mode 100644 index 5860d330..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.6b32d5f0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.6f166662.jpg b/learning/.vuepress/dist/assets/img/1.6f166662.jpg deleted file mode 100644 index b1b52487..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.6f166662.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.71519116.jpg b/learning/.vuepress/dist/assets/img/1.71519116.jpg deleted file mode 100644 index 2c312338..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.71519116.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.7628e6d5.jpg b/learning/.vuepress/dist/assets/img/1.7628e6d5.jpg deleted file mode 100644 index 9a5dd93c..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.7628e6d5.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.77d1279c.jpg b/learning/.vuepress/dist/assets/img/1.77d1279c.jpg deleted file mode 100644 index edc89320..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.77d1279c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.78783a70.jpg b/learning/.vuepress/dist/assets/img/1.78783a70.jpg deleted file mode 100644 index 5f42d4c8..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.78783a70.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.7a0a4d35.jpg b/learning/.vuepress/dist/assets/img/1.7a0a4d35.jpg deleted file mode 100644 index 422bfc6f..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.7a0a4d35.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.7c9cc0a7.png b/learning/.vuepress/dist/assets/img/1.7c9cc0a7.png deleted file mode 100644 index 9d45397d..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.7c9cc0a7.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.7d598a13.jpg b/learning/.vuepress/dist/assets/img/1.7d598a13.jpg deleted file mode 100644 index 7bcb1f99..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.7d598a13.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.81971505.jpg b/learning/.vuepress/dist/assets/img/1.81971505.jpg deleted file mode 100644 index 28bfac19..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.81971505.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.84a19499.jpg b/learning/.vuepress/dist/assets/img/1.84a19499.jpg deleted file mode 100644 index b784c015..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.84a19499.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.85b7a011.jpg b/learning/.vuepress/dist/assets/img/1.85b7a011.jpg deleted file mode 100644 index 68f3269f..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.85b7a011.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.88792000.jpg b/learning/.vuepress/dist/assets/img/1.88792000.jpg deleted file mode 100644 index 3878fadd..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.88792000.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.910339d0.jpg b/learning/.vuepress/dist/assets/img/1.910339d0.jpg deleted file mode 100644 index 39c8566f..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.910339d0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.a1d47533.jpg b/learning/.vuepress/dist/assets/img/1.a1d47533.jpg deleted file mode 100644 index 71e89575..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.a1d47533.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.a3360867.jpg b/learning/.vuepress/dist/assets/img/1.a3360867.jpg deleted file mode 100644 index 34937480..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.a3360867.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.adc871d9.jpg b/learning/.vuepress/dist/assets/img/1.adc871d9.jpg deleted file mode 100644 index c96e9940..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.adc871d9.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.baeb33a7.jpg b/learning/.vuepress/dist/assets/img/1.baeb33a7.jpg deleted file mode 100644 index d1a4e76c..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.baeb33a7.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.be7ce0b0.jpg b/learning/.vuepress/dist/assets/img/1.be7ce0b0.jpg deleted file mode 100644 index c92a1d51..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.be7ce0b0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.c0e67383.png b/learning/.vuepress/dist/assets/img/1.c0e67383.png deleted file mode 100644 index 61c82c35..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.c0e67383.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.c1a9953b.jpg b/learning/.vuepress/dist/assets/img/1.c1a9953b.jpg deleted file mode 100644 index f82d2c4d..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.c1a9953b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.c6534889.jpg b/learning/.vuepress/dist/assets/img/1.c6534889.jpg deleted file mode 100644 index 709cf433..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.c6534889.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.c67a662e.png b/learning/.vuepress/dist/assets/img/1.c67a662e.png deleted file mode 100644 index 10402e12..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.c67a662e.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.c8aefc09.gif b/learning/.vuepress/dist/assets/img/1.c8aefc09.gif deleted file mode 100644 index b3379672..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.c8aefc09.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.ca86a52f.png b/learning/.vuepress/dist/assets/img/1.ca86a52f.png deleted file mode 100644 index 356397ea..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.ca86a52f.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.d0382e2a.jpg b/learning/.vuepress/dist/assets/img/1.d0382e2a.jpg deleted file mode 100644 index 8e154042..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.d0382e2a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.d12167e7.jpg b/learning/.vuepress/dist/assets/img/1.d12167e7.jpg deleted file mode 100644 index b6ded2f1..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.d12167e7.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.d58fcd9b.jpg b/learning/.vuepress/dist/assets/img/1.d58fcd9b.jpg deleted file mode 100644 index 1ec9f5ea..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.d58fcd9b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.d68e1fd6.jpg b/learning/.vuepress/dist/assets/img/1.d68e1fd6.jpg deleted file mode 100644 index c183b160..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.d68e1fd6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.d9839c79.jpg b/learning/.vuepress/dist/assets/img/1.d9839c79.jpg deleted file mode 100644 index 5652498d..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.d9839c79.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.dccce91b.jpg b/learning/.vuepress/dist/assets/img/1.dccce91b.jpg deleted file mode 100644 index 2c06c4f7..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.dccce91b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.df8eb526.jpg b/learning/.vuepress/dist/assets/img/1.df8eb526.jpg deleted file mode 100644 index 2a9867cd..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.df8eb526.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.e3a1f41f.gif b/learning/.vuepress/dist/assets/img/1.e3a1f41f.gif deleted file mode 100644 index f29e0232..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.e3a1f41f.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.e443c271.jpg b/learning/.vuepress/dist/assets/img/1.e443c271.jpg deleted file mode 100644 index 0f596e3e..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.e443c271.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.e6629cc3.jpg b/learning/.vuepress/dist/assets/img/1.e6629cc3.jpg deleted file mode 100644 index c970f092..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.e6629cc3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.e921e02f.jpg b/learning/.vuepress/dist/assets/img/1.e921e02f.jpg deleted file mode 100644 index a31190c7..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.e921e02f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.e9ab843e.png b/learning/.vuepress/dist/assets/img/1.e9ab843e.png deleted file mode 100644 index 76008243..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.e9ab843e.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.f0787d40.gif b/learning/.vuepress/dist/assets/img/1.f0787d40.gif deleted file mode 100644 index 22eea653..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.f0787d40.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.f2fa777d.jpg b/learning/.vuepress/dist/assets/img/1.f2fa777d.jpg deleted file mode 100644 index afcbaa8f..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.f2fa777d.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.f32a0445.jpg b/learning/.vuepress/dist/assets/img/1.f32a0445.jpg deleted file mode 100644 index 0cc592b4..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.f32a0445.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.f3588f7c.jpg b/learning/.vuepress/dist/assets/img/1.f3588f7c.jpg deleted file mode 100644 index 9015652e..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.f3588f7c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.f441ca2d.jpg b/learning/.vuepress/dist/assets/img/1.f441ca2d.jpg deleted file mode 100644 index d358abd5..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.f441ca2d.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.f5c13fd2.jpg b/learning/.vuepress/dist/assets/img/1.f5c13fd2.jpg deleted file mode 100644 index 95375f71..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.f5c13fd2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.f680c845.jpg b/learning/.vuepress/dist/assets/img/1.f680c845.jpg deleted file mode 100644 index 55ad9af8..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.f680c845.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.f9b4ce18.jpg b/learning/.vuepress/dist/assets/img/1.f9b4ce18.jpg deleted file mode 100644 index c4d610bd..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.f9b4ce18.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.fae9c798.gif b/learning/.vuepress/dist/assets/img/1.fae9c798.gif deleted file mode 100644 index ce23f4f6..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.fae9c798.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/1.fee741e6.jpg b/learning/.vuepress/dist/assets/img/1.fee741e6.jpg deleted file mode 100644 index aa5ea146..00000000 Binary files a/learning/.vuepress/dist/assets/img/1.fee741e6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.063d52f8.jpg b/learning/.vuepress/dist/assets/img/10.063d52f8.jpg deleted file mode 100644 index 5f411cec..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.063d52f8.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.170a7f3c.gif b/learning/.vuepress/dist/assets/img/10.170a7f3c.gif deleted file mode 100644 index c6742a7e..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.170a7f3c.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.1e64ecfb.jpg b/learning/.vuepress/dist/assets/img/10.1e64ecfb.jpg deleted file mode 100644 index be95ab15..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.1e64ecfb.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.4c4c11dd.jpg b/learning/.vuepress/dist/assets/img/10.4c4c11dd.jpg deleted file mode 100644 index f29fc513..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.4c4c11dd.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.636058c2.jpg b/learning/.vuepress/dist/assets/img/10.636058c2.jpg deleted file mode 100644 index 3d23366f..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.636058c2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.75d5930d.jpg b/learning/.vuepress/dist/assets/img/10.75d5930d.jpg deleted file mode 100644 index 6b9dfdc1..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.75d5930d.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.7645bc40.jpg b/learning/.vuepress/dist/assets/img/10.7645bc40.jpg deleted file mode 100644 index 0fa478ab..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.7645bc40.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.b01bb056.jpeg b/learning/.vuepress/dist/assets/img/10.b01bb056.jpeg deleted file mode 100644 index f48b8b94..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.b01bb056.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.b3a11a41.jpg b/learning/.vuepress/dist/assets/img/10.b3a11a41.jpg deleted file mode 100644 index 7cbc23a1..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.b3a11a41.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.be8b0242.jpg b/learning/.vuepress/dist/assets/img/10.be8b0242.jpg deleted file mode 100644 index 453449b3..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.be8b0242.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.cc9e7651.jpg b/learning/.vuepress/dist/assets/img/10.cc9e7651.jpg deleted file mode 100644 index 98aa8634..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.cc9e7651.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/10.f6fd1f71.jpg b/learning/.vuepress/dist/assets/img/10.f6fd1f71.jpg deleted file mode 100644 index cda65c2b..00000000 Binary files a/learning/.vuepress/dist/assets/img/10.f6fd1f71.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/11.02c892eb.jpg b/learning/.vuepress/dist/assets/img/11.02c892eb.jpg deleted file mode 100644 index 099c315a..00000000 Binary files a/learning/.vuepress/dist/assets/img/11.02c892eb.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/11.1ae1fab1.jpg b/learning/.vuepress/dist/assets/img/11.1ae1fab1.jpg deleted file mode 100644 index 7956b46c..00000000 Binary files a/learning/.vuepress/dist/assets/img/11.1ae1fab1.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/11.21270f34.jpg b/learning/.vuepress/dist/assets/img/11.21270f34.jpg deleted file mode 100644 index 609af413..00000000 Binary files a/learning/.vuepress/dist/assets/img/11.21270f34.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/11.62c59617.jpeg b/learning/.vuepress/dist/assets/img/11.62c59617.jpeg deleted file mode 100644 index 08fb8ddf..00000000 Binary files a/learning/.vuepress/dist/assets/img/11.62c59617.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/11.764c6ff1.jpg b/learning/.vuepress/dist/assets/img/11.764c6ff1.jpg deleted file mode 100644 index 8d73766f..00000000 Binary files a/learning/.vuepress/dist/assets/img/11.764c6ff1.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/11.b3b5c2b3.jpg b/learning/.vuepress/dist/assets/img/11.b3b5c2b3.jpg deleted file mode 100644 index 83c9f3cc..00000000 Binary files a/learning/.vuepress/dist/assets/img/11.b3b5c2b3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/11.b8f438c1.jpg b/learning/.vuepress/dist/assets/img/11.b8f438c1.jpg deleted file mode 100644 index a6508f8e..00000000 Binary files a/learning/.vuepress/dist/assets/img/11.b8f438c1.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/11.ec2b1f7f.jpg b/learning/.vuepress/dist/assets/img/11.ec2b1f7f.jpg deleted file mode 100644 index 4ef1a988..00000000 Binary files a/learning/.vuepress/dist/assets/img/11.ec2b1f7f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/11.fda608bf.jpg b/learning/.vuepress/dist/assets/img/11.fda608bf.jpg deleted file mode 100644 index 976aa822..00000000 Binary files a/learning/.vuepress/dist/assets/img/11.fda608bf.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/12.0cec972f.jpg b/learning/.vuepress/dist/assets/img/12.0cec972f.jpg deleted file mode 100644 index 70839b28..00000000 Binary files a/learning/.vuepress/dist/assets/img/12.0cec972f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/12.0f33a19f.jpg b/learning/.vuepress/dist/assets/img/12.0f33a19f.jpg deleted file mode 100644 index 89d55917..00000000 Binary files a/learning/.vuepress/dist/assets/img/12.0f33a19f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/12.35e54239.jpg b/learning/.vuepress/dist/assets/img/12.35e54239.jpg deleted file mode 100644 index 2493e472..00000000 Binary files a/learning/.vuepress/dist/assets/img/12.35e54239.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/12.5a12e850.jpg b/learning/.vuepress/dist/assets/img/12.5a12e850.jpg deleted file mode 100644 index 986f122c..00000000 Binary files a/learning/.vuepress/dist/assets/img/12.5a12e850.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/12.8e7f1b16.jpg b/learning/.vuepress/dist/assets/img/12.8e7f1b16.jpg deleted file mode 100644 index 5db00ed6..00000000 Binary files a/learning/.vuepress/dist/assets/img/12.8e7f1b16.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/12.a3ded824.jpeg b/learning/.vuepress/dist/assets/img/12.a3ded824.jpeg deleted file mode 100644 index 0db49e3e..00000000 Binary files a/learning/.vuepress/dist/assets/img/12.a3ded824.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/12.af85a7e4.jpg b/learning/.vuepress/dist/assets/img/12.af85a7e4.jpg deleted file mode 100644 index a65bc562..00000000 Binary files a/learning/.vuepress/dist/assets/img/12.af85a7e4.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/12.b9283517.jpeg b/learning/.vuepress/dist/assets/img/12.b9283517.jpeg deleted file mode 100644 index 5f37ea5b..00000000 Binary files a/learning/.vuepress/dist/assets/img/12.b9283517.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/12.db457c21.gif b/learning/.vuepress/dist/assets/img/12.db457c21.gif deleted file mode 100644 index cf349b1d..00000000 Binary files a/learning/.vuepress/dist/assets/img/12.db457c21.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/13.4a93ccb0.jpg b/learning/.vuepress/dist/assets/img/13.4a93ccb0.jpg deleted file mode 100644 index 0a0c8bf9..00000000 Binary files a/learning/.vuepress/dist/assets/img/13.4a93ccb0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/13.7a6723fa.jpg b/learning/.vuepress/dist/assets/img/13.7a6723fa.jpg deleted file mode 100644 index 1d316179..00000000 Binary files a/learning/.vuepress/dist/assets/img/13.7a6723fa.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/13.84c20ce8.jpg b/learning/.vuepress/dist/assets/img/13.84c20ce8.jpg deleted file mode 100644 index afc59917..00000000 Binary files a/learning/.vuepress/dist/assets/img/13.84c20ce8.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/13.b47b0563.jpg b/learning/.vuepress/dist/assets/img/13.b47b0563.jpg deleted file mode 100644 index a28d9060..00000000 Binary files a/learning/.vuepress/dist/assets/img/13.b47b0563.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/13.cc3506e4.gif b/learning/.vuepress/dist/assets/img/13.cc3506e4.gif deleted file mode 100644 index cdf43fcc..00000000 Binary files a/learning/.vuepress/dist/assets/img/13.cc3506e4.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/13.e94b5ec0.jpg b/learning/.vuepress/dist/assets/img/13.e94b5ec0.jpg deleted file mode 100644 index a0793a24..00000000 Binary files a/learning/.vuepress/dist/assets/img/13.e94b5ec0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/14.18d289c2.jpg b/learning/.vuepress/dist/assets/img/14.18d289c2.jpg deleted file mode 100644 index 939d4167..00000000 Binary files a/learning/.vuepress/dist/assets/img/14.18d289c2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/14.6369e786.jpg b/learning/.vuepress/dist/assets/img/14.6369e786.jpg deleted file mode 100644 index 3f100251..00000000 Binary files a/learning/.vuepress/dist/assets/img/14.6369e786.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/14.6eb82e3c.jpg b/learning/.vuepress/dist/assets/img/14.6eb82e3c.jpg deleted file mode 100644 index c1cdfd52..00000000 Binary files a/learning/.vuepress/dist/assets/img/14.6eb82e3c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/14.79bfef1d.jpg b/learning/.vuepress/dist/assets/img/14.79bfef1d.jpg deleted file mode 100644 index b8871ac8..00000000 Binary files a/learning/.vuepress/dist/assets/img/14.79bfef1d.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/15.161e5f96.jpg b/learning/.vuepress/dist/assets/img/15.161e5f96.jpg deleted file mode 100644 index b4f94922..00000000 Binary files a/learning/.vuepress/dist/assets/img/15.161e5f96.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/15.9c3af63a.jpg b/learning/.vuepress/dist/assets/img/15.9c3af63a.jpg deleted file mode 100644 index ddc1f71b..00000000 Binary files a/learning/.vuepress/dist/assets/img/15.9c3af63a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/15.b59c6be6.jpg b/learning/.vuepress/dist/assets/img/15.b59c6be6.jpg deleted file mode 100644 index 1b7c7ffb..00000000 Binary files a/learning/.vuepress/dist/assets/img/15.b59c6be6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/15.e8fcfbb5.jpg b/learning/.vuepress/dist/assets/img/15.e8fcfbb5.jpg deleted file mode 100644 index a9c89bda..00000000 Binary files a/learning/.vuepress/dist/assets/img/15.e8fcfbb5.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/16.30313cbf.jpg b/learning/.vuepress/dist/assets/img/16.30313cbf.jpg deleted file mode 100644 index ed2837ca..00000000 Binary files a/learning/.vuepress/dist/assets/img/16.30313cbf.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/16.da98407a.jpg b/learning/.vuepress/dist/assets/img/16.da98407a.jpg deleted file mode 100644 index b36166a2..00000000 Binary files a/learning/.vuepress/dist/assets/img/16.da98407a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/16.e723d28e.jpg b/learning/.vuepress/dist/assets/img/16.e723d28e.jpg deleted file mode 100644 index 24425dca..00000000 Binary files a/learning/.vuepress/dist/assets/img/16.e723d28e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/17.45ce22f3.jpg b/learning/.vuepress/dist/assets/img/17.45ce22f3.jpg deleted file mode 100644 index 256099b1..00000000 Binary files a/learning/.vuepress/dist/assets/img/17.45ce22f3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/17.6750d734.jpg b/learning/.vuepress/dist/assets/img/17.6750d734.jpg deleted file mode 100644 index 28e7d8d6..00000000 Binary files a/learning/.vuepress/dist/assets/img/17.6750d734.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/17.8417ebd0.jpg b/learning/.vuepress/dist/assets/img/17.8417ebd0.jpg deleted file mode 100644 index 91146ee6..00000000 Binary files a/learning/.vuepress/dist/assets/img/17.8417ebd0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/18.4a63b81e.jpg b/learning/.vuepress/dist/assets/img/18.4a63b81e.jpg deleted file mode 100644 index 73e69781..00000000 Binary files a/learning/.vuepress/dist/assets/img/18.4a63b81e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/18.955ef13b.jpg b/learning/.vuepress/dist/assets/img/18.955ef13b.jpg deleted file mode 100644 index eb7dda94..00000000 Binary files a/learning/.vuepress/dist/assets/img/18.955ef13b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/19.99629451.jpg b/learning/.vuepress/dist/assets/img/19.99629451.jpg deleted file mode 100644 index 3f50beaa..00000000 Binary files a/learning/.vuepress/dist/assets/img/19.99629451.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.07279503.jpeg b/learning/.vuepress/dist/assets/img/2.07279503.jpeg deleted file mode 100644 index f5d938dc..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.07279503.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.15ab51a5.jpg b/learning/.vuepress/dist/assets/img/2.15ab51a5.jpg deleted file mode 100644 index d947d9c1..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.15ab51a5.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.1d7ed267.jpg b/learning/.vuepress/dist/assets/img/2.1d7ed267.jpg deleted file mode 100644 index c95549f6..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.1d7ed267.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.20c68c2c.jpg b/learning/.vuepress/dist/assets/img/2.20c68c2c.jpg deleted file mode 100644 index 4ceb6954..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.20c68c2c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.21e27729.jpg b/learning/.vuepress/dist/assets/img/2.21e27729.jpg deleted file mode 100644 index e0a574d8..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.21e27729.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.2441502e.png b/learning/.vuepress/dist/assets/img/2.2441502e.png deleted file mode 100644 index f36d8a49..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.2441502e.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.2ea69152.jpg b/learning/.vuepress/dist/assets/img/2.2ea69152.jpg deleted file mode 100644 index 8da8f340..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.2ea69152.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.35fc1054.jpg b/learning/.vuepress/dist/assets/img/2.35fc1054.jpg deleted file mode 100644 index d8a11e04..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.35fc1054.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.394d94e3.jpg b/learning/.vuepress/dist/assets/img/2.394d94e3.jpg deleted file mode 100644 index 97af01ad..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.394d94e3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.3bd5679a.jpg b/learning/.vuepress/dist/assets/img/2.3bd5679a.jpg deleted file mode 100644 index 39d19bef..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.3bd5679a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.3e1b3fee.jpg b/learning/.vuepress/dist/assets/img/2.3e1b3fee.jpg deleted file mode 100644 index 6372b159..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.3e1b3fee.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.3fcd5ea8.jpg b/learning/.vuepress/dist/assets/img/2.3fcd5ea8.jpg deleted file mode 100644 index 035a1acb..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.3fcd5ea8.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.4349c876.jpg b/learning/.vuepress/dist/assets/img/2.4349c876.jpg deleted file mode 100644 index 2814ba43..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.4349c876.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.44c23f2f.png b/learning/.vuepress/dist/assets/img/2.44c23f2f.png deleted file mode 100644 index 042887e0..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.44c23f2f.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.48a1792a.jpg b/learning/.vuepress/dist/assets/img/2.48a1792a.jpg deleted file mode 100644 index 352503d1..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.48a1792a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.4a60b533.jpg b/learning/.vuepress/dist/assets/img/2.4a60b533.jpg deleted file mode 100644 index e167a5d2..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.4a60b533.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.55e8dff6.jpg b/learning/.vuepress/dist/assets/img/2.55e8dff6.jpg deleted file mode 100644 index 449375b7..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.55e8dff6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.583ba8c5.png b/learning/.vuepress/dist/assets/img/2.583ba8c5.png deleted file mode 100644 index 63f1cfe8..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.583ba8c5.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.58e28193.png b/learning/.vuepress/dist/assets/img/2.58e28193.png deleted file mode 100644 index 53c5b9dc..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.58e28193.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.5a2adb1f.jpg b/learning/.vuepress/dist/assets/img/2.5a2adb1f.jpg deleted file mode 100644 index 94eae76a..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.5a2adb1f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.5e72397e.jpg b/learning/.vuepress/dist/assets/img/2.5e72397e.jpg deleted file mode 100644 index 07103f69..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.5e72397e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.5e908ad4.jpg b/learning/.vuepress/dist/assets/img/2.5e908ad4.jpg deleted file mode 100644 index 3bbc3e53..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.5e908ad4.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.652e2a32.gif b/learning/.vuepress/dist/assets/img/2.652e2a32.gif deleted file mode 100644 index f6f5ad72..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.652e2a32.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.6915c926.png b/learning/.vuepress/dist/assets/img/2.6915c926.png deleted file mode 100644 index d86cfd57..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.6915c926.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.6ab27c2d.png b/learning/.vuepress/dist/assets/img/2.6ab27c2d.png deleted file mode 100644 index 44706d61..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.6ab27c2d.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.6c7de304.jpeg b/learning/.vuepress/dist/assets/img/2.6c7de304.jpeg deleted file mode 100644 index c5c9e2aa..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.6c7de304.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.7985fafb.jpg b/learning/.vuepress/dist/assets/img/2.7985fafb.jpg deleted file mode 100644 index 3d5ead67..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.7985fafb.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.85163e0d.gif b/learning/.vuepress/dist/assets/img/2.85163e0d.gif deleted file mode 100644 index cbbbda53..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.85163e0d.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.883bcd77.jpg b/learning/.vuepress/dist/assets/img/2.883bcd77.jpg deleted file mode 100644 index db36f1f6..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.883bcd77.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.8946b15e.jpg b/learning/.vuepress/dist/assets/img/2.8946b15e.jpg deleted file mode 100644 index d1b4c199..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.8946b15e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.90adfc88.jpg b/learning/.vuepress/dist/assets/img/2.90adfc88.jpg deleted file mode 100644 index 02e145b3..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.90adfc88.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.915bf0c2.jpg b/learning/.vuepress/dist/assets/img/2.915bf0c2.jpg deleted file mode 100644 index e6d7a86f..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.915bf0c2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.92dd024b.jpg b/learning/.vuepress/dist/assets/img/2.92dd024b.jpg deleted file mode 100644 index adee0122..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.92dd024b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.93e61020.png b/learning/.vuepress/dist/assets/img/2.93e61020.png deleted file mode 100644 index 2c0bedbd..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.93e61020.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.9d2cac0d.jpg b/learning/.vuepress/dist/assets/img/2.9d2cac0d.jpg deleted file mode 100644 index d0dfd0ce..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.9d2cac0d.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.a079fe2e.jpg b/learning/.vuepress/dist/assets/img/2.a079fe2e.jpg deleted file mode 100644 index 192994dd..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.a079fe2e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.a3352c98.jpg b/learning/.vuepress/dist/assets/img/2.a3352c98.jpg deleted file mode 100644 index 58188c2f..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.a3352c98.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.a51900c0.jpg b/learning/.vuepress/dist/assets/img/2.a51900c0.jpg deleted file mode 100644 index 1b16dfd5..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.a51900c0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.a554b385.jpg b/learning/.vuepress/dist/assets/img/2.a554b385.jpg deleted file mode 100644 index 336bcc7d..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.a554b385.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.a57eb659.jpg b/learning/.vuepress/dist/assets/img/2.a57eb659.jpg deleted file mode 100644 index 734476c7..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.a57eb659.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.a8d7369c.jpg b/learning/.vuepress/dist/assets/img/2.a8d7369c.jpg deleted file mode 100644 index f3e77913..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.a8d7369c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.a9aa4801.jpg b/learning/.vuepress/dist/assets/img/2.a9aa4801.jpg deleted file mode 100644 index adb7b202..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.a9aa4801.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.a9bb6bb9.png b/learning/.vuepress/dist/assets/img/2.a9bb6bb9.png deleted file mode 100644 index 4b2084ca..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.a9bb6bb9.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.ace2c641.jpg b/learning/.vuepress/dist/assets/img/2.ace2c641.jpg deleted file mode 100644 index 0b454427..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.ace2c641.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.aecc2d80.jpg b/learning/.vuepress/dist/assets/img/2.aecc2d80.jpg deleted file mode 100644 index fbdd8ee0..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.aecc2d80.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.aff43165.jpg b/learning/.vuepress/dist/assets/img/2.aff43165.jpg deleted file mode 100644 index 929aa34f..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.aff43165.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.b3d11d61.jpg b/learning/.vuepress/dist/assets/img/2.b3d11d61.jpg deleted file mode 100644 index 79af8c0d..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.b3d11d61.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.b40d95e1.jpg b/learning/.vuepress/dist/assets/img/2.b40d95e1.jpg deleted file mode 100644 index 8ac89863..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.b40d95e1.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.b43303bc.jpg b/learning/.vuepress/dist/assets/img/2.b43303bc.jpg deleted file mode 100644 index 8b24d0d1..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.b43303bc.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.b719d6e1.jpg b/learning/.vuepress/dist/assets/img/2.b719d6e1.jpg deleted file mode 100644 index 650d04fb..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.b719d6e1.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.be442deb.jpg b/learning/.vuepress/dist/assets/img/2.be442deb.jpg deleted file mode 100644 index f366a7e5..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.be442deb.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.c2d40091.jpg b/learning/.vuepress/dist/assets/img/2.c2d40091.jpg deleted file mode 100644 index 4ef367cb..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.c2d40091.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.c5b636d0.jpeg b/learning/.vuepress/dist/assets/img/2.c5b636d0.jpeg deleted file mode 100644 index b3b1cd90..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.c5b636d0.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.cb4efa34.jpg b/learning/.vuepress/dist/assets/img/2.cb4efa34.jpg deleted file mode 100644 index 1fea0aab..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.cb4efa34.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.cb821808.png b/learning/.vuepress/dist/assets/img/2.cb821808.png deleted file mode 100644 index 11f0aa93..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.cb821808.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.cbeec2a0.png b/learning/.vuepress/dist/assets/img/2.cbeec2a0.png deleted file mode 100644 index f79a9b78..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.cbeec2a0.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.d061881a.jpg b/learning/.vuepress/dist/assets/img/2.d061881a.jpg deleted file mode 100644 index 6b2f5bd7..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.d061881a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.d4084b13.jpg b/learning/.vuepress/dist/assets/img/2.d4084b13.jpg deleted file mode 100644 index bdd5f16c..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.d4084b13.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.da9ba16e.png b/learning/.vuepress/dist/assets/img/2.da9ba16e.png deleted file mode 100644 index 1798db8e..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.da9ba16e.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.deff66b7.jpg b/learning/.vuepress/dist/assets/img/2.deff66b7.jpg deleted file mode 100644 index 62bd66ab..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.deff66b7.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.e2bb3392.jpg b/learning/.vuepress/dist/assets/img/2.e2bb3392.jpg deleted file mode 100644 index 858043aa..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.e2bb3392.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.e5a6e037.jpg b/learning/.vuepress/dist/assets/img/2.e5a6e037.jpg deleted file mode 100644 index dd1aae39..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.e5a6e037.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.e6b05cdb.jpg b/learning/.vuepress/dist/assets/img/2.e6b05cdb.jpg deleted file mode 100644 index d8735062..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.e6b05cdb.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.eac5c299.png b/learning/.vuepress/dist/assets/img/2.eac5c299.png deleted file mode 100644 index b0e03083..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.eac5c299.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.eeed6c30.jpg b/learning/.vuepress/dist/assets/img/2.eeed6c30.jpg deleted file mode 100644 index c71685d7..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.eeed6c30.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.f2d22ba1.jpg b/learning/.vuepress/dist/assets/img/2.f2d22ba1.jpg deleted file mode 100644 index 5cd4fc6e..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.f2d22ba1.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.f30b0c60.jpg b/learning/.vuepress/dist/assets/img/2.f30b0c60.jpg deleted file mode 100644 index cf1cf51b..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.f30b0c60.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.f9414b45.jpg b/learning/.vuepress/dist/assets/img/2.f9414b45.jpg deleted file mode 100644 index 4c7500f5..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.f9414b45.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.fc3a2c47.jpg b/learning/.vuepress/dist/assets/img/2.fc3a2c47.jpg deleted file mode 100644 index eb105473..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.fc3a2c47.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/2.fe0036fa.jpg b/learning/.vuepress/dist/assets/img/2.fe0036fa.jpg deleted file mode 100644 index e760e4da..00000000 Binary files a/learning/.vuepress/dist/assets/img/2.fe0036fa.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/20.21270649.jpg b/learning/.vuepress/dist/assets/img/20.21270649.jpg deleted file mode 100644 index f2856e3c..00000000 Binary files a/learning/.vuepress/dist/assets/img/20.21270649.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/21.c71ff2d5.jpg b/learning/.vuepress/dist/assets/img/21.c71ff2d5.jpg deleted file mode 100644 index f1536ae1..00000000 Binary files a/learning/.vuepress/dist/assets/img/21.c71ff2d5.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/22.0dfbaa1c.jpg b/learning/.vuepress/dist/assets/img/22.0dfbaa1c.jpg deleted file mode 100644 index a079d299..00000000 Binary files a/learning/.vuepress/dist/assets/img/22.0dfbaa1c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/23.e483057b.jpg b/learning/.vuepress/dist/assets/img/23.e483057b.jpg deleted file mode 100644 index 05baf6eb..00000000 Binary files a/learning/.vuepress/dist/assets/img/23.e483057b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/24.faeadf2e.jpg b/learning/.vuepress/dist/assets/img/24.faeadf2e.jpg deleted file mode 100644 index 746a88cf..00000000 Binary files a/learning/.vuepress/dist/assets/img/24.faeadf2e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/25.6750d734.jpg b/learning/.vuepress/dist/assets/img/25.6750d734.jpg deleted file mode 100644 index 28e7d8d6..00000000 Binary files a/learning/.vuepress/dist/assets/img/25.6750d734.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/26.120ba786.jpg b/learning/.vuepress/dist/assets/img/26.120ba786.jpg deleted file mode 100644 index 4f45d3f0..00000000 Binary files a/learning/.vuepress/dist/assets/img/26.120ba786.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/27.af418b95.jpg b/learning/.vuepress/dist/assets/img/27.af418b95.jpg deleted file mode 100644 index 04724e0b..00000000 Binary files a/learning/.vuepress/dist/assets/img/27.af418b95.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/28.0129bd8c.jpg b/learning/.vuepress/dist/assets/img/28.0129bd8c.jpg deleted file mode 100644 index d4d855f5..00000000 Binary files a/learning/.vuepress/dist/assets/img/28.0129bd8c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/29.3fdbe3a3.jpg b/learning/.vuepress/dist/assets/img/29.3fdbe3a3.jpg deleted file mode 100644 index 34be4d50..00000000 Binary files a/learning/.vuepress/dist/assets/img/29.3fdbe3a3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.005b13e9.jpg b/learning/.vuepress/dist/assets/img/3.005b13e9.jpg deleted file mode 100644 index 770dfe96..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.005b13e9.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.0c3a60cf.gif b/learning/.vuepress/dist/assets/img/3.0c3a60cf.gif deleted file mode 100644 index f3c59826..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.0c3a60cf.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.0dab3096.jpg b/learning/.vuepress/dist/assets/img/3.0dab3096.jpg deleted file mode 100644 index f02e4489..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.0dab3096.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.1996c071.jpg b/learning/.vuepress/dist/assets/img/3.1996c071.jpg deleted file mode 100644 index 97db1610..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.1996c071.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.1a17ae06.jpg b/learning/.vuepress/dist/assets/img/3.1a17ae06.jpg deleted file mode 100644 index 2d727bb8..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.1a17ae06.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.282d3108.jpg b/learning/.vuepress/dist/assets/img/3.282d3108.jpg deleted file mode 100644 index a5e3e1ef..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.282d3108.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.305e9fcd.jpg b/learning/.vuepress/dist/assets/img/3.305e9fcd.jpg deleted file mode 100644 index 9a3e6f24..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.305e9fcd.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.32f5ea8f.jpg b/learning/.vuepress/dist/assets/img/3.32f5ea8f.jpg deleted file mode 100644 index d45c829f..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.32f5ea8f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.330ade79.jpg b/learning/.vuepress/dist/assets/img/3.330ade79.jpg deleted file mode 100644 index 64eafe01..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.330ade79.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.349f556b.jpg b/learning/.vuepress/dist/assets/img/3.349f556b.jpg deleted file mode 100644 index 91f326b2..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.349f556b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.34b978c4.jpg b/learning/.vuepress/dist/assets/img/3.34b978c4.jpg deleted file mode 100644 index 6c079280..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.34b978c4.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.369c22de.png b/learning/.vuepress/dist/assets/img/3.369c22de.png deleted file mode 100644 index 9c284498..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.369c22de.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.395c1e89.jpg b/learning/.vuepress/dist/assets/img/3.395c1e89.jpg deleted file mode 100644 index 8cf9f264..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.395c1e89.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.3ff6091a.jpg b/learning/.vuepress/dist/assets/img/3.3ff6091a.jpg deleted file mode 100644 index 5bb37a62..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.3ff6091a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.49d6ed2b.jpeg b/learning/.vuepress/dist/assets/img/3.49d6ed2b.jpeg deleted file mode 100644 index 6fa522a7..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.49d6ed2b.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.4a7ea697.jpg b/learning/.vuepress/dist/assets/img/3.4a7ea697.jpg deleted file mode 100644 index e8e43db1..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.4a7ea697.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.53ddd978.png b/learning/.vuepress/dist/assets/img/3.53ddd978.png deleted file mode 100644 index c78500ad..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.53ddd978.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.57538b3d.png b/learning/.vuepress/dist/assets/img/3.57538b3d.png deleted file mode 100644 index 5a7c3877..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.57538b3d.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.575d3fba.png b/learning/.vuepress/dist/assets/img/3.575d3fba.png deleted file mode 100644 index 148c86ca..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.575d3fba.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.5be4a6f5.jpeg b/learning/.vuepress/dist/assets/img/3.5be4a6f5.jpeg deleted file mode 100644 index 7a7e6986..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.5be4a6f5.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.5e716077.jpg b/learning/.vuepress/dist/assets/img/3.5e716077.jpg deleted file mode 100644 index c2c50a58..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.5e716077.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.5fcd1024.gif b/learning/.vuepress/dist/assets/img/3.5fcd1024.gif deleted file mode 100644 index 8fd5d40b..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.5fcd1024.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.65076092.jpg b/learning/.vuepress/dist/assets/img/3.65076092.jpg deleted file mode 100644 index 1170b400..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.65076092.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.6c81b835.png b/learning/.vuepress/dist/assets/img/3.6c81b835.png deleted file mode 100644 index 3066590f..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.6c81b835.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.6f35751e.jpg b/learning/.vuepress/dist/assets/img/3.6f35751e.jpg deleted file mode 100644 index a831ba18..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.6f35751e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.74675f3c.jpg b/learning/.vuepress/dist/assets/img/3.74675f3c.jpg deleted file mode 100644 index 5e7f641f..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.74675f3c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.77fc440f.jpeg b/learning/.vuepress/dist/assets/img/3.77fc440f.jpeg deleted file mode 100644 index 415974d3..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.77fc440f.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.790bbcab.jpg b/learning/.vuepress/dist/assets/img/3.790bbcab.jpg deleted file mode 100644 index 6821c09b..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.790bbcab.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.7af03277.jpg b/learning/.vuepress/dist/assets/img/3.7af03277.jpg deleted file mode 100644 index 687ab3d4..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.7af03277.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.7d36e53c.jpg b/learning/.vuepress/dist/assets/img/3.7d36e53c.jpg deleted file mode 100644 index ecb070a6..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.7d36e53c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.83332a28.jpg b/learning/.vuepress/dist/assets/img/3.83332a28.jpg deleted file mode 100644 index e0b37d6f..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.83332a28.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.83aaac9c.jpg b/learning/.vuepress/dist/assets/img/3.83aaac9c.jpg deleted file mode 100644 index 83e50ac6..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.83aaac9c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.8ad59b24.jpg b/learning/.vuepress/dist/assets/img/3.8ad59b24.jpg deleted file mode 100644 index 365ee90e..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.8ad59b24.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.96d46fed.gif b/learning/.vuepress/dist/assets/img/3.96d46fed.gif deleted file mode 100644 index 81c7df09..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.96d46fed.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.9a946a0e.jpg b/learning/.vuepress/dist/assets/img/3.9a946a0e.jpg deleted file mode 100644 index 2c6df113..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.9a946a0e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.a40364f6.png b/learning/.vuepress/dist/assets/img/3.a40364f6.png deleted file mode 100644 index 36788df2..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.a40364f6.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.a8ce815b.jpg b/learning/.vuepress/dist/assets/img/3.a8ce815b.jpg deleted file mode 100644 index eda710a2..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.a8ce815b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.aacfd3e5.jpg b/learning/.vuepress/dist/assets/img/3.aacfd3e5.jpg deleted file mode 100644 index 7d3c7f7d..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.aacfd3e5.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.acd93ea4.jpg b/learning/.vuepress/dist/assets/img/3.acd93ea4.jpg deleted file mode 100644 index d180555d..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.acd93ea4.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.ad8c5615.jpg b/learning/.vuepress/dist/assets/img/3.ad8c5615.jpg deleted file mode 100644 index a40ecba2..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.ad8c5615.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.af2b4e20.jpg b/learning/.vuepress/dist/assets/img/3.af2b4e20.jpg deleted file mode 100644 index c9df0953..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.af2b4e20.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.b24151b9.png b/learning/.vuepress/dist/assets/img/3.b24151b9.png deleted file mode 100644 index 57d00db3..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.b24151b9.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.b277e870.jpg b/learning/.vuepress/dist/assets/img/3.b277e870.jpg deleted file mode 100644 index ce641c47..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.b277e870.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.b63f9142.jpg b/learning/.vuepress/dist/assets/img/3.b63f9142.jpg deleted file mode 100644 index 14929086..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.b63f9142.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.b6b0c2c7.png b/learning/.vuepress/dist/assets/img/3.b6b0c2c7.png deleted file mode 100644 index 1db89377..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.b6b0c2c7.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.bb5bf3f0.jpg b/learning/.vuepress/dist/assets/img/3.bb5bf3f0.jpg deleted file mode 100644 index afbab6bc..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.bb5bf3f0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.c301cca8.jpg b/learning/.vuepress/dist/assets/img/3.c301cca8.jpg deleted file mode 100644 index 6cbfcdce..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.c301cca8.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.c3858898.jpg b/learning/.vuepress/dist/assets/img/3.c3858898.jpg deleted file mode 100644 index 9ca08aa6..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.c3858898.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.cd940b06.jpg b/learning/.vuepress/dist/assets/img/3.cd940b06.jpg deleted file mode 100644 index 5ce40e55..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.cd940b06.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.df655fea.jpg b/learning/.vuepress/dist/assets/img/3.df655fea.jpg deleted file mode 100644 index 69425e8e..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.df655fea.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.e3a47b2e.jpg b/learning/.vuepress/dist/assets/img/3.e3a47b2e.jpg deleted file mode 100644 index 276efeb4..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.e3a47b2e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.eb049027.jpeg b/learning/.vuepress/dist/assets/img/3.eb049027.jpeg deleted file mode 100644 index 86654f7c..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.eb049027.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.ee5b366a.jpg b/learning/.vuepress/dist/assets/img/3.ee5b366a.jpg deleted file mode 100644 index 2644ec41..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.ee5b366a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.f425d51a.jpg b/learning/.vuepress/dist/assets/img/3.f425d51a.jpg deleted file mode 100644 index aa55d885..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.f425d51a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.f59824c9.jpg b/learning/.vuepress/dist/assets/img/3.f59824c9.jpg deleted file mode 100644 index 1a8d3c33..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.f59824c9.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.fbeca3fc.jpg b/learning/.vuepress/dist/assets/img/3.fbeca3fc.jpg deleted file mode 100644 index 9ca62e9a..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.fbeca3fc.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.fea14d13.jpg b/learning/.vuepress/dist/assets/img/3.fea14d13.jpg deleted file mode 100644 index e6139d29..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.fea14d13.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/3.ff524e61.jpg b/learning/.vuepress/dist/assets/img/3.ff524e61.jpg deleted file mode 100644 index 3303ba0e..00000000 Binary files a/learning/.vuepress/dist/assets/img/3.ff524e61.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/30.fdddeb32.jpg b/learning/.vuepress/dist/assets/img/30.fdddeb32.jpg deleted file mode 100644 index 9e0e0944..00000000 Binary files a/learning/.vuepress/dist/assets/img/30.fdddeb32.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/32.55284143.jpg b/learning/.vuepress/dist/assets/img/32.55284143.jpg deleted file mode 100644 index 256aab1d..00000000 Binary files a/learning/.vuepress/dist/assets/img/32.55284143.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/33.2f9c6307.jpg b/learning/.vuepress/dist/assets/img/33.2f9c6307.jpg deleted file mode 100644 index d31bb764..00000000 Binary files a/learning/.vuepress/dist/assets/img/33.2f9c6307.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/34.088e44cf.jpg b/learning/.vuepress/dist/assets/img/34.088e44cf.jpg deleted file mode 100644 index 82f11387..00000000 Binary files a/learning/.vuepress/dist/assets/img/34.088e44cf.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/35.c4d9475c.jpg b/learning/.vuepress/dist/assets/img/35.c4d9475c.jpg deleted file mode 100644 index 67973ce7..00000000 Binary files a/learning/.vuepress/dist/assets/img/35.c4d9475c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/36.16e8c10d.jpg b/learning/.vuepress/dist/assets/img/36.16e8c10d.jpg deleted file mode 100644 index 6ef226c6..00000000 Binary files a/learning/.vuepress/dist/assets/img/36.16e8c10d.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/37.a96ce0dc.jpg b/learning/.vuepress/dist/assets/img/37.a96ce0dc.jpg deleted file mode 100644 index 52adcd3a..00000000 Binary files a/learning/.vuepress/dist/assets/img/37.a96ce0dc.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/38.8d2e09fd.jpg b/learning/.vuepress/dist/assets/img/38.8d2e09fd.jpg deleted file mode 100644 index 06347357..00000000 Binary files a/learning/.vuepress/dist/assets/img/38.8d2e09fd.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/39.5bb938d3.jpg b/learning/.vuepress/dist/assets/img/39.5bb938d3.jpg deleted file mode 100644 index 6b1ffc57..00000000 Binary files a/learning/.vuepress/dist/assets/img/39.5bb938d3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.08f28007.jpg b/learning/.vuepress/dist/assets/img/4.08f28007.jpg deleted file mode 100644 index 7277d184..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.08f28007.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.0c272c85.png b/learning/.vuepress/dist/assets/img/4.0c272c85.png deleted file mode 100644 index 29d942db..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.0c272c85.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.0c5afe33.jpg b/learning/.vuepress/dist/assets/img/4.0c5afe33.jpg deleted file mode 100644 index 6395a975..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.0c5afe33.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.1a533a6e.jpg b/learning/.vuepress/dist/assets/img/4.1a533a6e.jpg deleted file mode 100644 index 2b76bf13..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.1a533a6e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.2af867bd.png b/learning/.vuepress/dist/assets/img/4.2af867bd.png deleted file mode 100644 index 87cea773..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.2af867bd.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.2edb2d7e.png b/learning/.vuepress/dist/assets/img/4.2edb2d7e.png deleted file mode 100644 index 2163101c..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.2edb2d7e.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.319ecb17.jpg b/learning/.vuepress/dist/assets/img/4.319ecb17.jpg deleted file mode 100644 index 1ae3e4f0..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.319ecb17.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.3662f31c.jpg b/learning/.vuepress/dist/assets/img/4.3662f31c.jpg deleted file mode 100644 index f5d5c4ad..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.3662f31c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.371c25ec.jpg b/learning/.vuepress/dist/assets/img/4.371c25ec.jpg deleted file mode 100644 index 9a0214ed..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.371c25ec.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.386090fa.jpg b/learning/.vuepress/dist/assets/img/4.386090fa.jpg deleted file mode 100644 index a0e8da4b..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.386090fa.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.3a449284.jpg b/learning/.vuepress/dist/assets/img/4.3a449284.jpg deleted file mode 100644 index 931c91bc..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.3a449284.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.3c3af4f3.jpg b/learning/.vuepress/dist/assets/img/4.3c3af4f3.jpg deleted file mode 100644 index 50439a09..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.3c3af4f3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.4b4e0373.png b/learning/.vuepress/dist/assets/img/4.4b4e0373.png deleted file mode 100644 index b3c7931e..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.4b4e0373.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.4b928156.jpg b/learning/.vuepress/dist/assets/img/4.4b928156.jpg deleted file mode 100644 index 2ec9446c..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.4b928156.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.4bdfb1c2.jpg b/learning/.vuepress/dist/assets/img/4.4bdfb1c2.jpg deleted file mode 100644 index b511e6b9..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.4bdfb1c2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.4d0bf2ce.jpg b/learning/.vuepress/dist/assets/img/4.4d0bf2ce.jpg deleted file mode 100644 index 134eb0ea..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.4d0bf2ce.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.517a72a2.jpg b/learning/.vuepress/dist/assets/img/4.517a72a2.jpg deleted file mode 100644 index 0f61a62d..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.517a72a2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.52846cf7.jpg b/learning/.vuepress/dist/assets/img/4.52846cf7.jpg deleted file mode 100644 index b80205f1..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.52846cf7.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.577ac376.jpg b/learning/.vuepress/dist/assets/img/4.577ac376.jpg deleted file mode 100644 index 278a2c41..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.577ac376.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.639a8eb0.jpg b/learning/.vuepress/dist/assets/img/4.639a8eb0.jpg deleted file mode 100644 index 4970f2fd..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.639a8eb0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.655c9c55.jpg b/learning/.vuepress/dist/assets/img/4.655c9c55.jpg deleted file mode 100644 index fe44356f..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.655c9c55.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.6650b341.jpeg b/learning/.vuepress/dist/assets/img/4.6650b341.jpeg deleted file mode 100644 index 04aeff2a..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.6650b341.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.6b5d3d0b.jpg b/learning/.vuepress/dist/assets/img/4.6b5d3d0b.jpg deleted file mode 100644 index 69844654..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.6b5d3d0b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.71b453f4.jpg b/learning/.vuepress/dist/assets/img/4.71b453f4.jpg deleted file mode 100644 index a006fad8..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.71b453f4.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.72302b38.jpeg b/learning/.vuepress/dist/assets/img/4.72302b38.jpeg deleted file mode 100644 index 43853af5..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.72302b38.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.73e083c6.jpg b/learning/.vuepress/dist/assets/img/4.73e083c6.jpg deleted file mode 100644 index 78df4441..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.73e083c6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.78f043f5.jpg b/learning/.vuepress/dist/assets/img/4.78f043f5.jpg deleted file mode 100644 index 64ba01ba..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.78f043f5.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.79cdc876.png b/learning/.vuepress/dist/assets/img/4.79cdc876.png deleted file mode 100644 index eb8f2bef..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.79cdc876.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.7bc74c08.jpg b/learning/.vuepress/dist/assets/img/4.7bc74c08.jpg deleted file mode 100644 index 4b8da494..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.7bc74c08.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.84cffc54.png b/learning/.vuepress/dist/assets/img/4.84cffc54.png deleted file mode 100644 index eae03abc..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.84cffc54.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.89740a2c.jpg b/learning/.vuepress/dist/assets/img/4.89740a2c.jpg deleted file mode 100644 index 0bcc54ba..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.89740a2c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.8b0cf254.jpg b/learning/.vuepress/dist/assets/img/4.8b0cf254.jpg deleted file mode 100644 index e91f5383..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.8b0cf254.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.8d02ff74.jpg b/learning/.vuepress/dist/assets/img/4.8d02ff74.jpg deleted file mode 100644 index f382492a..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.8d02ff74.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.9c6ba0d5.gif b/learning/.vuepress/dist/assets/img/4.9c6ba0d5.gif deleted file mode 100644 index 46543495..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.9c6ba0d5.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.a8f0713b.jpg b/learning/.vuepress/dist/assets/img/4.a8f0713b.jpg deleted file mode 100644 index 9c001327..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.a8f0713b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.acb8c9b1.jpg b/learning/.vuepress/dist/assets/img/4.acb8c9b1.jpg deleted file mode 100644 index d748f944..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.acb8c9b1.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.ae05f578.jpg b/learning/.vuepress/dist/assets/img/4.ae05f578.jpg deleted file mode 100644 index 297ab320..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.ae05f578.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.aef60610.jpg b/learning/.vuepress/dist/assets/img/4.aef60610.jpg deleted file mode 100644 index 262463a1..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.aef60610.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.af1e2af1.jpg b/learning/.vuepress/dist/assets/img/4.af1e2af1.jpg deleted file mode 100644 index 73afdaa7..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.af1e2af1.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.b038e351.gif b/learning/.vuepress/dist/assets/img/4.b038e351.gif deleted file mode 100644 index 342226af..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.b038e351.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.b941e37c.png b/learning/.vuepress/dist/assets/img/4.b941e37c.png deleted file mode 100644 index 7a0c3ad4..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.b941e37c.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.b99fbd0c.jpg b/learning/.vuepress/dist/assets/img/4.b99fbd0c.jpg deleted file mode 100644 index 96578d0a..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.b99fbd0c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.c40e03a7.jpg b/learning/.vuepress/dist/assets/img/4.c40e03a7.jpg deleted file mode 100644 index 12fa8ab2..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.c40e03a7.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.c46f6eb3.jpg b/learning/.vuepress/dist/assets/img/4.c46f6eb3.jpg deleted file mode 100644 index 7db599ea..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.c46f6eb3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.cd0d1855.jpg b/learning/.vuepress/dist/assets/img/4.cd0d1855.jpg deleted file mode 100644 index d6837296..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.cd0d1855.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.ce034acb.jpg b/learning/.vuepress/dist/assets/img/4.ce034acb.jpg deleted file mode 100644 index f822f4ed..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.ce034acb.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.cf1947cb.jpg b/learning/.vuepress/dist/assets/img/4.cf1947cb.jpg deleted file mode 100644 index 5be0a6a6..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.cf1947cb.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.dbb7a6ee.jpg b/learning/.vuepress/dist/assets/img/4.dbb7a6ee.jpg deleted file mode 100644 index ada1796c..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.dbb7a6ee.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.e93db3df.gif b/learning/.vuepress/dist/assets/img/4.e93db3df.gif deleted file mode 100644 index 082e089d..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.e93db3df.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.ee799e61.png b/learning/.vuepress/dist/assets/img/4.ee799e61.png deleted file mode 100644 index 8f879cbb..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.ee799e61.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.f3a9aa62.jpg b/learning/.vuepress/dist/assets/img/4.f3a9aa62.jpg deleted file mode 100644 index 5c31dab0..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.f3a9aa62.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.f3d885a0.jpg b/learning/.vuepress/dist/assets/img/4.f3d885a0.jpg deleted file mode 100644 index 190664a7..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.f3d885a0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.f3de9102.jpg b/learning/.vuepress/dist/assets/img/4.f3de9102.jpg deleted file mode 100644 index fed527d5..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.f3de9102.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/4.f931992f.jpg b/learning/.vuepress/dist/assets/img/4.f931992f.jpg deleted file mode 100644 index a77366ad..00000000 Binary files a/learning/.vuepress/dist/assets/img/4.f931992f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/40.02513dd2.jpg b/learning/.vuepress/dist/assets/img/40.02513dd2.jpg deleted file mode 100644 index dcd0b7f1..00000000 Binary files a/learning/.vuepress/dist/assets/img/40.02513dd2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/41.278a834a.jpg b/learning/.vuepress/dist/assets/img/41.278a834a.jpg deleted file mode 100644 index 0c8d6770..00000000 Binary files a/learning/.vuepress/dist/assets/img/41.278a834a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/42.f0b0ff81.jpg b/learning/.vuepress/dist/assets/img/42.f0b0ff81.jpg deleted file mode 100644 index 45aba18c..00000000 Binary files a/learning/.vuepress/dist/assets/img/42.f0b0ff81.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/43.af5389d7.jpg b/learning/.vuepress/dist/assets/img/43.af5389d7.jpg deleted file mode 100644 index bd828a9e..00000000 Binary files a/learning/.vuepress/dist/assets/img/43.af5389d7.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/44.daadc38e.jpg b/learning/.vuepress/dist/assets/img/44.daadc38e.jpg deleted file mode 100644 index 564fc9b2..00000000 Binary files a/learning/.vuepress/dist/assets/img/44.daadc38e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/45.1509be0f.jpg b/learning/.vuepress/dist/assets/img/45.1509be0f.jpg deleted file mode 100644 index 35c99d21..00000000 Binary files a/learning/.vuepress/dist/assets/img/45.1509be0f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/46.71cd5e77.jpg b/learning/.vuepress/dist/assets/img/46.71cd5e77.jpg deleted file mode 100644 index ea9ea88f..00000000 Binary files a/learning/.vuepress/dist/assets/img/46.71cd5e77.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/47.cd5c0b80.jpg b/learning/.vuepress/dist/assets/img/47.cd5c0b80.jpg deleted file mode 100644 index 44f1d678..00000000 Binary files a/learning/.vuepress/dist/assets/img/47.cd5c0b80.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/49.b7bb9267.jpg b/learning/.vuepress/dist/assets/img/49.b7bb9267.jpg deleted file mode 100644 index 39a90f69..00000000 Binary files a/learning/.vuepress/dist/assets/img/49.b7bb9267.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.0424dafc.jpg b/learning/.vuepress/dist/assets/img/5.0424dafc.jpg deleted file mode 100644 index b2d75342..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.0424dafc.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.0b256752.jpg b/learning/.vuepress/dist/assets/img/5.0b256752.jpg deleted file mode 100644 index 3325ab21..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.0b256752.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.0bd26895.jpg b/learning/.vuepress/dist/assets/img/5.0bd26895.jpg deleted file mode 100644 index 407db013..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.0bd26895.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.15a64ae0.jpg b/learning/.vuepress/dist/assets/img/5.15a64ae0.jpg deleted file mode 100644 index 69f5a01a..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.15a64ae0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.16739550.png b/learning/.vuepress/dist/assets/img/5.16739550.png deleted file mode 100644 index 674cf977..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.16739550.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.18db8de2.jpg b/learning/.vuepress/dist/assets/img/5.18db8de2.jpg deleted file mode 100644 index c717a286..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.18db8de2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.1ce72971.jpg b/learning/.vuepress/dist/assets/img/5.1ce72971.jpg deleted file mode 100644 index 210c13bf..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.1ce72971.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.1df63ac6.jpg b/learning/.vuepress/dist/assets/img/5.1df63ac6.jpg deleted file mode 100644 index 41de52a8..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.1df63ac6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.243e0f4d.jpg b/learning/.vuepress/dist/assets/img/5.243e0f4d.jpg deleted file mode 100644 index 20665c16..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.243e0f4d.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.2c119423.jpg b/learning/.vuepress/dist/assets/img/5.2c119423.jpg deleted file mode 100644 index 21c9f9e2..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.2c119423.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.33763b0a.jpg b/learning/.vuepress/dist/assets/img/5.33763b0a.jpg deleted file mode 100644 index 0bc01cdd..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.33763b0a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.36f3611e.jpg b/learning/.vuepress/dist/assets/img/5.36f3611e.jpg deleted file mode 100644 index fa63177c..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.36f3611e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.3aa639d9.png b/learning/.vuepress/dist/assets/img/5.3aa639d9.png deleted file mode 100644 index d7a26c7b..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.3aa639d9.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.404ed413.jpg b/learning/.vuepress/dist/assets/img/5.404ed413.jpg deleted file mode 100644 index 80dfb6f3..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.404ed413.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.54d5f79b.jpg b/learning/.vuepress/dist/assets/img/5.54d5f79b.jpg deleted file mode 100644 index bc50a966..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.54d5f79b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.54fa5539.jpg b/learning/.vuepress/dist/assets/img/5.54fa5539.jpg deleted file mode 100644 index f39783a4..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.54fa5539.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.585e5236.jpg b/learning/.vuepress/dist/assets/img/5.585e5236.jpg deleted file mode 100644 index 15228b87..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.585e5236.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.5a7a80a4.jpg b/learning/.vuepress/dist/assets/img/5.5a7a80a4.jpg deleted file mode 100644 index 138a866f..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.5a7a80a4.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.606dbc80.png b/learning/.vuepress/dist/assets/img/5.606dbc80.png deleted file mode 100644 index 726ce84e..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.606dbc80.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.607471fb.jpg b/learning/.vuepress/dist/assets/img/5.607471fb.jpg deleted file mode 100644 index 3b0d0f2b..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.607471fb.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.672ce4c2.jpg b/learning/.vuepress/dist/assets/img/5.672ce4c2.jpg deleted file mode 100644 index beb07f4a..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.672ce4c2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.6e74812c.jpg b/learning/.vuepress/dist/assets/img/5.6e74812c.jpg deleted file mode 100644 index c06fd182..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.6e74812c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.807d5b53.jpg b/learning/.vuepress/dist/assets/img/5.807d5b53.jpg deleted file mode 100644 index 2cd9c6b7..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.807d5b53.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.865aaf84.png b/learning/.vuepress/dist/assets/img/5.865aaf84.png deleted file mode 100644 index 7fe023b2..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.865aaf84.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.8c39bbb1.jpg b/learning/.vuepress/dist/assets/img/5.8c39bbb1.jpg deleted file mode 100644 index 94b8ad67..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.8c39bbb1.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.96253984.jpg b/learning/.vuepress/dist/assets/img/5.96253984.jpg deleted file mode 100644 index 0ce09d00..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.96253984.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.9dd4bda4.jpg b/learning/.vuepress/dist/assets/img/5.9dd4bda4.jpg deleted file mode 100644 index a4814e94..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.9dd4bda4.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.9f7794ab.jpg b/learning/.vuepress/dist/assets/img/5.9f7794ab.jpg deleted file mode 100644 index adb7426d..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.9f7794ab.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.a7be87ed.jpg b/learning/.vuepress/dist/assets/img/5.a7be87ed.jpg deleted file mode 100644 index 5e2b5290..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.a7be87ed.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.ab912240.jpg b/learning/.vuepress/dist/assets/img/5.ab912240.jpg deleted file mode 100644 index cf6ddead..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.ab912240.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.acd9a171.jpg b/learning/.vuepress/dist/assets/img/5.acd9a171.jpg deleted file mode 100644 index 4ac87bb7..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.acd9a171.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.b505cca6.jpg b/learning/.vuepress/dist/assets/img/5.b505cca6.jpg deleted file mode 100644 index d0e01415..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.b505cca6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.b6280d8e.jpg b/learning/.vuepress/dist/assets/img/5.b6280d8e.jpg deleted file mode 100644 index 64974b79..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.b6280d8e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.ba54b600.jpg b/learning/.vuepress/dist/assets/img/5.ba54b600.jpg deleted file mode 100644 index a64d6e58..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.ba54b600.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.bd4d699f.jpg b/learning/.vuepress/dist/assets/img/5.bd4d699f.jpg deleted file mode 100644 index f34ed783..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.bd4d699f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.bedc1917.jpg b/learning/.vuepress/dist/assets/img/5.bedc1917.jpg deleted file mode 100644 index 623ce411..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.bedc1917.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.ccd57a30.jpg b/learning/.vuepress/dist/assets/img/5.ccd57a30.jpg deleted file mode 100644 index 5c3a65d2..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.ccd57a30.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.d8077a39.png b/learning/.vuepress/dist/assets/img/5.d8077a39.png deleted file mode 100644 index 35eefdf6..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.d8077a39.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.dfc3e337.jpg b/learning/.vuepress/dist/assets/img/5.dfc3e337.jpg deleted file mode 100644 index ca7d0b0e..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.dfc3e337.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.e45f10c1.jpg b/learning/.vuepress/dist/assets/img/5.e45f10c1.jpg deleted file mode 100644 index 5fa46ee4..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.e45f10c1.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.e942f55e.jpg b/learning/.vuepress/dist/assets/img/5.e942f55e.jpg deleted file mode 100644 index 0ab1db77..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.e942f55e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.f0a35d44.png b/learning/.vuepress/dist/assets/img/5.f0a35d44.png deleted file mode 100644 index fca9c44c..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.f0a35d44.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.f1a30d9b.jpg b/learning/.vuepress/dist/assets/img/5.f1a30d9b.jpg deleted file mode 100644 index 58e75f8d..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.f1a30d9b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.f3b5c75b.jpg b/learning/.vuepress/dist/assets/img/5.f3b5c75b.jpg deleted file mode 100644 index 13cc1ec0..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.f3b5c75b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.f6036c4a.jpg b/learning/.vuepress/dist/assets/img/5.f6036c4a.jpg deleted file mode 100644 index 1889875a..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.f6036c4a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/5.faa33f79.jpg b/learning/.vuepress/dist/assets/img/5.faa33f79.jpg deleted file mode 100644 index bbacc2a0..00000000 Binary files a/learning/.vuepress/dist/assets/img/5.faa33f79.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/51.8438f2b4.jpg b/learning/.vuepress/dist/assets/img/51.8438f2b4.jpg deleted file mode 100644 index 39bde6e3..00000000 Binary files a/learning/.vuepress/dist/assets/img/51.8438f2b4.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.027b3f47.jpg b/learning/.vuepress/dist/assets/img/6.027b3f47.jpg deleted file mode 100644 index 4e172abd..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.027b3f47.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.11546c06.jpg b/learning/.vuepress/dist/assets/img/6.11546c06.jpg deleted file mode 100644 index 59e8bb0c..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.11546c06.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.19b1a4e0.jpg b/learning/.vuepress/dist/assets/img/6.19b1a4e0.jpg deleted file mode 100644 index e2af1d3d..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.19b1a4e0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.1e7a6bde.jpg b/learning/.vuepress/dist/assets/img/6.1e7a6bde.jpg deleted file mode 100644 index 6e66eb62..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.1e7a6bde.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.1f77b9c7.jpg b/learning/.vuepress/dist/assets/img/6.1f77b9c7.jpg deleted file mode 100644 index 1fda252a..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.1f77b9c7.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.2aa8b15e.png b/learning/.vuepress/dist/assets/img/6.2aa8b15e.png deleted file mode 100644 index 60576553..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.2aa8b15e.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.389dadc8.jpg b/learning/.vuepress/dist/assets/img/6.389dadc8.jpg deleted file mode 100644 index d52e2fc8..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.389dadc8.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.3f8c796e.jpg b/learning/.vuepress/dist/assets/img/6.3f8c796e.jpg deleted file mode 100644 index 7f1a068f..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.3f8c796e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.48bc0047.jpg b/learning/.vuepress/dist/assets/img/6.48bc0047.jpg deleted file mode 100644 index 5d625e1a..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.48bc0047.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.4c450ae2.jpg b/learning/.vuepress/dist/assets/img/6.4c450ae2.jpg deleted file mode 100644 index 768f66e9..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.4c450ae2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.61b74f5e.png b/learning/.vuepress/dist/assets/img/6.61b74f5e.png deleted file mode 100644 index 652b3d76..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.61b74f5e.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.6209e333.jpg b/learning/.vuepress/dist/assets/img/6.6209e333.jpg deleted file mode 100644 index 855656d4..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.6209e333.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.64d30411.jpg b/learning/.vuepress/dist/assets/img/6.64d30411.jpg deleted file mode 100644 index a3ab0842..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.64d30411.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.674c41b3.jpg b/learning/.vuepress/dist/assets/img/6.674c41b3.jpg deleted file mode 100644 index 6a22cc0f..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.674c41b3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.73d7c7f6.jpg b/learning/.vuepress/dist/assets/img/6.73d7c7f6.jpg deleted file mode 100644 index 657b710d..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.73d7c7f6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.7579b251.gif b/learning/.vuepress/dist/assets/img/6.7579b251.gif deleted file mode 100644 index 47765031..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.7579b251.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.7626291b.jpg b/learning/.vuepress/dist/assets/img/6.7626291b.jpg deleted file mode 100644 index d6c05e8c..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.7626291b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.791fc1f7.gif b/learning/.vuepress/dist/assets/img/6.791fc1f7.gif deleted file mode 100644 index 67887d88..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.791fc1f7.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.919e5b4b.jpg b/learning/.vuepress/dist/assets/img/6.919e5b4b.jpg deleted file mode 100644 index b617e8ba..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.919e5b4b.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.983baa82.jpg b/learning/.vuepress/dist/assets/img/6.983baa82.jpg deleted file mode 100644 index 49e1cc0f..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.983baa82.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.9b45e80f.jpg b/learning/.vuepress/dist/assets/img/6.9b45e80f.jpg deleted file mode 100644 index e4d10a07..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.9b45e80f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.b0b8a3f6.jpg b/learning/.vuepress/dist/assets/img/6.b0b8a3f6.jpg deleted file mode 100644 index 43ac7284..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.b0b8a3f6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.b47733d0.jpg b/learning/.vuepress/dist/assets/img/6.b47733d0.jpg deleted file mode 100644 index 67dc89aa..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.b47733d0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.b657cbf9.jpg b/learning/.vuepress/dist/assets/img/6.b657cbf9.jpg deleted file mode 100644 index 03d85031..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.b657cbf9.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.c11a0ca7.jpg b/learning/.vuepress/dist/assets/img/6.c11a0ca7.jpg deleted file mode 100644 index 69d1b5bc..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.c11a0ca7.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.c17fdc30.png b/learning/.vuepress/dist/assets/img/6.c17fdc30.png deleted file mode 100644 index 1d9f0466..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.c17fdc30.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.c7796e6a.jpg b/learning/.vuepress/dist/assets/img/6.c7796e6a.jpg deleted file mode 100644 index cbaeeeba..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.c7796e6a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.cc528cb2.jpg b/learning/.vuepress/dist/assets/img/6.cc528cb2.jpg deleted file mode 100644 index 47c49e52..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.cc528cb2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.cc7c7072.jpg b/learning/.vuepress/dist/assets/img/6.cc7c7072.jpg deleted file mode 100644 index 79055481..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.cc7c7072.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.d54032f0.jpg b/learning/.vuepress/dist/assets/img/6.d54032f0.jpg deleted file mode 100644 index bcb1e739..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.d54032f0.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.dba384e6.jpg b/learning/.vuepress/dist/assets/img/6.dba384e6.jpg deleted file mode 100644 index e763c6a6..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.dba384e6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/6.f292572e.jpg b/learning/.vuepress/dist/assets/img/6.f292572e.jpg deleted file mode 100644 index cf505783..00000000 Binary files a/learning/.vuepress/dist/assets/img/6.f292572e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.0d48a111.png b/learning/.vuepress/dist/assets/img/7.0d48a111.png deleted file mode 100644 index 23a057a6..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.0d48a111.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.0e0f6f14.jpg b/learning/.vuepress/dist/assets/img/7.0e0f6f14.jpg deleted file mode 100644 index 43abb357..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.0e0f6f14.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.13aa55b6.jpg b/learning/.vuepress/dist/assets/img/7.13aa55b6.jpg deleted file mode 100644 index c708b499..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.13aa55b6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.185c0a4f.jpg b/learning/.vuepress/dist/assets/img/7.185c0a4f.jpg deleted file mode 100644 index 28cb3349..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.185c0a4f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.3bd17b29.jpg b/learning/.vuepress/dist/assets/img/7.3bd17b29.jpg deleted file mode 100644 index 43d25028..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.3bd17b29.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.3e8ddcf3.jpg b/learning/.vuepress/dist/assets/img/7.3e8ddcf3.jpg deleted file mode 100644 index 16d7054e..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.3e8ddcf3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.4d3f86e3.jpg b/learning/.vuepress/dist/assets/img/7.4d3f86e3.jpg deleted file mode 100644 index 2709e75e..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.4d3f86e3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.662c3152.jpg b/learning/.vuepress/dist/assets/img/7.662c3152.jpg deleted file mode 100644 index 9bd87805..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.662c3152.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.7ff53810.jpg b/learning/.vuepress/dist/assets/img/7.7ff53810.jpg deleted file mode 100644 index 3d71ad73..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.7ff53810.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.84e9f7d6.jpg b/learning/.vuepress/dist/assets/img/7.84e9f7d6.jpg deleted file mode 100644 index d55c7251..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.84e9f7d6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.a6e070a6.jpg b/learning/.vuepress/dist/assets/img/7.a6e070a6.jpg deleted file mode 100644 index b33c16b1..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.a6e070a6.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.a8ef541f.jpg b/learning/.vuepress/dist/assets/img/7.a8ef541f.jpg deleted file mode 100644 index 47c8bb74..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.a8ef541f.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.abae2919.jpg b/learning/.vuepress/dist/assets/img/7.abae2919.jpg deleted file mode 100644 index a2f2c1c4..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.abae2919.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.addb94af.jpg b/learning/.vuepress/dist/assets/img/7.addb94af.jpg deleted file mode 100644 index 29b80683..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.addb94af.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.c99ba323.jpg b/learning/.vuepress/dist/assets/img/7.c99ba323.jpg deleted file mode 100644 index e6af6557..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.c99ba323.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.dc3e1d79.jpg b/learning/.vuepress/dist/assets/img/7.dc3e1d79.jpg deleted file mode 100644 index ebdd1f16..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.dc3e1d79.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.dd25f1d8.jpg b/learning/.vuepress/dist/assets/img/7.dd25f1d8.jpg deleted file mode 100644 index 31b72e6a..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.dd25f1d8.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.efb587cb.png b/learning/.vuepress/dist/assets/img/7.efb587cb.png deleted file mode 100644 index 2901edf3..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.efb587cb.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/7.f1547150.gif b/learning/.vuepress/dist/assets/img/7.f1547150.gif deleted file mode 100644 index 35524ba0..00000000 Binary files a/learning/.vuepress/dist/assets/img/7.f1547150.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.16885cbd.jpg b/learning/.vuepress/dist/assets/img/8.16885cbd.jpg deleted file mode 100644 index e75362ff..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.16885cbd.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.170082ec.jpg b/learning/.vuepress/dist/assets/img/8.170082ec.jpg deleted file mode 100644 index 9a642dd1..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.170082ec.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.29b9373e.jpg b/learning/.vuepress/dist/assets/img/8.29b9373e.jpg deleted file mode 100644 index a442e4ec..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.29b9373e.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.2d128253.jpg b/learning/.vuepress/dist/assets/img/8.2d128253.jpg deleted file mode 100644 index c8a69637..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.2d128253.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.3632bf0c.jpg b/learning/.vuepress/dist/assets/img/8.3632bf0c.jpg deleted file mode 100644 index 9aa7da7b..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.3632bf0c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.68ddf420.png b/learning/.vuepress/dist/assets/img/8.68ddf420.png deleted file mode 100644 index a2bb580c..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.68ddf420.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.7a33313c.jpg b/learning/.vuepress/dist/assets/img/8.7a33313c.jpg deleted file mode 100644 index 38f40089..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.7a33313c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.af52760a.jpg b/learning/.vuepress/dist/assets/img/8.af52760a.jpg deleted file mode 100644 index bb12b7fb..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.af52760a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.c7dee1ef.gif b/learning/.vuepress/dist/assets/img/8.c7dee1ef.gif deleted file mode 100644 index 5188dd4e..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.c7dee1ef.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.e26022ef.gif b/learning/.vuepress/dist/assets/img/8.e26022ef.gif deleted file mode 100644 index 66c3a93b..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.e26022ef.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.e6a571aa.jpg b/learning/.vuepress/dist/assets/img/8.e6a571aa.jpg deleted file mode 100644 index 17dcc0fa..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.e6a571aa.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.ec06de5a.jpg b/learning/.vuepress/dist/assets/img/8.ec06de5a.jpg deleted file mode 100644 index ef037b96..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.ec06de5a.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/8.fb3c4977.jpg b/learning/.vuepress/dist/assets/img/8.fb3c4977.jpg deleted file mode 100644 index b6797c1c..00000000 Binary files a/learning/.vuepress/dist/assets/img/8.fb3c4977.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.09f2ebf9.jpg b/learning/.vuepress/dist/assets/img/9.09f2ebf9.jpg deleted file mode 100644 index 2106da05..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.09f2ebf9.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.1ef32719.jpg b/learning/.vuepress/dist/assets/img/9.1ef32719.jpg deleted file mode 100644 index 22f4dae7..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.1ef32719.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.360c4c9d.jpg b/learning/.vuepress/dist/assets/img/9.360c4c9d.jpg deleted file mode 100644 index 50692c6b..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.360c4c9d.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.6fc15e39.jpg b/learning/.vuepress/dist/assets/img/9.6fc15e39.jpg deleted file mode 100644 index 996583f4..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.6fc15e39.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.72fd97d3.gif b/learning/.vuepress/dist/assets/img/9.72fd97d3.gif deleted file mode 100644 index 9230e8a0..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.72fd97d3.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.730e40a3.jpg b/learning/.vuepress/dist/assets/img/9.730e40a3.jpg deleted file mode 100644 index 83bfc720..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.730e40a3.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.82e35d01.jpg b/learning/.vuepress/dist/assets/img/9.82e35d01.jpg deleted file mode 100644 index 99e34e7d..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.82e35d01.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.99919de2.png b/learning/.vuepress/dist/assets/img/9.99919de2.png deleted file mode 100644 index c6453f9c..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.99919de2.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.b5669156.jpg b/learning/.vuepress/dist/assets/img/9.b5669156.jpg deleted file mode 100644 index 0aadeec0..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.b5669156.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.ceb7e1fe.jpg b/learning/.vuepress/dist/assets/img/9.ceb7e1fe.jpg deleted file mode 100644 index eaea95ed..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.ceb7e1fe.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.e544788a.jpeg b/learning/.vuepress/dist/assets/img/9.e544788a.jpeg deleted file mode 100644 index 60d39f14..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.e544788a.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.f04372f5.png b/learning/.vuepress/dist/assets/img/9.f04372f5.png deleted file mode 100644 index 4b0267aa..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.f04372f5.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.f90fe0ae.jpg b/learning/.vuepress/dist/assets/img/9.f90fe0ae.jpg deleted file mode 100644 index b346cd7d..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.f90fe0ae.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/9.fb258924.jpg b/learning/.vuepress/dist/assets/img/9.fb258924.jpg deleted file mode 100644 index 898264de..00000000 Binary files a/learning/.vuepress/dist/assets/img/9.fb258924.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/bubbleSort.b7d216a5.gif b/learning/.vuepress/dist/assets/img/bubbleSort.b7d216a5.gif deleted file mode 100644 index 5f767d45..00000000 Binary files a/learning/.vuepress/dist/assets/img/bubbleSort.b7d216a5.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/bucket.414dd7da.gif b/learning/.vuepress/dist/assets/img/bucket.414dd7da.gif deleted file mode 100644 index 3137e0fb..00000000 Binary files a/learning/.vuepress/dist/assets/img/bucket.414dd7da.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/countingSort.827d96b8.gif b/learning/.vuepress/dist/assets/img/countingSort.827d96b8.gif deleted file mode 100644 index df987af7..00000000 Binary files a/learning/.vuepress/dist/assets/img/countingSort.827d96b8.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/heapSort.658d0f58.gif b/learning/.vuepress/dist/assets/img/heapSort.658d0f58.gif deleted file mode 100644 index 653e17b7..00000000 Binary files a/learning/.vuepress/dist/assets/img/heapSort.658d0f58.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/home-bg.7b267d7c.jpg b/learning/.vuepress/dist/assets/img/home-bg.7b267d7c.jpg deleted file mode 100644 index 02d4a81b..00000000 Binary files a/learning/.vuepress/dist/assets/img/home-bg.7b267d7c.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/insertionSort.be81c151.gif b/learning/.vuepress/dist/assets/img/insertionSort.be81c151.gif deleted file mode 100644 index bab6db57..00000000 Binary files a/learning/.vuepress/dist/assets/img/insertionSort.be81c151.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/mergeSort.9541d116.gif b/learning/.vuepress/dist/assets/img/mergeSort.9541d116.gif deleted file mode 100644 index 3f0adb94..00000000 Binary files a/learning/.vuepress/dist/assets/img/mergeSort.9541d116.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/quickSort.71c0f1c0.gif b/learning/.vuepress/dist/assets/img/quickSort.71c0f1c0.gif deleted file mode 100644 index 6a3faec9..00000000 Binary files a/learning/.vuepress/dist/assets/img/quickSort.71c0f1c0.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/radixSort.6690b105.gif b/learning/.vuepress/dist/assets/img/radixSort.6690b105.gif deleted file mode 100644 index f5f8c801..00000000 Binary files a/learning/.vuepress/dist/assets/img/radixSort.6690b105.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/selectionSort.44be35da.gif b/learning/.vuepress/dist/assets/img/selectionSort.44be35da.gif deleted file mode 100644 index 17a2cc7b..00000000 Binary files a/learning/.vuepress/dist/assets/img/selectionSort.44be35da.gif and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/sort-0.7ce95224.png b/learning/.vuepress/dist/assets/img/sort-0.7ce95224.png deleted file mode 100644 index eafe9d6e..00000000 Binary files a/learning/.vuepress/dist/assets/img/sort-0.7ce95224.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/img/sort-1.5b9670d7.png b/learning/.vuepress/dist/assets/img/sort-1.5b9670d7.png deleted file mode 100644 index 7935fff2..00000000 Binary files a/learning/.vuepress/dist/assets/img/sort-1.5b9670d7.png and /dev/null differ diff --git a/learning/.vuepress/dist/assets/js/1.7d73e1ec.js b/learning/.vuepress/dist/assets/js/1.7d73e1ec.js deleted file mode 100644 index 6d7829fc..00000000 --- a/learning/.vuepress/dist/assets/js/1.7d73e1ec.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{361:function(t,e,n){"use strict";e.a={data:function(){return{recoShowModule:!1}},mounted:function(){this.recoShowModule=!0},destroyed:function(){this.recoShowModule=!1}}},363:function(t,e,n){"use strict";n(106);var o={name:"ModuleTransition",props:{delay:{type:String,default:"0"},duration:{type:String,default:".25"}},methods:{setStyle:function(t){t.style.transition="all ".concat(this.duration,"s ease-in-out ").concat(this.delay,"s"),t.style.transform="translateY(-20px)",t.style.opacity=0},unsetStyle:function(t){t.style.transform="translateY(0)",t.style.opacity=1}}},i=(n(441),n(3)),s=Object(i.a)(o,(function(){var t=this.$createElement;return(this._self._c||t)("transition",{attrs:{name:"module"},on:{enter:this.setStyle,"after-enter":this.unsetStyle,"before-leave":this.setStyle}},[this._t("default")],2)}),[],!1,null,null,null);e.a=s.exports},377:function(t,e,n){var o=n(0),i=n(422);o({global:!0,forced:parseInt!=i},{parseInt:i})},378:function(t,e,n){var o=n(12),i="["+n(383)+"]",s=RegExp("^"+i+i+"*"),a=RegExp(i+i+"*$"),r=function(t){return function(e){var n=String(o(e));return 1&t&&(n=n.replace(s,"")),2&t&&(n=n.replace(a,"")),n}};t.exports={start:r(1),end:r(2),trim:r(3)}},380:function(t,e,n){"use strict";n(75),n(32),n(28),n(108),n(377),n(413);var o={data:function(){return{query:"",focused:!1,focusIndex:0,placeholder:void 0}},mounted:function(){this.placeholder=this.$site.themeConfig.searchPlaceholder||""},computed:{showSuggestions:function(){return this.focused&&this.suggestions&&this.suggestions.length},suggestions:function(){var t=this.query.trim().toLowerCase();if(t){for(var e=this.$site.pages,n=this.$site.themeConfig.searchMaxSuggestions,o=this.$localePath,i=function(e){return e&&e.title&&e.title.toLowerCase().indexOf(t)>-1},s=[],a=0;a=n);a++){var r=e[a];if(this.getPageLocalePath(r)===o)if(i(r))s.push(r);else if(r.headers)for(var l=0;l=n);l++){var c=r.headers[l];i(c)&&s.push(Object.assign({},r,{path:r.path+"#"+c.slug,header:c}))}}return s}},alignRight:function(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},methods:{getPageLocalePath:function(t){for(var e in this.$site.locales||{})if("/"!==e&&0===t.path.indexOf(e))return e;return"/"},onUp:function(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown:function(){this.showSuggestions&&(this.focusIndex "+t._s(e.header.title))]):t._e()])])})),0):t._e()])}),[],!1,null,null,null).exports,a=(n(425),Object(i.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"sidebar-button",on:{click:function(e){return t.$emit("toggle-sidebar")}}},[n("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[n("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null).exports),r=(n(106),n(176),n(426),n(111),n(77),n(181),n(26),n(182),n(183),n(30),n(414),n(22)),l=n(412),c=n(420),u={components:{NavLink:l.a,DropdownTransition:c.a},data:function(){return{open:!1}},props:{item:{required:!0}},methods:{toggle:function(){this.open=!this.open}}},d=(n(430),Object(i.a)(u,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[n("a",{staticClass:"dropdown-title",on:{click:t.toggle}},[n("span",{staticClass:"title"},[n("i",{class:"iconfont "+t.item.icon}),t._v("\n "+t._s(t.item.text)+"\n ")]),t._v(" "),n("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),n("DropdownTransition",[n("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(e,o){return n("li",{key:e.link||o,staticClass:"dropdown-item"},["links"===e.type?n("h4",[t._v(t._s(e.text))]):t._e(),t._v(" "),"links"===e.type?n("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(e.items,(function(t){return n("li",{key:t.link,staticClass:"dropdown-subitem"},[n("NavLink",{attrs:{item:t}})],1)})),0):n("NavLink",{attrs:{item:e}})],1)})),0)])],1)}),[],!1,null,null,null).exports),h=n(49),f={components:{NavLink:l.a,DropdownLink:d},computed:{userNav:function(){return this.$themeLocaleConfig.nav||this.$themeConfig.nav||[]},nav:function(){var t=this,e=this.$site.locales,n=this.userNav;if(e&&Object.keys(e).length>1){var o=this.$page.path,i=this.$router.options.routes,s=this.$themeConfig.locales||{},a={text:this.$themeLocaleConfig.selectText||"Languages",items:Object.keys(e).map((function(n){var a,r=e[n],l=s[n]&&s[n].label||r.lang;return r.lang===t.$lang?a=o:(a=o.replace(t.$localeConfig.path,n),i.some((function(t){return t.path===a}))||(a=n)),{text:l,link:a}}))};return[].concat(Object(r.a)(n),[a])}var l=this.$themeConfig.blogConfig||{},c=n.some((function(t){return!l.category||t.text===(l.category.text||"分类")})),u=n.some((function(t){return!l.tag||t.text===(l.tag.text||"标签")}));if(!c&&Object.hasOwnProperty.call(l,"category")){var d=l.category,h=this.$categories;n.splice(parseInt(d.location||2)-1,0,{items:h.list.map((function(t){return t.link=t.path,t.text=t.name,t})),text:d.text||"分类",type:"links",icon:"reco-category"})}if(!u&&Object.hasOwnProperty.call(l,"tag")){var f=l.tag;n.splice(parseInt(f.location||3)-1,0,{link:"/tag/",text:f.text||"标签",type:"links",icon:"reco-tag"})}return n},userLinks:function(){return(this.nav||[]).map((function(t){return Object.assign(Object(h.l)(t),{items:(t.items||[]).map(h.l)})}))},repoLink:function(){var t=this.$themeConfig.repo;return t?/^https?:/.test(t)?t:"https://github.com/".concat(t):""},repoLabel:function(){if(this.repoLink){if(this.$themeConfig.repoLabel)return this.$themeConfig.repoLabel;for(var t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"],n=0;n=18?"dark":"light")}}else b(t)}var y={name:"ModeOptions",data:function(){return{modeOptions:[{mode:"dark",title:"dark"},{mode:"auto",title:"auto"},{mode:"light",title:"light"}],currentMode:"auto"}},mounted:function(){this.currentMode=localStorage.getItem("mode")||this.$themeConfig.mode||"auto";var t=this;window.matchMedia("(prefers-color-scheme: dark)").addListener((function(){"auto"===t.$data.currentMode&&_(t.$data.currentMode)})),window.matchMedia("(prefers-color-scheme: light)").addListener((function(){"auto"===t.$data.currentMode&&_(t.$data.currentMode)})),_(this.currentMode)},methods:{selectMode:function(t){t!==this.currentMode&&(this.currentMode=t,_(t),localStorage.setItem("mode",t))},getClass:function(t){return t!==this.currentMode?t:"".concat(t," active")}}},k=(n(433),Object(i.a)(y,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"mode-options"},[n("h4",{staticClass:"title"},[t._v("Choose mode")]),t._v(" "),n("ul",{staticClass:"color-mode-options"},t._l(t.modeOptions,(function(e,o){return n("li",{key:o,class:t.getClass(e.mode),on:{click:function(n){return t.selectMode(e.mode)}}},[t._v(t._s(e.title))])})),0)])}),[],!1,null,null,null).exports),w={name:"UserSettings",directives:{"click-outside":m.a},components:{ModePicker:k},data:function(){return{showMenu:!1}},mounted:function(){var t=this.$themeConfig.mode||"auto";!1===this.$themeConfig.modePicker&&("auto"===t&&(window.matchMedia("(prefers-color-scheme: dark)").addListener((function(){_(t)})),window.matchMedia("(prefers-color-scheme: light)").addListener((function(){_(t)}))),_(t))},methods:{hideMenu:function(){this.showMenu=!1}}};n(434);function x(t,e){return t.ownerDocument.defaultView.getComputedStyle(t,null)[e]}var C={components:{SidebarButton:a,NavLinks:p,SearchBox:s,AlgoliaSearchBox:{},Mode:Object(i.a)(w,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return!1!==t.$themeConfig.modePicker?n("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"color-picker"},[n("a",{staticClass:"color-button",on:{click:function(e){e.preventDefault(),t.showMenu=!t.showMenu}}},[n("i",{staticClass:"iconfont reco-color"})]),t._v(" "),n("transition",{attrs:{name:"menu-transition",mode:"out-in"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.showMenu,expression:"showMenu"}],staticClass:"color-picker-menu"},[n("ModePicker")],1)])],1):t._e()}),[],!1,null,null,null).exports},data:function(){return{linksWrapMaxWidth:null}},mounted:function(){var t=this,e=parseInt(x(this.$el,"paddingLeft"))+parseInt(x(this.$el,"paddingRight")),n=function(){document.documentElement.clientWidth<719?t.linksWrapMaxWidth=null:t.linksWrapMaxWidth=t.$el.offsetWidth-e-(t.$refs.siteName&&t.$refs.siteName.offsetWidth||0)};n(),window.addEventListener("resize",n,!1)},computed:{algolia:function(){return this.$themeLocaleConfig.algolia||this.$themeConfig.algolia||{}},isAlgoliaSearch:function(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}}},$=(n(435),Object(i.a)(C,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("header",{staticClass:"navbar"},[n("SidebarButton",{on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),n("router-link",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$themeConfig.logo?n("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$themeConfig.logo),alt:t.$siteTitle}}):t._e(),t._v(" "),t.$siteTitle?n("span",{ref:"siteName",staticClass:"site-name"},[t._v(t._s(t.$siteTitle))]):t._e()]),t._v(" "),n("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[n("Mode"),t._v(" "),t.isAlgoliaSearch?n("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$themeConfig.search&&!1!==t.$frontmatter.search?n("SearchBox"):t._e(),t._v(" "),n("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null).exports),S=n(418),T=n(419),O={name:"Sidebar",components:{SidebarLinks:S.default,NavLinks:p,PersonalInfo:T.a},props:["items"]},I=(n(439),Object(i.a)(O,(function(){var t=this.$createElement,e=this._self._c||t;return e("aside",{staticClass:"sidebar"},[e("PersonalInfo"),this._v(" "),e("NavLinks"),this._v(" "),this._t("top"),this._v(" "),e("SidebarLinks",{attrs:{depth:0,items:this.items}}),this._v(" "),this._t("bottom")],2)}),[],!1,null,null,null).exports),L=(n(50),n(415)),M=n.n(L),P=n(363),E=n(361),j={mixins:[E.a],components:{ModuleTransition:P.a},props:{isPage:{type:Boolean,default:!1}},name:"Password",data:function(){return{warningText:"Konck! Knock!",key:""}},computed:{year:function(){return(new Date).getFullYear()}},methods:{inter:function(){var t=this.key,e=this.isPage,n=this.isHasPageKey,o=this.isHasKey,i=this.$refs.passwordBtn,s=M()(t.trim()),a="pageKey".concat(window.location.pathname),r=e?a:"key";if(sessionStorage.setItem(r,s),e?n():o()){this.warningText="Key Success";var l=document.getElementById("box").style.width;i.style.width="".concat(l-2,"px"),i.style.opacity=1,setTimeout((function(){window.location.reload()}),800)}else this.warningText="Key Error"},inputFocus:function(){this.warningText="Input Your Key"},inputBlur:function(){this.warningText="Konck! Knock!"},isHasKey:function(){var t=this.$themeConfig.keyPage.keys;return(t=t.map((function(t){return t.toLowerCase()}))).indexOf(sessionStorage.getItem("key"))>-1},isHasPageKey:function(){var t=this.$frontmatter.keys.map((function(t){return t.toLowerCase()})),e="pageKey".concat(window.location.pathname);return t&&t.indexOf(sessionStorage.getItem(e))>-1}}},B=(n(442),Object(i.a)(j,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"password-shadow"},[n("ModuleTransition",[n("h3",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"title"},[t._v(t._s(t.isPage?t.$frontmatter.title:t.$site.title||t.$localeConfig.title))])]),t._v(" "),n("ModuleTransition",{attrs:{delay:"0.08"}},[t.recoShowModule&&!t.isPage?n("p",{staticClass:"description"},[t._v(t._s(t.$site.description||t.$localeConfig.description))]):t._e()]),t._v(" "),n("ModuleTransition",{attrs:{delay:"0.16"}},[n("label",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"inputBox",attrs:{id:"box"}},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.key,expression:"key"}],attrs:{type:"password"},domProps:{value:t.key},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.inter(e)},focus:t.inputFocus,blur:t.inputBlur,input:function(e){e.target.composing||(t.key=e.target.value)}}}),t._v(" "),n("span",[t._v(t._s(t.warningText))]),t._v(" "),n("button",{ref:"passwordBtn",on:{click:t.inter}},[t._v("OK")])])]),t._v(" "),n("ModuleTransition",{attrs:{delay:"0.24"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"footer"},[n("span",[n("i",{staticClass:"iconfont reco-theme"}),t._v(" "),n("a",{attrs:{target:"blank",href:"https://vuepress-theme-reco.recoluan.com/"}},[t._v("vuePress-theme-reco")])]),t._v(" "),n("span",[n("i",{staticClass:"iconfont reco-copyright"}),t._v(" "),n("a",[t.$themeConfig.author||t.$site.title?n("span",[t._v(t._s(t.$themeConfig.author||t.$site.title))]):t._e(),t._v("\n   \n "),t.$themeConfig.startYear&&t.$themeConfig.startYear!=t.year?n("span",[t._v(t._s(t.$themeConfig.startYear)+" - ")]):t._e(),t._v("\n "+t._s(t.year)+"\n ")])])])])],1)}),[],!1,null,"64685f0e",null).exports),H=n(443),K={mixins:[E.a],components:{Sidebar:I,Navbar:$,Password:B},props:{sidebar:{type:Boolean,default:!0}},data:function(){return{isSidebarOpen:!1,isHasKey:!0,isHasPageKey:!0,firstLoad:!0}},computed:{absoluteEncryption:function(){return this.$themeConfig.keyPage&&!0===this.$themeConfig.keyPage.absoluteEncryption},shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!1!==this.sidebar&&!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(h.n)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1})),this.hasKey(),this.hasPageKey(),this.handleLoading()},methods:{hasKey:function(){var t=this.$themeConfig.keyPage;if(t&&t.keys&&0!==t.keys.length){var e=t.keys;e=e.map((function(t){return t.toLowerCase()})),this.isHasKey=e&&e.indexOf(sessionStorage.getItem("key"))>-1}else this.isHasKey=!0},hasPageKey:function(){var t=this.$frontmatter.keys;t&&0!==t.length?(t=t.map((function(t){return t.toLowerCase()})),this.isHasPageKey=t.indexOf(sessionStorage.getItem("pageKey".concat(window.location.pathname)))>-1):this.isHasPageKey=!0},toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,n=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(n)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))},handleLoading:function(){var t=this,e=this.$frontmatter.home&&null==sessionStorage.getItem("firstLoad")?1e3:0;Object(H.setTimeout)((function(){t.firstLoad=!1,null==sessionStorage.getItem("firstLoad")&&sessionStorage.setItem("firstLoad",!1)}),e)}},watch:{$frontmatter:function(t,e){this.hasKey(),this.hasPageKey()}}},N=(n(445),Object(i.a)(K,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.absoluteEncryption?n("div",[n("transition",{attrs:{name:"fade"}},[t.firstLoad?n("LoadingPage"):t.isHasKey?n("div",[t.shouldShowNavbar?n("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),n("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),n("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar}},[t._t("sidebar-top",null,{slot:"top"}),t._v(" "),t._t("sidebar-bottom",null,{slot:"bottom"})],2),t._v(" "),t.isHasPageKey?n("div",[t._t("default")],2):n("Password",{attrs:{isPage:!0}})],1):n("Password")],1)],1):n("div",[n("transition",{attrs:{name:"fade"}},[n("LoadingPage",{directives:[{name:"show",rawName:"v-show",value:t.firstLoad,expression:"firstLoad"}],staticClass:"loading-wrapper"})],1),t._v(" "),n("transition",{attrs:{name:"fade"}},[n("Password",{directives:[{name:"show",rawName:"v-show",value:!t.isHasKey,expression:"!isHasKey"}],key:"out",staticClass:"password-wrapper-out"})],1),t._v(" "),n("div",{class:{hide:t.firstLoad||!t.isHasKey}},[t.shouldShowNavbar?n("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),n("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),n("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar}},[t._t("sidebar-top",null,{slot:"top"}),t._v(" "),t._t("sidebar-bottom",null,{slot:"bottom"})],2),t._v(" "),n("Password",{directives:[{name:"show",rawName:"v-show",value:!t.isHasPageKey,expression:"!isHasPageKey"}],key:"in",staticClass:"password-wrapper-in",attrs:{isPage:!0}}),t._v(" "),n("div",{class:{hide:!t.isHasPageKey}},[t._t("default")],2)],1)],1)])}),[],!1,null,"19557b78",null));e.a=N.exports},383:function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},384:function(t,e,n){},385:function(t,e,n){},386:function(t,e,n){},387:function(t,e,n){},388:function(t,e,n){},389:function(t,e,n){},390:function(t,e,n){},391:function(t,e,n){},392:function(t,e,n){},393:function(t,e,n){},394:function(t,e,n){},395:function(t,e,n){},396:function(t,e,n){},397:function(t,e,n){},398:function(t,e,n){},412:function(t,e,n){"use strict";n(176),n(77),n(414);var o=n(49),i={props:{item:{required:!0}},computed:{link:function(){return Object(o.c)(this.item.link)},exact:function(){var t=this;return this.$site.locales?Object.keys(this.$site.locales).some((function(e){return e===t.link})):"/"===this.link}},methods:{isExternal:o.h,isMailto:o.i,isTel:o.j}},s=n(3),a=Object(s.a)(i,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isExternal(t.link)?n("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.isMailto(t.link)||t.isTel(t.link)?null:"_blank",rel:t.isMailto(t.link)||t.isTel(t.link)?null:"noopener noreferrer"}},[n("i",{class:"iconfont "+t.item.icon}),t._v("\n "+t._s(t.item.text)+"\n "),n("OutboundLink")],1):n("router-link",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact}},[n("i",{class:"iconfont "+t.item.icon}),t._v("\n "+t._s(t.item.text)+"\n")])}),[],!1,null,null,null);e.a=a.exports},413:function(t,e,n){"use strict";var o=n(0),i=n(378).trim;o({target:"String",proto:!0,forced:n(423)("trim")},{trim:function(){return i(this)}})},414:function(t,e,n){"use strict";var o=n(0),i=n(427);o({target:"String",proto:!0,forced:n(428)("link")},{link:function(t){return i(this,"a","href",t)}})},415:function(t,e,n){var o,i,s,a,r;o=n(440),i=n(416).utf8,s=n(184),a=n(416).bin,(r=function(t,e){t.constructor==String?t=e&&"binary"===e.encoding?a.stringToBytes(t):i.stringToBytes(t):s(t)?t=Array.prototype.slice.call(t,0):Array.isArray(t)||(t=t.toString());for(var n=o.bytesToWords(t),l=8*t.length,c=1732584193,u=-271733879,d=-1732584194,h=271733878,f=0;f>>24)|4278255360&(n[f]<<24|n[f]>>>8);n[l>>>5]|=128<>>9<<4)]=l;var p=r._ff,g=r._gg,m=r._hh,v=r._ii;for(f=0;f>>0,u=u+_>>>0,d=d+y>>>0,h=h+k>>>0}return o.endian([c,u,d,h])})._ff=function(t,e,n,o,i,s,a){var r=t+(e&n|~e&o)+(i>>>0)+a;return(r<>>32-s)+e},r._gg=function(t,e,n,o,i,s,a){var r=t+(e&o|n&~o)+(i>>>0)+a;return(r<>>32-s)+e},r._hh=function(t,e,n,o,i,s,a){var r=t+(e^n^o)+(i>>>0)+a;return(r<>>32-s)+e},r._ii=function(t,e,n,o,i,s,a){var r=t+(n^(e|~o))+(i>>>0)+a;return(r<>>32-s)+e},r._blocksize=16,r._digestsize=16,t.exports=function(t,e){if(null==t)throw new Error("Illegal argument "+t);var n=o.wordsToBytes(r(t,e));return e&&e.asBytes?n:e&&e.asString?a.bytesToString(n):o.bytesToHex(n)}},416:function(t,e){var n={utf8:{stringToBytes:function(t){return n.bin.stringToBytes(unescape(encodeURIComponent(t)))},bytesToString:function(t){return decodeURIComponent(escape(n.bin.bytesToString(t)))}},bin:{stringToBytes:function(t){for(var e=[],n=0;n5&&void 0!==arguments[5]?arguments[5]:1;return!e||a>s?null:t("ul",{class:"sidebar-sub-headers"},e.map((function(e){var c=Object(o.g)(i,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[r(t,n+"#"+e.slug,e.title,c),l(t,e.children,n,i,s,a+1)])})))}var c={functional:!0,props:["item","sidebarDepth"],render:function(t,e){var n=e.parent,i=n.$page,s=(n.$site,n.$route),a=n.$themeConfig,c=n.$themeLocaleConfig,u=e.props,d=u.item,h=u.sidebarDepth,f=Object(o.g)(s,d.path),p="auto"===d.type?f||d.children.some((function(t){return Object(o.g)(s,d.basePath+"#"+t.slug)})):f,g=r(t,d.path,d.title||d.path,p),m=i.frontmatter.sidebarDepth||h||c.sidebarDepth||a.sidebarDepth,v=null==m?1:m,b=c.displayAllHeaders||a.displayAllHeaders;return"auto"===d.type?[g,l(t,d.children,d.basePath,s,v)]:(p||b)&&d.headers&&!o.f.test(d.path)?[g,l(t,Object(o.e)(d.headers),d.path,s,v)]:g}};n(437);var u={name:"SidebarLinks",components:{SidebarGroup:a,SidebarLink:Object(s.a)(c,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth"],data:function(){return{openGroupIndex:0}},created:function(){this.refreshIndex()},watch:{$route:function(){this.refreshIndex()}},mounted:function(){this.activationLink(),this.isInViewPortOfOne()},updated:function(){this.isInViewPortOfOne()},methods:{activationLink:function(){var t=decodeURIComponent(this.$route.fullPath);if(t&&""!=t)for(var e=[].slice.call(document.querySelectorAll(".sidebar-link")),n=0;n=s||(t.scrollTop=o-5)}},refreshIndex:function(){var t=function(t,e){for(var n=0;n-1&&(this.openGroupIndex=t)},toggleGroup:function(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive:function(t){return Object(o.g)(this.$route,t.regularPath)}}},d=Object(s.a)(u,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.items.length?n("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(e,o){return n("li",{key:o},["group"===e.type?n("SidebarGroup",{attrs:{item:e,open:o===t.openGroupIndex,collapsable:e.collapsable||e.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(o)}}}):n("SidebarLink",{attrs:{sidebarDepth:t.sidebarDepth,item:e}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=d.exports},419:function(t,e,n){"use strict";var o={computed:{homeBlogCfg:function(){return this.$recoLocals.homeBlog}}},i=(n(438),n(3)),s=Object(i.a)(o,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"personal-info-wrapper"},[t.$themeConfig.authorAvatar?n("img",{staticClass:"personal-img",attrs:{src:t.$withBase(t.$themeConfig.authorAvatar),alt:"author-avatar"}}):t._e(),t._v(" "),t.$themeConfig.author||t.$site.title?n("h3",{staticClass:"name"},[t._v("\n "+t._s(t.$themeConfig.author||t.$site.title)+"\n ")]):t._e(),t._v(" "),n("div",{staticClass:"num"},[n("div",[n("h3",[t._v(t._s(t.$recoPosts.length))]),t._v(" "),n("h6",[t._v(t._s(t.homeBlogCfg.article))])]),t._v(" "),n("div",[n("h3",[t._v(t._s(t.$tags.list.length))]),t._v(" "),n("h6",[t._v(t._s(t.homeBlogCfg.tag))])])]),t._v(" "),n("hr")])}),[],!1,null,"b038cec6",null);e.a=s.exports},420:function(t,e,n){"use strict";var o={name:"DropdownTransition",methods:{setHeight:function(t){t.style.height=t.scrollHeight+"px"},unsetHeight:function(t){t.style.height=""}}},i=(n(429),n(3)),s=Object(i.a)(o,(function(){var t=this.$createElement;return(this._self._c||t)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.a=s.exports},422:function(t,e,n){var o=n(4),i=n(378).trim,s=n(383),a=o.parseInt,r=/^[+-]?0[Xx]/,l=8!==a(s+"08")||22!==a(s+"0x16");t.exports=l?function(t,e){var n=i(String(t));return a(n,e>>>0||(r.test(n)?16:10))}:a},423:function(t,e,n){var o=n(1),i=n(383);t.exports=function(t){return o((function(){return!!i[t]()||"​…᠎"!="​…᠎"[t]()||i[t].name!==t}))}},424:function(t,e,n){"use strict";var o=n(384);n.n(o).a},425:function(t,e,n){"use strict";var o=n(385);n.n(o).a},426:function(t,e,n){"use strict";var o=n(0),i=n(109),s=n(31),a=n(11),r=n(13),l=n(110),c=n(78),u=n(53),d=n(20),h=u("splice"),f=d("splice",{ACCESSORS:!0,0:0,1:2}),p=Math.max,g=Math.min;o({target:"Array",proto:!0,forced:!h||!f},{splice:function(t,e){var n,o,u,d,h,f,m=r(this),v=a(m.length),b=i(t,v),_=arguments.length;if(0===_?n=o=0:1===_?(n=0,o=v-b):(n=_-2,o=g(p(s(e),0),v-b)),v+n-o>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(u=l(m,o),d=0;dv-o+n;d--)delete m[d-1]}else if(n>o)for(d=v-o;d>b;d--)f=d+n-1,(h=d+o-1)in m?m[f]=m[h]:delete m[f];for(d=0;d"+a+""}},428:function(t,e,n){var o=n(1);t.exports=function(t){return o((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},429:function(t,e,n){"use strict";var o=n(386);n.n(o).a},430:function(t,e,n){"use strict";var o=n(387);n.n(o).a},431:function(t,e,n){"use strict";var o=n(388);n.n(o).a},432:function(t,e){function n(t){return"function"==typeof t.value||(console.warn("[Vue-click-outside:] provided expression",t.expression,"is not a function."),!1)}function o(t){return void 0!==t.componentInstance&&t.componentInstance.$isServer}t.exports={bind:function(t,e,i){if(!n(e))return;function s(e){if(i.context){var n=e.path||e.composedPath&&e.composedPath();n&&n.length>0&&n.unshift(e.target),t.contains(e.target)||function(t,e){if(!t||!e)return!1;for(var n=0,o=e.length;n>>32-e},rotr:function(t,e){return t<<32-e|t>>>e},endian:function(t){if(t.constructor==Number)return 16711935&o.rotl(t,8)|4278255360&o.rotl(t,24);for(var e=0;e0;t--)e.push(Math.floor(256*Math.random()));return e},bytesToWords:function(t){for(var e=[],n=0,o=0;n>>5]|=t[n]<<24-o%32;return e},wordsToBytes:function(t){for(var e=[],n=0;n<32*t.length;n+=8)e.push(t[n>>>5]>>>24-n%32&255);return e},bytesToHex:function(t){for(var e=[],n=0;n>>4).toString(16)),e.push((15&t[n]).toString(16));return e.join("")},hexToBytes:function(t){for(var e=[],n=0;n>>6*(3-s)&63)):e.push("=");return e.join("")},base64ToBytes:function(t){t=t.replace(/[^A-Z0-9+\/]/gi,"");for(var e=[],o=0,i=0;o>>6-2*i);return e}},t.exports=o},441:function(t,e,n){"use strict";var o=n(396);n.n(o).a},442:function(t,e,n){"use strict";var o=n(397);n.n(o).a},443:function(t,e,n){var o="undefined"!=typeof global&&global||"undefined"!=typeof self&&self||window,i=Function.prototype.apply;function s(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new s(i.call(setTimeout,o,arguments),clearTimeout)},e.setInterval=function(){return new s(i.call(setInterval,o,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},s.prototype.unref=s.prototype.ref=function(){},s.prototype.close=function(){this._clearFn.call(o,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n(444),e.setImmediate="undefined"!=typeof self&&self.setImmediate||"undefined"!=typeof global&&global.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||"undefined"!=typeof global&&global.clearImmediate||this&&this.clearImmediate},444:function(t,e){!function(t,e){"use strict";if(!t.setImmediate){var n,o,i,s,a,r=1,l={},c=!1,u=t.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(t);d=d&&d.setTimeout?d:t,"[object process]"==={}.toString.call(t.process)?n=function(t){process.nextTick((function(){f(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((i=new MessageChannel).port1.onmessage=function(t){f(t.data)},n=function(t){i.port2.postMessage(t)}):u&&"onreadystatechange"in u.createElement("script")?(o=u.documentElement,n=function(t){var e=u.createElement("script");e.onreadystatechange=function(){f(t),e.onreadystatechange=null,o.removeChild(e),e=null},o.appendChild(e)}):n=function(t){setTimeout(f,0,t)}:(s="setImmediate$"+Math.random()+"$",a=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(s)&&f(+e.data.slice(s.length))},t.addEventListener?t.addEventListener("message",a,!1):t.attachEvent("onmessage",a),n=function(e){t.postMessage(s+e,"*")}),d.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),o=0;o= 0) ")])])],1),t._v(" "),a("p",[a("br"),t._v("但是这里我们遇到一个问题,"),a("strong",[t._v("很有可能 dp[i-1] 本身是一个负数")]),t._v("。那这种情况的话,"),a("strong",[t._v("如果 dp[i] 通过 dp[i-1]+nums[i] 来推导,那么结果其实反而变小了")]),t._v(",因为我们 dp[i] 要求的是最大和。所以在这种情况下,"),a("strong",[t._v("如果 dp[i-1] < 0,那么 dp[i] 其实就是 nums[i] 的值")]),t._v("。即")]),t._v(" "),a("br"),t._v(" "),a("blockquote",[a("center",[a("b",[t._v(" dp[i] = nums[i] , if (dp[i-1] < 0) ")])])],1),t._v(" "),a("p",[a("br"),t._v("综上分析,我们可以得到:")]),t._v(" "),a("br"),t._v(" "),a("blockquote",[a("center",[a("b",[t._v(" dp[i]=max(nums[i], dp[i−1]+nums[i]) ")])])],1),t._v(" "),a("p",[a("br"),t._v("得到了状态转移方程,但是我们还需要通过一个已有的状态的进行推导,我们可以想到 "),a("strong",[t._v("dp[0] 一定是以 nums[0] 进行结尾")]),t._v(",所以")]),t._v(" "),a("br"),t._v(" "),a("blockquote",[a("center",[a("b",[t._v(" dp[i] = dp[i-1]+nums[i] , if (dp[i-1] >= 0) ")])]),t._v(" "),a("center",[a("b",[t._v(" dp[0] = nums[0] ")])])],1),t._v(" "),a("p",[a("br"),t._v("在很多题目中,"),a("strong",[t._v("因为 dp[i] 本身就定义成了题目中的问题,所以 dp[i] 最终就是要的答案")]),t._v("。但是这里状态中的定义,"),a("strong",[t._v("并不是题目中要的问题,不能直接返回最后的一个状态 (这一步经常有初学者会摔跟头)")]),t._v("。所以最终的答案,其实我们是寻找:")]),t._v(" "),a("br"),t._v(" "),a("blockquote",[a("center",[a("b",[t._v(" max(dp[0], dp[1], ..., d[i-1], dp[i]) ")])])],1),t._v(" "),a("p",[a("br"),t._v("分析完毕,我们绘制成图(图中假定 nums 为 [-2,1,-3,4,-1,2,1,-5,4]):")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(503),alt:"PNG"}}),t._v(" "),a("h2",{attrs:{id:"_03、go语言示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[t._v("#")]),t._v(" 03、Go语言示例")]),t._v(" "),a("p",[t._v("根据以上分析,可以得到代码如下:")]),t._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Go")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxSubArray")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tdp "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//设置初始化值 ")]),t._v("\n\tdp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//处理 dp[i-1] < 0 的情况")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tdp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tdp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tresult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" dp "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" b "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" a\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" b\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br")])]),a("p",[t._v("我们可以进一步精简代码为:")]),t._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Go")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxSubArray")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n dp "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tresult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tdp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tresult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" b "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" a\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" b\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])]),a("blockquote",[a("p",[t._v("复杂度分析:时间复杂度:O(N)。空间复杂度:O(N)")])])])}),[],!1,null,null,null);s.default=r.exports},503:function(t,s,n){t.exports=n.p+"assets/img/1.d0382e2a.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/101.eee63711.js b/learning/.vuepress/dist/assets/js/101.eee63711.js deleted file mode 100644 index 77d8e644..00000000 --- a/learning/.vuepress/dist/assets/js/101.eee63711.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[101],{1071:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第344题:反转字符串")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。")])])])]),t._v(" "),n("p",[t._v("不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。")]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('输入:["h","e","l","l","o"]\n输出:["o","l","l","e","h"]\n')])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('输入:["H","a","n","n","a","h"]\n输出:["h","a","n","n","a","H"]\n')])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("h2",{attrs:{id:"_02、题目图解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[t._v("#")]),t._v(" 02、题目图解")]),t._v(" "),n("p",[t._v("这是一道相当简单的经典题目,直接上题解:使用双指针进行反转字符串。")]),t._v(" "),n("p",[t._v('假设输入字符串为["h","e","l","l","0"]')]),t._v(" "),n("ul",[n("li",[t._v("定义left和right分别指向首元素和尾元素")]),t._v(" "),n("li",[t._v("当left < right ,进行交换。")]),t._v(" "),n("li",[t._v("交换完毕,left++,right--")]),t._v(" "),n("li",[t._v("直至left == right")])]),t._v(" "),n("p",[t._v("具体过程如下图所示:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(553),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、go语言示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[t._v("#")]),t._v(" 03、Go语言示例")]),t._v(" "),n("p",[t._v("根据以上分析,我们可以得到下面的题解:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Go")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("reverseString")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tleft "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\tright "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\tleft"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n\t\tright"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])])])}),[],!1,null,null,null);s.default=e.exports},553:function(t,s,a){t.exports=a.p+"assets/img/1.81971505.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/102.55d0cb83.js b/learning/.vuepress/dist/assets/js/102.55d0cb83.js deleted file mode 100644 index 4f505320..00000000 --- a/learning/.vuepress/dist/assets/js/102.55d0cb83.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[102],{1065:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第387题:字符串中的第一个唯一字符")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1 。")])])])]),s._v(" "),n("p",[n("strong",[s._v("案例:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('s = "leetcode"\n返回 0.\n\ns = "loveleetcode",\n返回 2. \n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br")])]),n("p",[s._v("**注意事项:**您可以假定该字符串只包含小写字母。")]),s._v(" "),n("blockquote",[n("center",[n("b",[s._v("常考题目,建议自行思考 1-2 分钟先~"),n("b")])])],1),s._v(" "),n("h2",{attrs:{id:"_02、题目图解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[s._v("#")]),s._v(" 02、题目图解")]),s._v(" "),n("p",[s._v("题目不难,直接进行分析。由于字母共有 26 个,所以我们可以声明一个 26 个长度的数组(该种方法在本类题型很常用)因为字符串中字母可能是重复的,所以我们可以先进行第一次遍历,在数组中记录"),n("strong",[s._v("每个字母的最后一次出现的所在索引")]),s._v("。然后再通过一次循环,"),n("strong",[s._v("比较各个字母第一次出现的索引是否为最后一次的索引")]),s._v("。如果是,我们就找到了我们的目标,如果不是我们将其设为 -1("),n("strong",[s._v("标示该元素非目标元素")]),s._v(")如果第二次遍历最终没有找到目标,直接返回 -1即可。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("图解如下:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(530),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_03、go语言示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[s._v("#")]),s._v(" 03、GO语言示例")]),s._v(" "),n("p",[s._v("根据以上分析,可以得到代码如下:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("firstUniqChar")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("26")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("range")]),s._v(" s "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'a'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("range")]),s._v(" s "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'a'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" i\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'a'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])])])}),[],!1,null,null,null);t.default=r.exports},530:function(s,t,a){s.exports=a.p+"assets/img/1.458698c8.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/103.3ec46175.js b/learning/.vuepress/dist/assets/js/103.3ec46175.js deleted file mode 100644 index 96828cfc..00000000 --- a/learning/.vuepress/dist/assets/js/103.3ec46175.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[103],{1085:function(_,v,t){"use strict";t.r(v);var r=t(3),s=Object(r.a)({},(function(){var _=this,v=_.$createElement,r=_._self._c||v;return r("ContentSlotsDistributor",{attrs:{"slot-key":_.$parent.slotKey}},[r("blockquote",[r("p",[_._v("本系列将为大家带来一整套的"),r("strong",[_._v("博弈论问题")]),_._v("。因为在面试的过程中,除了常规的算法题目,我们经常也会被问到一些趣味题型来考察思维,而这类问题中,很多都有博弈论的影子存在。这些公司里以FLAG(Facebook, LinkedIn, Amazon, Google)为典型,特别喜欢考察本类题型。同时,本系列将不一定都是算法问题,不是IT行业的小伙伴也可以进行学习,来提高分析问题的能力~")])]),_._v(" "),r("h2",{attrs:{id:"_01、什么是-博弈论"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_01、什么是-博弈论"}},[_._v("#")]),_._v(" 01、什么是“博弈论”")]),_._v(" "),r("p",[_._v("古语有云,“笑人情似纸,世事如棋”。生活中每个人如同棋手,其每一个行为如同在一张看不见的棋盘上布子,精明慎重的棋手们相互揣摩、牵制、争赢,下出诸多精彩纷呈、变化多端的棋局。而什么是博弈论?就是研究棋手们 的“出棋” 过程,从中抽象出可逻辑化的部分,并将其系统化的一门科学,也是运筹学的一个重要学科。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("我们从最简单的一道“"),r("strong",[_._v("囚徒困境")]),_._v("”来进行学习~")]),_._v(" "),r("h2",{attrs:{id:"_02、囚徒困境"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_02、囚徒困境"}},[_._v("#")]),_._v(" 02、囚徒困境")]),_._v(" "),r("table",[r("thead",[r("tr",[r("th",[_._v("囚徒困境")])])]),_._v(" "),r("tbody",[r("tr",[r("td",[_._v("一件严重的纵火案发生后,警察在现场抓到两个犯罪嫌疑人。事实上,正是他们一起放火烧了这座仓库。但是,警方没有掌握足够的证据,只得把他们分开囚禁起来,要求他们坦白交代。")])])])]),_._v(" "),r("p",[_._v("在分开囚禁后,警察对其分别告知:")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("如果你坦白,而对方不坦白,则将你释放,判对方8年。")]),_._v(" "),r("p",[_._v("如果你不坦白,而对方坦白,则将对方释放,而判你8年。")]),_._v(" "),r("p",[_._v("如果你两都坦白了,则判你两各自4年。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("那么两个囚犯应该如何做,是互相背叛还是一起合作?")]),_._v(" "),r("br"),_._v(" "),r("p",[r("strong",[_._v("题目分析:")])]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("从表面上看,其实囚犯最应该的就是一起合作,都不坦白,这样因为证据不足,会将两人都进行释放。但是!因为事实确实是两人放的火,所以他们"),r("strong",[_._v("不得不进行思考,另一人采取了什么样的行为")]),_._v("?")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("犯人甲当然不傻,他根本无法相信同伙不会向警方提供任何信息!因为如果同伙一旦坦白,而自己这边如果什么都没说的话,就可以潇洒而去。但他同时也意识到,他的同伙也不傻,也会同样来这样设想他。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("所以犯人甲的结论是,"),r("strong",[_._v("唯一理性的选择就是背叛同伙")]),_._v(",把一切都告诉警方!这样的话,如果他的同伙笨得只会保持沉默,那么他就会是那个离开的人。而如果他的同伙也根据这个逻辑向警方交代了,那么也没有关系,起码他不必服最重的刑!")]),_._v(" "),r("img",{staticStyle:{zoom:"50%"},attrs:{src:t(668),alt:"img"}}),_._v(" "),r("h2",{attrs:{id:"_03、囚徒困境与纳什均衡"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_03、囚徒困境与纳什均衡"}},[_._v("#")]),_._v(" 03、囚徒困境与纳什均衡")]),_._v(" "),r("p",[_._v("这场博弈的过程,"),r("strong",[_._v("显然不是顾及团体利益的最优解决方案")]),_._v("。以全体利益而言,如果两个参与者都合作保持沉默,两人都可以无罪释放,总体利益更高!但根据假设(人性),二人"),r("strong",[_._v("均为理性的个人")]),_._v(",且只追求自己的个人利益。均衡状况会是两个囚徒都选择背叛,这就是“困境”所在!")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("事实上,这种"),r("strong",[_._v("两人都选择坦白的策略以及因此被判4年的结局")]),_._v("被称作“"),r("strong",[_._v("纳什均衡")]),_._v("”(也叫非合作均衡),换言之,在此情况下,"),r("strong",[_._v("无一参与者可以“独自行动”(即单方面改变决定)而增加收获。")])]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("我们看一下官方释意是多么难懂“所谓纳什均衡,指的是参与人的一种策略组合,在该策略组合上**,任何参与人单独改变策略都不会得到好处。”**简单点讲,如果在一个策略组合上,当所有其他人都不改变策略时,没有人会改变自己的策略,则该策略组合就是一个纳什均衡。")])])}),[],!1,null,null,null);v.default=s.exports},668:function(_,v,t){_.exports=t.p+"assets/img/1.e921e02f.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/104.d27f675f.js b/learning/.vuepress/dist/assets/js/104.d27f675f.js deleted file mode 100644 index c740380f..00000000 --- a/learning/.vuepress/dist/assets/js/104.d27f675f.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[104],{1091:function(_,v,t){"use strict";t.r(v);var r=t(3),s=Object(r.a)({},(function(){var _=this,v=_.$createElement,r=_._self._c||v;return r("ContentSlotsDistributor",{attrs:{"slot-key":_.$parent.slotKey}},[r("blockquote",[r("p",[_._v("今天给大家讲解一个博弈论中很有趣的问题,智猪博弈。")])]),_._v(" "),r("h2",{attrs:{id:"_01、智猪博弈"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_01、智猪博弈"}},[_._v("#")]),_._v(" 01、智猪博弈")]),_._v(" "),r("blockquote",[r("p",[_._v("在博弈论(Game Theory)经济学中,“智猪博弈”是一个著名的纳什均衡的例子。如果不了解什么是纳什均衡,可以先看下下面的文章。")])]),_._v(" "),r("p",[r("RouterLink",{attrs:{to:"/1.6.博弈论系列/1.6.博弈论系列/601.html"}},[_._v("博弈论系列 - 囚徒困境")])],1),_._v(" "),r("table",[r("thead",[r("tr",[r("th",[_._v("题目:智猪博弈")])])]),_._v(" "),r("tbody",[r("tr",[r("td",[_._v("假设猪圈里有一头大猪、一头小猪。猪圈的一头有猪食槽,另一头安装着控制猪食供应的按钮,按一下按钮会有10个单位的猪食进槽,,但是按按钮以后跑到食槽所需要付出的劳动量,加起来要消耗相当于2个单位的猪食。并且因为按钮和食槽分置笼子的两端,等到按按钮的猪付出劳动跑到食槽的时候,坐享其成的另一头猪早已吃了不少。")])])])]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("如果大猪先到(小猪按),大猪吃掉9个单位,小猪只能吃到1个单位;如果同时到达(也就是一起按),大猪吃掉7个单位,小猪吃到3个单位;如果小猪先到(大猪按),小猪可以吃到4个单位,而大猪吃到6个单位")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("那么,在两头猪都足够聪明的前提下,最终的结果是什么?")]),_._v(" "),r("h2",{attrs:{id:"_02、推导过程"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_02、推导过程"}},[_._v("#")]),_._v(" 02、推导过程")]),_._v(" "),r("blockquote",[r("p",[_._v('"智猪博弈"由约翰·纳什(JohnFNash),于1950年提出。')])]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("这个推导过程还是比较简单的。首先小猪如果去按按钮,然后再回来的话,只能吃到一份猪食,直接就嗝屁了,这种可能性肯定是不行的。自然,这时大猪也就只有去按按钮这一个选项了。所以最终的结果会是:"),r("strong",[_._v("小猪选择等待,大猪去按按钮")]),_._v("。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("用博弈论中的报酬矩阵,将图画出来,可能更加有助于大家思考:")]),_._v(" "),r("img",{staticStyle:{zoom:"80%"},attrs:{src:t(684),alt:"PNG"}}),_._v(" "),r("ul",[r("li",[r("p",[_._v("如果小猪和大猪同时行动的话,则它们同时到达食槽,分别得到1个单位和5个单位的纯收益(付出4个单位的成本)")])]),_._v(" "),r("li",[r("p",[_._v("如果大猪行动,小猪等待,小猪可得到4个单位的纯收益,大猪得到的6个单位,付出2个单位的成本,实得4个单位;")])]),_._v(" "),r("li",[r("p",[_._v("如果大猪等待,小猪行动,小猪只能吃到1个单位,则小猪的收入将不抵成本,纯收益为-1。")])]),_._v(" "),r("li",[r("p",[_._v("如果大猪等待,小猪也等待,那么小猪的收益为零,成本也为零,总之,小猪等待还是要优于行动。")])])]),_._v(" "),r("br"),_._v(" "),r("h2",{attrs:{id:"_03、题目意义"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_03、题目意义"}},[_._v("#")]),_._v(" 03、题目意义")]),_._v(" "),r("p",[_._v("我猜测会有一些朋友,在看到这样一道题目后,会觉得这不是很简单吗,有什么可说的,其实不是这样。这道题目是一个很经典的“"),r("strong",[_._v("劣势策略”下的可预测问题")]),_._v(",其在各高校经济学课程中也被放在一个举足轻重的地位上。原因无他,正是大猪做出这样一个“决策”,目的不是出于对小猪的爱,"),r("strong",[_._v("而是基于“自利”的原则")]),_._v("。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("类比到科技领域,我们都知道研发成本一定高于模仿成本,而各发达国家的研发实力又强于发展中国家,那为什么发达国家还得耗费更大的资源去探索新的技术,难道真的是对外说的为人类为社会吗?其实我认为并不是,这"),r("strong",[_._v("无关个体天性和民族禀赋")]),_._v("。我想说到这里,估计会有人不同意:说浩哥,你这样太不尊重这些为人类做出贡献的先辈了。注意,我上面说了,你得把这件事放大了看。对于个体而言,我其实是非常非常尊重的,甚至我也愿意成为这样的一个人。但是对于集体利益,或者整个国家而言,请不要过于天真,童话都是骗人的。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("当年英国政府将流放澳洲的犯人交给往来于澳洲之间的商船来完成,由此经常会发生因商船主或水手虐待犯人,致使大批流放人员因此死在途中(葬身大海)的事件发生。后来大英帝国对运送犯人的办法(制度)稍加改变,流放人员仍然由往来于澳洲的商船来运送,只是运送犯人的费用要等到犯人送到澳洲后才由政府按实到犯人人数支付给商船。仅就这样一点小小的“改变”,几乎再也没有犯人于中途死掉的事情发生。大家不要高估人性,“虐待”的本身,其实就是权利的滋生,而权利是大多数人都想尝尝的滋味。通过支付方式的一点点改变,船主不得不保护犯人,来保障自己的利益,这背后的原因其实正是智猪博弈。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("作为“大猪”,如果想要获得更大利益,就得“一直跑”。这和看不看得顺眼小猪无关,和小猪卖不卖萌也无关,真实的社会,毕竟不是小猪佩奇。现实是残酷的,如果有一天小猪突然长大了,大猪还会为小猪“奔波”吗?当然不会,看看最近的贸易战,不就是因为“小猪”长大了,所以才出现的吗。但是长大了就是长大了,总不能藏起来吧。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("等到格局到了这一步,其实博弈的结构也已经发生了变化,看看川普一日三变,我想大家都会有一些体悟。最大宏观战略的彻底转变,绝对不会因为其一方简单闹一闹,怼一怼就结束,也并不是把某个看上去比较疯狂的人换掉就可以改变的,请大家一定要记清楚这点。毕竟,这无关个体天性和民族禀赋。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])])}),[],!1,null,null,null);v.default=s.exports},684:function(_,v,t){_.exports=t.p+"assets/img/1.adc871d9.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/105.d7ceba02.js b/learning/.vuepress/dist/assets/js/105.d7ceba02.js deleted file mode 100644 index 53be4c96..00000000 --- a/learning/.vuepress/dist/assets/js/105.d7ceba02.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[105],{1106:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天继续为大家分享二分法系列篇的内容,看一道比较简单的题目。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题目是比较简单,但我认为同时也是非常经典,建议大家掌握!")])]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第69题:x的平方根")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。")])])])]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没什么意思了。")])]),t._v(" "),n("br"),t._v(" "),n("h2",{attrs:{id:"_02、二分查找"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、二分查找"}},[t._v("#")]),t._v(" 02、二分查找")]),t._v(" "),n("blockquote",[n("p",[t._v("使用二分法来完成平方根还是比较容易被想到的,在有限的“区间”中,每次通过筛选一半的元素,到最终只剩下一个数(收敛),这个数就是题目要求的取整的平方根整数。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("根据之前说过的二分法模板,要使用二分法,我们当然要找到Left,Right,Mid,那在这里,Mid 自然被作为最终我们要找的平方根的值(不像上一道题,Mid是作为速度,不太容易被想到),而 Left 和 Right,我们采用 1 和 x/2。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("Left 设置为 1 比较容易理解,因为我们可以直接处理掉 x 为 0 的情况(当然,也可以把 Left 初始化为 2,然后我们额外处理 0 和 1 的情况,我之前说过,二分法一万个人有一万种写法,只要能解释清楚,那就是你自己的)。但是为什么 Right 是 x/2 呢?")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("我们看一下下面这些数的值:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(751),alt:"PNG"}}),t._v(" "),n("p",[t._v("很容易观察出,当 x>2 时,它的"),n("strong",[t._v("整数平方根")]),t._v("一定小于等于 x/2 。即有 0 < 整数平方根 <= x/2。所以我们的问题转化为在 [0,x/2] 中找一个"),n("strong",[t._v("特定值")]),t._v(",满足二分查找的条件。(当然,如果没有想到使用 x/2 作为 Right 而 直接使用 x ,其实也是可以的)")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("剩下的逻辑就很简单了,我们不停缩小mid的范围,如果最终平方大于x就放回它前面一个值,否则就正常返回,直到两边的边界完全收敛。")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mySqrt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//注意这一行代码 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br")])]),n("p",[t._v("上面的代码,有三处需要进行讲解:")]),t._v(" "),n("br"),t._v(" "),n("ul",[n("li",[n("p",[t._v("第一,就是这里将 left 和 right 都设置为了 long,这是因为担心超出界限。同时,也正是因为设置为了 long,所以后面我可以直接使用 right left,而不用担心报错。")])]),t._v(" "),n("li",[n("p",[t._v("第二,还是这行代码,大家肯定会疑惑,为什么我要在 (right left)/ 2 后面再加1。这其实是一种技巧,一般人我不告诉他。因为在面试的时候,我们往往需要快速写出freebug 的代码,但是如果遇到二分的题目,你很可能会不停的纠结 mid 到底如何设置,是左边界还是右边界。其实,面试官大多时候,并不需要你写出一个非常非常标准的二分,找到绝对的中值。那这里我们是不是就可以偷懒了?我们通过略微增大搜索空间,来降低自己代码的难度,并且因为代码完美的通过,别人还会觉得你牛逼。")])]),t._v(" "),n("li",[n("p",[t._v("第三,这点本来不需要额外说明的,正是在第二的基础上,我们通过不停的缩小搜索空间,最终 left 就变成我们要找的 mid 值,所以直接返回 left 就可以了。(因为昨天的题目有人问我,问为什么最后是返回 left,而不是 mid)其实这也勉强算是一种技巧,一般熟悉二分的人,都不会多余的去写一个mid,而是通过这种返回边界的方式,来找到目标值。这有2个好处,第一是可以让代码更加简洁,第二是不容易出错。")]),t._v(" "),n("br")])]),t._v(" "),n("p",[t._v("这里,我给出上面代码的三种 mid 衍化形式,大家琢磨琢磨:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mySqrt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n #"),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n #"),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n #"),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br")])]),n("p",[t._v("同时,我也再给出一个没想到将 Right 设置为 x/2 的解法,这个解法是非常正派的,特别的适合新手。")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mySqrt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t\tleft "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n\t\t\t\tright "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("p",[t._v("读算法文章的目的,是跟着对方的思路走,而不是说这个我会了,就不需要学习了,这样恐怕进步很难。本题自然可以通过 "),n("strong",[t._v("牛顿法,递归")]),t._v(" 等多种方式求解,但并不是我想说的。")]),t._v(" "),n("br"),t._v(" "),n("h2",{attrs:{id:"_03、一点建议"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、一点建议"}},[t._v("#")]),t._v(" 03、一点建议")]),t._v(" "),n("blockquote",[n("p",[t._v("我拉出来讲这道题的原因,绝对不是说你会了,知道怎么样做了就可以了。我是希望通过本题,各位去深度思考二分法中几个元素的建立过程,比如 "),n("strong",[t._v("Left 和 Right 我们应该如何去设置")]),t._v(",如本题中 Right 既可以设置为 x 也可以设置为 x/2;又比如 "),n("strong",[t._v("mid 值该如何计算")]),t._v("。大家一定要明确 mid 的真正含义有两层,第一:大部分题目最后的 mid 值就是我们要找的目标值 第二:我们通过 mid 值来收敛搜索空间。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("那么问题来了,如何可以彻底掌握二分法?初期我并不建议大家直接去套模板,这样意义不是很大,因为套模板很容易边界值出现错误(当然,也可能我的理解还不够深入,网上有很多建议是去直接套模板的)我的建议是:"),n("strong",[t._v("去思考二分法的本质,了解其通过收敛来找到目标的内涵")]),t._v("**,对每一个二分的题目都进行深度剖析,多分析别人的答案**。你得知道,"),n("strong",[t._v("每一个答案,背后都是对方的思考过程")]),t._v("。从这些过程中抽茧剥丝,最终留下的,才是二分的精髓。也只有到这一刻,我认为才可以真正的说一句掌握了二分。毕竟模板的目的,也是让大家去思考模板背后的东西,而不是模板本身。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])])}),[],!1,null,null,null);s.default=r.exports},751:function(t,s){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/106.acaf08c1.js b/learning/.vuepress/dist/assets/js/106.acaf08c1.js deleted file mode 100644 index 6a6c3089..00000000 --- a/learning/.vuepress/dist/assets/js/106.acaf08c1.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[106],{1117:function(t,s,a){"use strict";a.r(s);var n=a(3),p=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("“"),n("strong",[t._v("24点")]),t._v("”是一种数学游戏,正如象棋、围棋一样是一种人们喜闻乐见的娱乐活动。它始于何年何月已无从考究,但它以自己独具的数学魅力和丰富的内涵正逐渐被越来越多的人们所接受。今天就为大家分享一道关于“24点”的算法题目。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("话不多说,直接看题。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第679题:24点游戏")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通 *,/,+,-,(,) 的运算得到 24 。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [4, 1, 8, 7]\n输出: True\n解释: (8-4) * (7-1) = 24\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [1, 2, 1, 2]\n输出: False\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[t._v("注意:")]),t._v(" "),n("p",[t._v("​\t1、除法"),n("strong",[t._v("运算符 / 表示实数除法,而不是整数除法")]),t._v("。例如 4 / (1 - 2/3) = 12 。")]),t._v(" "),n("p",[t._v("​\t2、每个运算符对两个数进行运算。特别是我们不能用 - 作为一元运算符。例如,[1, 1, 1, 1] 作为输入时,表达式 -1 - 1 - 1 - 1 是不允许的。")]),t._v(" "),n("p",[t._v("​\t3、你不能将数字连接在一起。例如,输入为 [1, 2, 1, 2] 时,不能写成 12 + 12 。")]),t._v(" "),n("br"),t._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("p",[t._v("拿到题目,第一反应就可以想到"),n("strong",[t._v("暴力求解。如果我们要判断给出的4张牌是否可以通过组合得到24,那我们只需找出所有的可组合的方式进行遍历。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("4个数字,3个操作符,外加括号,基本目测就能想到组合数不会大到超出边界。所以,我们只要"),n("strong",[t._v("把他们统统列出来,不就可以进行求解了吗")]),t._v("?说干就干!")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("我们首先定义个方法,用来判断"),n("strong",[t._v("两个数的的所有操作符组合是否可以得到24")]),t._v("。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),t._v(" \n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("p",[t._v("但是这个方法写的正确吗?其实不对!因为在计算机中,实数在计算和存储过程中会有一些微小的误差,"),n("strong",[t._v("对于一些与零作比较的语句来说,有时会因误差而导致原本是等于零但结果却小于或大于零之类的情况发生")]),t._v(",所以常用一个很小的数 "),n("strong",[t._v("1e-6")]),t._v(" 代替 0,进行判读!")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("(1e-6:表示1乘以10的负6次方。Math.abs(x)<1e-6 其实相当于x==0。1e-6(也就是0.000001)叫做"),n("strong",[t._v("epslon")]),t._v(",用来抵消浮点运算中因为误差造成的相等无法判断的情况。这个知识点需要掌握!)")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("举个例子:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float64")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float64")]),t._v(" \n b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.0")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//math.Sqrt:开平方根 ")]),t._v("\n c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" math"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Sqrt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("c \n fmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//false ")]),t._v("\n fmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//true")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("p",[t._v("这里直接用 "),n("strong",[t._v("a==0")]),t._v(" 就会得到false,但是通过 "),n("strong",[t._v("a < 1e-6 && a > -(1e-6)")]),t._v(" 却可以进行准确的判断。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("所以我们将上面的方法改写:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//go语言 ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//judgePoint24_2:判断两个数的所有操作符组合是否可以得到24 func judgePoint24_2(a, b float64) bool { ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])]),n("p",[t._v("完善了通过两个数来判断是否可以得到24的方法,现在我们加一个判断三个数是否可以得到24的方法。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//硬核代码,不服来辩! ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br")])]),n("p",[t._v("好了。三个数的也出来了,我们再加一个判断4个数为24点的方法:(排列组合,我想大家都会....)")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//硬核代码,不服来辩!")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br")])]),n("h2",{attrs:{id:"_03、go语言示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[t._v("#")]),t._v(" 03、Go语言示例")]),t._v(" "),n("p",[t._v("我们整合全部代码如下:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("judgePoint24_2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1e-6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br"),n("span",{staticClass:"line-number"},[t._v("58")]),n("br"),n("span",{staticClass:"line-number"},[t._v("59")]),n("br"),n("span",{staticClass:"line-number"},[t._v("60")]),n("br"),n("span",{staticClass:"line-number"},[t._v("61")]),n("br"),n("span",{staticClass:"line-number"},[t._v("62")]),n("br"),n("span",{staticClass:"line-number"},[t._v("63")]),n("br"),n("span",{staticClass:"line-number"},[t._v("64")]),n("br"),n("span",{staticClass:"line-number"},[t._v("65")]),n("br"),n("span",{staticClass:"line-number"},[t._v("66")]),n("br"),n("span",{staticClass:"line-number"},[t._v("67")]),n("br"),n("span",{staticClass:"line-number"},[t._v("68")]),n("br"),n("span",{staticClass:"line-number"},[t._v("69")]),n("br"),n("span",{staticClass:"line-number"},[t._v("70")]),n("br"),n("span",{staticClass:"line-number"},[t._v("71")]),n("br"),n("span",{staticClass:"line-number"},[t._v("72")]),n("br"),n("span",{staticClass:"line-number"},[t._v("73")]),n("br"),n("span",{staticClass:"line-number"},[t._v("74")]),n("br"),n("span",{staticClass:"line-number"},[t._v("75")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(795),alt:"PNG"}}),t._v(" "),n("br"),t._v(" "),n("blockquote",[n("p",[t._v("由于代码"),n("strong",[t._v("过于硬核")]),t._v(",我们直接击败100%的对手:(没想到吧!代码还可以这么写~)")])])])}),[],!1,null,null,null);s.default=p.exports},795:function(t,s){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/107.88156c64.js b/learning/.vuepress/dist/assets/js/107.88156c64.js deleted file mode 100644 index ea8a91fc..00000000 --- a/learning/.vuepress/dist/assets/js/107.88156c64.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[107],{1128:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("分享一道由群员“Melbourne”,外号 “Paper Machine”,有数学小王子之称的小伙伴分享的题目!")])]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("特别说明:本文非原创,经投稿者同意后发表。")])]),t._v(" "),n("h2",{attrs:{id:"_01、算法介绍"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、算法介绍"}},[t._v("#")]),t._v(" 01、算法介绍")]),t._v(" "),n("blockquote",[n("p",[t._v("期望:在概率论和统计学中,数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一。它反映随机变量平均取值的大小。")])]),t._v(" "),n("br"),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("题目:在1*1的正方形中随机撒三个点,两两点都可构成长方形的一组对顶点,这样一共有三个长方形,需要求面积第二大的长方形的面积的期望。")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("算法:每次随机三个点,计算第二大面积,最后统计期望。")])])])]),t._v(" "),n("h2",{attrs:{id:"_02、蒙特卡洛"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、蒙特卡洛"}},[t._v("#")]),t._v(" 02、蒙特卡洛")]),t._v(" "),n("blockquote",[n("p",[t._v("蒙特卡罗法也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。是按抽样调查法求取统计值来推定未知特性量的计算方法。蒙特卡罗是摩纳哥的著名赌城,该法为表明其随机抽样的本质而命名。故适用于对离散系统进行计算仿真试验。在计算仿真中,通过构造一个和系统性能相近似的概率模型,并在数字计算机上进行随机试验,可以模拟系统的随机特性。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("蒙特卡洛方法(Monte Carlo Method) 指的是一类使用随机变量解决概率问题的方法。比较常见的是计算积分、计算概率、计算期望等问题。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("常见的蒙特卡洛方法依赖于随机变量的“随机性”,即未发生的事件无法根据已有信息进行预测,比如抛硬币、掷骰子等。在计算机中,常见的随机数是由一系列确定性算法进行生成的,通常称之为伪随机数(pseudo random number)。由于计算精度有限,且这些随机数在统计意义上“不够随机”,会出现可预测的重复序列,这些数在统计意义上收敛精度有限。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("与常见的蒙特卡洛方法不同的是,伪蒙特卡洛使用了低差异序列(low discrepancy sequence,常见的有halton序列、sobol序列等),不使用常见的(伪)随机数,其收敛速率更快(记 N 为样本数量,伪蒙特卡洛收敛速率可达"),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(417),alt:"PNG"}}),t._v(",而普通蒙特卡洛方法收敛速率仅为 "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(417),alt:"PNG"}}),t._v("。另一个最重要的性质是伪蒙特卡洛使用的低差异序列是可复现的(replicable),即不会随环境改变而改变,没有随机种子;而普通蒙特卡洛使用的伪随机数会因随机种子不同而导致结果不同,收敛效果也不尽相同。")]),t._v(" "),n("h2",{attrs:{id:"_03、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、题目分析"}},[t._v("#")]),t._v(" 03、题目分析")]),t._v(" "),n("blockquote",[n("p",[t._v("本算法利用伪蒙特卡洛完成。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("CPP代码如下:")]),t._v(" "),n("div",{staticClass:"language-c line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-c"}},[n("code",[n("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("#"),n("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("include")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("")]),t._v(" ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("#"),n("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("include")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("")]),t._v(" ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("#"),n("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("include")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("")]),t._v(" ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("#"),n("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("include")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("")]),t._v(" ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("#"),n("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("include")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("")]),t._v(" ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" UP"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \nbool sieve"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("UP "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" primes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("UP"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("top"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v("UP"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("sieve"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n primes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("top "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v("UP"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n sieve"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nstd"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v("vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("double")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("halton")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("dim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("assert")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dim"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v("top"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n std"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v("vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("double")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("prime_inv")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("r")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n std"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v("vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("t")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("dim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n prime_inv"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.0")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("primes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("auto")]),t._v(" f"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" std"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v("vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" ret"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("auto")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("e"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n ret "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" ret"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("f")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("dim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" d"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v("primes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("d"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("prime_inv"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n prime_inv"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/=")]),t._v("primes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/=")]),t._v("primes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("double")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("experiment")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" idx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n std"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v("vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("double")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" li"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("halton")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("idx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("double")]),t._v(" area1"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("fabs")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("double")]),t._v(" area2"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("fabs")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("double")]),t._v(" area3"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("fabs")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("double")]),t._v(" w"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("area1 area2 area3"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("std"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("std"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("area1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("area2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("area3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("std"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("std"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("area1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("area2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("area3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" w"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" BATCH"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" THREADS"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("40")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("double")]),t._v(" total"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" trial"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n std"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v("vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("double")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("li")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("THREADS"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("omp_set_dynamic")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("omp_set_num_threads")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("THREADS"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("#"),n("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("pragma")]),t._v(" omp parallel for")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" thread"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("thread"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("THREADS"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" thread"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("BATCH"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("at")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("thread"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("experiment")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("trial thread"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("BATCH i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("auto")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("d"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("li"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n total "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("d"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n trial "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("THREADS"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("BATCH"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%lld: %.10f\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("trial"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("total"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("trial"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("fflush")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("stdout")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br"),n("span",{staticClass:"line-number"},[t._v("58")]),n("br"),n("span",{staticClass:"line-number"},[t._v("59")]),n("br"),n("span",{staticClass:"line-number"},[t._v("60")]),n("br"),n("span",{staticClass:"line-number"},[t._v("61")]),n("br"),n("span",{staticClass:"line-number"},[t._v("62")]),n("br"),n("span",{staticClass:"line-number"},[t._v("63")]),n("br"),n("span",{staticClass:"line-number"},[t._v("64")]),n("br"),n("span",{staticClass:"line-number"},[t._v("65")]),n("br"),n("span",{staticClass:"line-number"},[t._v("66")]),n("br"),n("span",{staticClass:"line-number"},[t._v("67")]),n("br"),n("span",{staticClass:"line-number"},[t._v("68")]),n("br"),n("span",{staticClass:"line-number"},[t._v("69")]),n("br"),n("span",{staticClass:"line-number"},[t._v("70")]),n("br"),n("span",{staticClass:"line-number"},[t._v("71")]),n("br"),n("span",{staticClass:"line-number"},[t._v("72")]),n("br"),n("span",{staticClass:"line-number"},[t._v("73")]),n("br")])]),n("br"),t._v(" "),n("p",[t._v("分析:使用了并行计算,批量跑随机实验,速度大大提升。其中halton函数会生成halton低差异序列,其值域为[0,1],参数i表示第i个抽样,dim表示生成数据的维度(本例中每次实验需要6个点,使用6维数据点即可),不同样本之间"),n("strong",[t._v("互不影响")]),t._v(",故可使用并行计算提速。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("#表示随机试验次数×10^7,Avg表示第二大面积的平均值,Err表示与真实值的绝对误差×10^(-10)。")]),t._v(" "),n("br"),t._v(" "),n("table",[n("thead",[n("tr",[n("th",{staticStyle:{"text-align":"center"}},[t._v("#")]),t._v(" "),n("th",{staticStyle:{"text-align":"center"}},[t._v("Avg")]),t._v(" "),n("th",{staticStyle:{"text-align":"center"}},[t._v("Err")]),t._v(" "),n("th",{staticStyle:{"text-align":"center"}},[t._v("#")]),t._v(" "),n("th",{staticStyle:{"text-align":"center"}},[t._v("Avg")]),t._v(" "),n("th",{staticStyle:{"text-align":"center"}},[t._v("Err")])])]),t._v(" "),n("tbody",[n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("1")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786804")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("55")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("2")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786707")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("152")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("3")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786905")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("46")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("4")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786889")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("30")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("5")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786809")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("50")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("6")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786836")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("23")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("7")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786849")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("10")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("8")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786868")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("9")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("9")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786799")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("60")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("10")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786837")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("22")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("11")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786845")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("14")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("12")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786839")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("20")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("13")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786874")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("15")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("14")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786839")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("20")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("15")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786848")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("11")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("16")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786868")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("9")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("17")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786851")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("8")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("18")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786863")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("4")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("19")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786854")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("5")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("20")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786887")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("28")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("21")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786858")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("1")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("22")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786844")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("15")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("23")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786841")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("18")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("24")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786852")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("7")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("25")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786849")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("10")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("26")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.101778684")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("19")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("27")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786838")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("21")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("28")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786852")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("7")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("29")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786838")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("21")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("30")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786846")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("13")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("31")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786859")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("32")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786862")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("3")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("33")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786859")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("34")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786853")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("6")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("35")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786854")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("5")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("36")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786859")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("37")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.101778685")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("9")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("38")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786854")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("5")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("39")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786853")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("6")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("40")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786858")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("1")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("41")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786848")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("11")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("42")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786851")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("8")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("43")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786847")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("12")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("44")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786841")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("18")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("45")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.101778685")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("9")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("46")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786842")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("17")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("47")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786852")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("7")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("48")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786848")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("11")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("49")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786854")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("5")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("50")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786851")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("8")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[t._v("51")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786842")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("17")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("52")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("0.1017786844")]),t._v(" "),n("td",{staticStyle:{"text-align":"center"}},[t._v("15")])])])]),t._v(" "),n("p",[t._v("可以看到,在实验次之后,收敛精度可达"),n("strong",[t._v("9")]),t._v("位小数,非常精确。由于使用的随机数“不够随机”,普通的蒙特卡洛在同样的实验次数下仅能收敛至五位小数的精度。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("上述方法可扩展至其他随机问题中,非常实用且高效,欢迎大家讨论!")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])])}),[],!1,null,null,null);s.default=e.exports},417:function(t,s){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/108.2f73e8a1.js b/learning/.vuepress/dist/assets/js/108.2f73e8a1.js deleted file mode 100644 index cedc6015..00000000 --- a/learning/.vuepress/dist/assets/js/108.2f73e8a1.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[108],{1127:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("能跟着看到现在,大家都有点疲惫了。为了提高各位积极性,我打算每天在文首放一张女神的图(不为别的,只为激励大家,毕竟美女对男女都是通杀的。祝大家早日拿到理想offer,实现人生赢家)话不多说,直接看题!")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("这两天越来越多的读者私信小浩,说觉得只看题的话,不是很系统,想让我系统的讲一讲各类数据结构。对于这个问题,我统一回复一下,首先"),n("strong",[s._v("后面肯定是有系统的讲解各类数据结构的打算的")]),s._v(",这个目前正在筹划中,所以大家请放心!另外对于看题,如果担心缺乏基础知识看不懂的朋友们,大家请一万个放心。老读者都知道,我讲题,一般都是会把这个题涉及到的基础知识都给你过一遍的。当然后面我也会用系列篇,把这些题目再串起来,所以大家还是耐心点的去看。记住,干就对了!")])]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第343题:整数拆分")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个正整数 "),n("em",[s._v("n")]),s._v(",将其拆分为"),n("strong",[s._v("至少")]),s._v("两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: 2\n输出: 1\n解释: 2 = 1 1, 1 × 1 = 1。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: 10\n输出: 36\n解释: 10 = 3 3 4, 3 × 3 × 4 = 36。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("br"),s._v(" "),n("p",[s._v("**说明: **你可以假设 n 不小于 2 且不大于 58。")]),s._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("blockquote",[n("p",[s._v("这个题理解了题意的话,其实还是比较简单的,一起看下。")])]),s._v(" "),n("p",[s._v("要对一个整数进行拆分,并且要使这些拆分完后的因子的乘积最大。我们可以先尝试拆分几个数值,测试一下。")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(867),alt:"PNG"}}),s._v(" "),n("p",[s._v("通过观察,首先肯定可以明确,"),n("strong",[s._v("2 和 3 是没办法进行拆分的最小因子")]),s._v("。同时,我们好像能看出来:")]),s._v(" "),n("ul",[n("li",[s._v("只要把 n 尽可能的拆分成包含3的组合,就可以得到最大值。")]),s._v(" "),n("li",[s._v("如果没办法拆成 3 的组合,就退一步拆成 2 的组合。")]),s._v(" "),n("li",[s._v("对于 3 和 2 ,没办法再进行拆分。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("根据分析,我们尝试使用"),n("strong",[s._v("贪心")]),s._v("进行求解。因为一个数(假设为n)除以另一个数,总是包括整数部分(x)和余数部分(y)。那刚才也得到了,"),n("strong",[s._v("最优因子是3")]),s._v(",所以我们需要让 n/3,这样的话,余数可能是 1,2 两种可能性。")]),s._v(" "),n("ul",[n("li",[s._v("如果余数是 1 ,刚才我们也分析过,对于 1 的拆分是没有意义的,所以我们退一步,将最后一次的 3 和 1 的拆分,用 2 和 2 代替。")]),s._v(" "),n("li",[s._v("如果余数是 2 ,那不消多说,直接乘以最后的 2 即可。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("根据分析,得出代码:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("integerBreak")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" y "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//恰好整除,直接为3^x ")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("y "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("pow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//余数为1,退一步 3^(x-1)*2*2 ")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("y "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("pow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//余数为2,直接乘以2")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("pow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("h2",{attrs:{id:"_03、证明过程"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、证明过程"}},[s._v("#")]),s._v(" 03、证明过程")]),s._v(" "),n("blockquote",[n("p",[s._v("答案是碰出来了,但是我们是通过观察,发现最优因子应该是 3 。那如何来证明这个结论的正确性呢?")])]),s._v(" "),n("p",[s._v("首先,通过均值不等式,很容易验证当每一个拆分值都相等的时候,才具有最大值,所以实际上就是将这个数均分。那么,对于整数"),n("img",{attrs:{src:"18.assets/640.svg",alt:"img"}}),s._v(",我们将其分解成"),n("img",{attrs:{src:"18.assets/640.svg",alt:"img"}}),s._v("份,每一份为"),n("img",{attrs:{src:"18.assets/640.svg",alt:"img"}}),s._v("则有")]),s._v(" "),n("p",[s._v("求"),n("img",{attrs:{src:"18.assets/640-1592573502117.svg",alt:"img"}}),s._v("的极值点为"),n("img",{attrs:{src:"18.assets/640-1592573502133.svg",alt:"img"}}),s._v(",最接近的也就是 3 了。(注意:这里是整数,如果是实数,该证明则有漏洞)")]),s._v(" "),n("h2",{attrs:{id:"_04、都看不懂"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、都看不懂"}},[s._v("#")]),s._v(" 04、都看不懂")]),s._v(" "),n("blockquote",[n("p",[s._v("一力破万法,乱拳打死老师傅,使用万能的动态规划求解。")])]),s._v(" "),n("p",[s._v("dp[i]代表 i 拆分之后得到的乘积的最大的元素,比如dp[4]就保存将4拆分后得到的最大的乘积。状态转移方程式为")]),s._v(" "),n("blockquote",[n("center",[s._v("dp[i]=max(dp[i],(i-j)*max(dp[j],j))")])],1),s._v(" "),n("p",[s._v("整体思路就是这样,将一个大的问题,分解成一个一个的小问题,然后完成一个"),n("strong",[s._v("自底向上")]),s._v("的过程。举一个例子,比如计算 10 ,可以拆分 6 和 4 ,因为 6 的最大值 3x3,以及 4 的最大值 2x2 都已经得到,所以就替换成 9 和 4 ,也就是 10=3x3x4。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("代码如下:(CPP听说很受欢迎?)")]),s._v(" "),n("div",{staticClass:"language-cpp line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-cpp"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//C ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("integerBreak")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("dp")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br")])]),n("p",[s._v("今天的题目可能有一定难度,建议大家自己写写画画,才能真正的做到理解和巩固。")])])}),[],!1,null,null,null);t.default=r.exports},867:function(s,t,a){s.exports=a.p+"assets/img/1.a1d47533.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/109.faf935da.js b/learning/.vuepress/dist/assets/js/109.faf935da.js deleted file mode 100644 index 7189dbed..00000000 --- a/learning/.vuepress/dist/assets/js/109.faf935da.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[109],{1024:function(s,t,a){s.exports=a.p+"assets/img/bubbleSort.b7d216a5.gif"},1147:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("p",[s._v("冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。")]),s._v(" "),n("p",[s._v("作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。")]),s._v(" "),n("h2",{attrs:{id:"_1-算法步骤"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_1-算法步骤"}},[s._v("#")]),s._v(" 1. 算法步骤")]),s._v(" "),n("ol",[n("li",[n("p",[s._v("比较相邻的元素。如果第一个比第二个大,就交换他们两个。")])]),s._v(" "),n("li",[n("p",[s._v("对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。")])]),s._v(" "),n("li",[n("p",[s._v("针对所有的元素重复以上的步骤,除了最后一个。")])]),s._v(" "),n("li",[n("p",[s._v("持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。")])])]),s._v(" "),n("h2",{attrs:{id:"_2-动图演示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2-动图演示"}},[s._v("#")]),s._v(" 2. 动图演示")]),s._v(" "),n("p",[n("img",{attrs:{src:a(1024),alt:"动图演示"}})]),s._v(" "),n("h2",{attrs:{id:"_3-最慢和最快"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-最慢和最快"}},[s._v("#")]),s._v(" 3. 最慢和最快")]),s._v(" "),n("p",[s._v("正序时最快,反序时最慢")]),s._v(" "),n("h2",{attrs:{id:"_4-javascript-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_4-javascript-代码实现"}},[s._v("#")]),s._v(" 4. JavaScript 代码实现")]),s._v(" "),n("div",{staticClass:"language-js line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bubbleSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 相邻元素两两对比")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 元素交换")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("h2",{attrs:{id:"_5-python-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_5-python-代码实现"}},[s._v("#")]),s._v(" 5. Python 代码实现")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bubbleSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br")])]),n("h2",{attrs:{id:"_6-go-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_6-go-代码实现"}},[s._v("#")]),s._v(" 6. Go 代码实现")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bubbleSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\tlength "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" length"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\t\tarr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("h2",{attrs:{id:"_7-java-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_7-java-代码实现"}},[s._v("#")]),s._v(" 7. Java 代码实现")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BubbleSort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IArraySort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Exception")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 对 arr 进行拷贝,不改变参数内容")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" flag "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" tmp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n flag "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("flag"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("break")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br")])]),n("h2",{attrs:{id:"_8-php-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_8-php-代码实现"}},[s._v("#")]),s._v(" 8. PHP 代码实现")]),s._v(" "),n("div",{staticClass:"language-php line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bubbleSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$tmp")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$tmp")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/11.82afa120.js b/learning/.vuepress/dist/assets/js/11.82afa120.js deleted file mode 100644 index 8a230465..00000000 --- a/learning/.vuepress/dist/assets/js/11.82afa120.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{1143:function(A,C,Q){"use strict";Q.r(C);var v=Q(3),B=Object(v.a)({},(function(){var A=this,C=A.$createElement,v=A._self._c||C;return v("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[v("blockquote",[v("p",[A._v("今天是小浩算法 “365刷题计划” 第106天。互联网公司面试,经常会出现一些奇奇怪怪的题目。今天就为大家扒几道。(第二道题目由读者提供,是真实的头条面试数据分析岗位对方问到的。防止题目侵权,本文给出的是"),v("strong",[A._v("相似题型")]),A._v(")")])]),A._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:Q(974),alt:"PNG"}}),A._v(" "),v("h2",{attrs:{id:"_01、量出4升水"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_01、量出4升水"}},[A._v("#")]),A._v(" 01、量出4升水")]),A._v(" "),v("blockquote",[v("p",[A._v("这道题的答案并不难,但作为面试官,却可以通过这道题考察很多内容。")])]),A._v(" "),v("br"),A._v(" "),v("table",[v("thead",[v("tr",[v("th",[A._v("题目:量出4升水")])])]),A._v(" "),v("tbody",[v("tr",[v("td",[A._v("怎么用3升和5升的桶量出4升的水?")])])])]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("题目没什么补充的,直接分析,一个3升和5升的水桶:")]),A._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:Q(975),alt:"PNG"}}),A._v(" "),v("p",[A._v("首先用三升水桶装满水,倒入五升水桶:")]),A._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:Q(976),alt:"PNG"}}),A._v(" "),v("p",[A._v("再次倒满三升水桶,填满后继续倒入五升水桶,直到五升水桶倒满。")]),A._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:Q(977),alt:"PNG"}}),A._v(" "),v("p",[A._v("清空五升水桶,将三升水桶的一升水倒入:")]),A._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:Q(978),alt:"PNG"}}),A._v(" "),v("p",[A._v("再次填满三升水桶,倒入五升水桶中:")]),A._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:Q(979),alt:"PNG"}}),A._v(" "),v("h2",{attrs:{id:"_02、最大的钻石"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_02、最大的钻石"}},[A._v("#")]),A._v(" 02、最大的钻石")]),A._v(" "),v("blockquote",[v("p",[A._v("注意,下面是 n,不是 10。网上的题目好多是 1-10 楼。。。。应该都是被简化的,分析起来并不友好。")])]),A._v(" "),v("br"),A._v(" "),v("table",[v("thead",[v("tr",[v("th",[A._v("题目:最大的钻石")])])]),A._v(" "),v("tbody",[v("tr",[v("td",[A._v("1 楼到 n 楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从 1 楼到 n 楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到「最大」的一颗?")])])])]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("不要认为这种题目不会出现在面试中,恰恰相反,这类题目出现的概率非常高。这不,有读者就碰到了。下面两个是知乎中也遇到该题的读者截图:")]),A._v(" "),v("img",{attrs:{src:Q(980),alt:"PNG"}}),A._v(" "),v("img",{staticStyle:{zoom:"80%"},attrs:{src:Q(981),alt:"PNG"}}),A._v(" "),v("p",[A._v("那这种问题主要考察面试者的什么能力呢?一个是面试临场随机应变的能力。第二就是分析问题的能力。")]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("面试时如果被问到这种题目,其实大多数面试官心中并没有一个标准答案。(不排除有面试官深究的)事实是作为面试者,我们只要流畅的给出答案,大概率都是可以顺利过关。")]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("回到题目。其实题中包含一个隐藏条件:"),v("strong",[A._v("随机放置")]),A._v("。所有的分析都是基于随机放置给出的。"),v("strong",[A._v("换句话说,如果放置钻石是人为干预大小,那么本题的所以分析则全部不成立")]),A._v("。")]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("其实这个问题的原型叫做秘书问题,该类问题全部属于"),v("strong",[A._v("最佳停止问题")]),A._v("。")]),A._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:Q(982),alt:"PNG"}}),A._v(" "),v("p",[A._v("这类问题都有着统一的解法:")]),A._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:Q(983),alt:"PNG"}}),A._v(" "),v("p",[A._v("所以到我们的题目里,我们也是可以直接给出答案:"),v("strong",[A._v("我们要选择先放弃前 37%(就是1/e)的钻石,此后选择比前 37% 都大的第一颗钻石。")])]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("其实该法则还有很多运用,比如一些常见的推文《谈恋爱拒绝掉前面37%的人》,其实就是一样的原因。")]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("事实上也有人通过测试证明了这个数据:")]),A._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:Q(984),alt:"PNG"}}),A._v(" "),v("p",[A._v("当 n=30 时,测试一万次,可以看到有 4000 次我们拿到了最大的钻石。")]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("改题目还有一些变种,比如:")]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("一个活动,n个女生手里拿着长短不一的玫瑰花,无序的排成一排,一个男生从头走到尾,试图拿更长的玫瑰花,一旦拿了一朵就不能再拿其他的,错过了就不能回头,问最好的策略?")]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("现在要聘请 1 名秘书,共有 n 个应聘者,每面试 1 人后,就知道了应聘者的好坏程度,且必须立刻决定是否聘用,不可重复面试。策略是拒绝前 k 个应聘者,而从第 k+1 个应聘者开始,一旦有比前 k 个都好的,就立刻聘用。如何决定 k 的值,使得聘用到最佳应聘者的概率最大?")]),A._v(" "),v("br"),A._v(" "),v("p",[A._v("等等。这里再给出一个严谨的推导过程:")]),A._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:Q(985),alt:"PNG"}}),A._v(" "),v("h2",{attrs:{id:"_03、思维定势"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_03、思维定势"}},[A._v("#")]),A._v(" 03、思维定势")]),A._v(" "),v("blockquote",[v("p",[A._v("下面这道题也是一道常见的智力题,但是这道题绝对不会出现在面试中了。拿出来分享给大家的原因,是期望不要被思维定势局限。")])]),A._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:Q(986),alt:"PNG"}}),A._v(" "),v("p",[A._v("这道题中有六个停车位,每个车位上都有一个数字,然而有一个车位上的数字被汽车挡住了,要求学生们在20秒内答出这个被挡住的车位上的数字。这是中国香港小学一道给6岁儿童设计的“停车场智力题”。("),v("strong",[A._v("大家可以在评论区留下答案")]),A._v(")")]),A._v(" "),v("br"),A._v(" "),v("p",[v("strong",[A._v("加油,奥利给!")])])])}),[],!1,null,null,null);C.default=B.exports},974:function(A,C,Q){A.exports=Q.p+"assets/img/1.26128aab.jpg"},975:function(A,C){A.exports="data:image/jpeg;base64,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"},976:function(A,C){A.exports="data:image/jpeg;base64,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"},977:function(A,C){A.exports="data:image/jpeg;base64,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"},978:function(A,C){A.exports="data:image/jpeg;base64,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"},979:function(A,C){A.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAYIAAAIqCAMAAAAeg72lAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAflBMVEX////8/Pzw8PD5+fnu7u4mJiYkJCS/v7/o6OgAAAC0tLS9vb0TGB6jqbMTFx6boathd5dRao+OnbJddZeCn8lsjr++0e3a6Px8nMna4u/Y4O1vkcG+zONvkMG2xNt8msdsjb+pwOJ4mMcGBgaPj48FBQWHh4ccHByAncfP1+QhuYX3AAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAOxAAADsQBlSsOGwAACIRJREFUeNrt3VFvHFkZBFA7G3voBFgWGHASktgxu0v+/x9E4iUPYSUzfVtfMXX60bJL5Tru9kNrdG9uvrtub29e+MWbVy/9Tpkvygyp0ZwZUqM5M6RGc2ZIjebMkBrNmSE1mjNDajRnhtRozgyp0ZwZUqM5M6RGc2ZIjebMkBrNmSE1+jJvv7t++OH2hV+8ff3S75T5219EMJ6ZcjPKDKrRnBlSozkzpEZzZkiN5syQGs2ZITWaM0NqNGeG1GjODKnRnBlSozkzpEZzZkiN5syQGs2ZITWaM0NqNGeG1GjODKnRnBlSoy8z4/1pcyaC8cyUm1FmUI3mzJAazZkhNZozQ2o0Z4bUaM4MqdGcGVKjOTOkRnNmSI3mzJAazZkhNZozQ2o0Z4bUaM4MqdGcGVKjOTOkRnNmSI3mzJAazZkhNQ7IvLu/W3/dn1b1fPXd9fr1qxd+8dXvXvqds5n32xHXm0U94/5iD7kLttPy625bdhekzXUQwc3qCwGC4+ZCMD4XgvG5EIzPhWB8LgTjcyEYnwvB+FwIxudCMD4XgvG5EIzPhWB8LgTjcyEYnwvB+FyFBBkffz428xiCt6s++p02VyHBnrvJg2jx754xF4LxuRCMz4VgfC4E43MhGJ8LwfhcCMbnQjA+F4LxuRCMz4VgfC4E43MhGJ8LwfhcCMbnQjA+F4LxuQoJ0t7zFr47TpurkGDP3eRBtPh3z5gLwfhcCMbnQjA+F4LxuRCMz4VgfC4E43MhGJ8LwfhcCMbnQjA+F4LxuRCMz4VgfC4E43MhGJ8LwfhchQRp73kL3x2nzVVIsOdu8iBa/LtnzIVgfC4E43MhGJ8LwfhcCMbnQjA+F4LxuRCMz4VgfC4E43MhGJ8LwfhcCMbnQjA+F4LxuRCMz4VgfC4E43Mdkfn7bfXB93d3d9sfVvVMO6f+iMw/rj/4ftu2Hxf1jPuLPSLzTz/9efn1l5+W3QVpcx2R+dfz3/6++no4v0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBwNQRpH9M+IvMYgverPvqdNlchQdpDo/BBlDYXgvG5EIzPhWB8LgTjcyEYnwvB+FwIxudCMD4XgvG5EIzPhWB8LgTjcyEYnwvB+FwIxudCMD4XgvG5CgnS3vMWvjtOm6uQIO2hUfggSpsLwfhcCMbnQjA+F4LxuRCMz4VgfC4E43MhGJ8LwfhcCMbnQjA+F4LxuRCMz4VgfC4E43MhGJ8LwfhchQRp73kL3x2nzVVIkPbQKHwQpc2FYHwuBONzIRifC8H4XAjG50IwPheC8bkQjM+FYHwuBONzIRifC8H4XAjG50IwPheC8bkQjM+FYHwuBP/Tj9zdH3Cm/P1p+a/24fyw/jr/Y1XPPQe43x9ypvybRWfKf7s+no+4Pi3que8u2E7Lr7tt/V3w+fFp+fXlcdldsJPgZvV1BME1/y9AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAsKLnns8vH0Pwtu2j3wjGCfbcTR5Ea3siQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQFBL4N3xpQRe318PwZ67yYNobU8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGoJvDu+lMDr++sh2HM3eRCt7YkAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAYILfuR5e15/bf9c/qt9OK8++P7h4eG87NTvPQe4/7z+4Ptt235ZdKb8t+vj+oPvz+fzp0U9d/11/botPvj+dDrdHXAXfH5cfPD909PTl8dld8GeH/G/AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAMF1EPjo96UEPn1/PQR77iYPorU9ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCoJfDu+FICr++vh2DP3eRBtLYnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgS1BN4dX0rg9f31EOy5mzyI1vZEgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgADBBT/yvK0++P75+fmAU78/nFcffP/w8HBedur3ngPcf15/8P22bb8sOlP+2/Vx/cH35/P506Keu/66ft0WH3x/Op3uDrgLPj8uPvj+6enpy+Oyu2DPj/hfgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgOA6CHz0+1ICn76/HoI9d5MH0dqeCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDUEnh3fCmB1/fXQ7DnbvIgWtsTAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAYJaAu+OLyXw+v56CPbcTR5Ea3siQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDgIoK79dchBKsPvn94WEiw5wD3+/UH32/b9mbRmfLfrn+tP/j+fD5/XdRz11/X6c1/Obz+7dtdXzy9WX8XvPv67vvr/ftdX3z3NeJBdLNPUOZvXVf4q/2/ZIbUaM4MqdGcGVKjOTOkRnNmSI3mzJAazZkhNZozQ2o0Z4bUaM4MqdGcGVKjOTOkRnNmSI3mzJAazZkhNZozQ2r0Ze75/PLt612fyJb5nwvBeGbKzSgzqEZzZkiN5syQGs2ZITWaM0NqNGeG1GjODKnRnBlSozkzpEZzZkiN5syQGs2ZITWaM0NqNGeG1GjODKnRnBlSozkzpEZzZkiNvsyM96fNmQjGM1NuRplBNZozQ2o0Z4bUaM4MqdGcGVKjOTOkRnNmSI3mzJAazZkhNZozQ2o0Z4bUaM4MqdGcGVKjOTOkRnNmSI3mzJAazZkhNZozQ2r0ZWa8P23ORDCemXIzygyq0ZwZUqM5M6RGc2ZIjebMkBrNmSE1mjNDajRnhtRozgyp0ZwZUqM5M6RGXea/ASaOLp0xNfiDAAAAAElFTkSuQmCC"},980:function(A,C,Q){A.exports=Q.p+"assets/img/7.185c0a4f.jpg"},981:function(A,C){A.exports="data:image/jpeg;base64,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"},982:function(A,C,Q){A.exports=Q.p+"assets/img/9.fb258924.jpg"},983:function(A,C,Q){A.exports=Q.p+"assets/img/10.be8b0242.jpg"},984:function(A,C,Q){A.exports=Q.p+"assets/img/11.21270f34.jpg"},985:function(A,C,Q){A.exports=Q.p+"assets/img/12.0cec972f.jpg"},986:function(A,C,Q){A.exports=Q.p+"assets/img/13.84c20ce8.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/110.fc1cf27e.js b/learning/.vuepress/dist/assets/js/110.fc1cf27e.js deleted file mode 100644 index 39ed8da3..00000000 --- a/learning/.vuepress/dist/assets/js/110.fc1cf27e.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[110],{1031:function(s,t,a){s.exports=a.p+"assets/img/radixSort.6690b105.gif"},1154:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("p",[s._v("基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。")]),s._v(" "),n("h2",{attrs:{id:"_1-基数排序-vs-计数排序-vs-桶排序"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_1-基数排序-vs-计数排序-vs-桶排序"}},[s._v("#")]),s._v(" 1. 基数排序 vs 计数排序 vs 桶排序")]),s._v(" "),n("p",[s._v("基数排序有两种方法:")]),s._v(" "),n("p",[s._v("这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异案例看大家发的:")]),s._v(" "),n("ul",[n("li",[s._v("基数排序:根据键值的每位数字来分配桶;")]),s._v(" "),n("li",[s._v("计数排序:每个桶只存储单一键值;")]),s._v(" "),n("li",[s._v("桶排序:每个桶存储一定范围的数值;")])]),s._v(" "),n("h2",{attrs:{id:"_2-lsd-基数排序动图演示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2-lsd-基数排序动图演示"}},[s._v("#")]),s._v(" 2. LSD 基数排序动图演示")]),s._v(" "),n("p",[n("img",{attrs:{src:a(1031),alt:"动图演示"}})]),s._v(" "),n("h2",{attrs:{id:"_3-javascript-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-javascript-代码实现"}},[s._v("#")]),s._v(" 3. JavaScript 代码实现")]),s._v(" "),n("div",{staticClass:"language-js line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//LSD Radix Sort")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" counter "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("radixSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" maxDigit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" mod "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" dev "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" maxDigit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" dev "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" mod "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" bucket "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("parseInt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" mod"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" dev"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("counter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n counter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n counter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" pos "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" counter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("counter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" counter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("shift")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("pos"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br")])]),n("h2",{attrs:{id:"_4-python-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_4-python-代码实现"}},[s._v("#")]),s._v(" 4. python 代码实现")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("radix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n \n digit "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n max_digit "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n max_value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("\ntitle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 找出列表中最大的位数\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),s._v("max_digit "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" max_value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n max_digit "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" max_digit "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" digit "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" max_digit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("\ntitle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 求出每一个元素的个、十、百位的值\n t "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),s._v("digit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("append"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n \n coll "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" bucket "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n coll"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("append"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n \n arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" coll\n digit "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" digit "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br")])]),n("h2",{attrs:{id:"_5-java-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_5-java-代码实现"}},[s._v("#")]),s._v(" 5. Java 代码实现")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * 基数排序\n * 考虑负数的情况还可以参考: https://code.i-harness.com/zh-CN/q/e98fa9\n */")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RadixSort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IArraySort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Exception")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 对 arr 进行拷贝,不改变参数内容")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" maxDigit "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getMaxDigit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("radixSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" maxDigit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * 获取最高位数\n */")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getMaxDigit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getMaxValue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getNumLenght")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("maxValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getMaxValue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" maxValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getNumLenght")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("long")]),s._v(" num"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" lenght "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("long")]),s._v(" temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" num"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n lenght"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" lenght"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("radixSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" maxDigit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" mod "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" dev "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" maxDigit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" dev "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" mod "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 考虑负数的情况,这里扩展一倍队列数,其中 [0-9]对应负数,[10-19]对应正数 (bucket + 10)")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" counter "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("mod "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" bucket "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" mod"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" dev"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" mod"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n counter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("arrayAppend")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("counter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" pos "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" bucket "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" counter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("pos"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * 自动扩容,并保存数据\n *\n * @param arr\n * @param value\n */")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("arrayAppend")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br"),n("span",{staticClass:"line-number"},[s._v("45")]),n("br"),n("span",{staticClass:"line-number"},[s._v("46")]),n("br"),n("span",{staticClass:"line-number"},[s._v("47")]),n("br"),n("span",{staticClass:"line-number"},[s._v("48")]),n("br"),n("span",{staticClass:"line-number"},[s._v("49")]),n("br"),n("span",{staticClass:"line-number"},[s._v("50")]),n("br"),n("span",{staticClass:"line-number"},[s._v("51")]),n("br"),n("span",{staticClass:"line-number"},[s._v("52")]),n("br"),n("span",{staticClass:"line-number"},[s._v("53")]),n("br"),n("span",{staticClass:"line-number"},[s._v("54")]),n("br"),n("span",{staticClass:"line-number"},[s._v("55")]),n("br"),n("span",{staticClass:"line-number"},[s._v("56")]),n("br"),n("span",{staticClass:"line-number"},[s._v("57")]),n("br"),n("span",{staticClass:"line-number"},[s._v("58")]),n("br"),n("span",{staticClass:"line-number"},[s._v("59")]),n("br"),n("span",{staticClass:"line-number"},[s._v("60")]),n("br"),n("span",{staticClass:"line-number"},[s._v("61")]),n("br"),n("span",{staticClass:"line-number"},[s._v("62")]),n("br"),n("span",{staticClass:"line-number"},[s._v("63")]),n("br"),n("span",{staticClass:"line-number"},[s._v("64")]),n("br"),n("span",{staticClass:"line-number"},[s._v("65")]),n("br"),n("span",{staticClass:"line-number"},[s._v("66")]),n("br"),n("span",{staticClass:"line-number"},[s._v("67")]),n("br"),n("span",{staticClass:"line-number"},[s._v("68")]),n("br"),n("span",{staticClass:"line-number"},[s._v("69")]),n("br"),n("span",{staticClass:"line-number"},[s._v("70")]),n("br"),n("span",{staticClass:"line-number"},[s._v("71")]),n("br"),n("span",{staticClass:"line-number"},[s._v("72")]),n("br"),n("span",{staticClass:"line-number"},[s._v("73")]),n("br"),n("span",{staticClass:"line-number"},[s._v("74")]),n("br"),n("span",{staticClass:"line-number"},[s._v("75")]),n("br"),n("span",{staticClass:"line-number"},[s._v("76")]),n("br"),n("span",{staticClass:"line-number"},[s._v("77")]),n("br"),n("span",{staticClass:"line-number"},[s._v("78")]),n("br"),n("span",{staticClass:"line-number"},[s._v("79")]),n("br"),n("span",{staticClass:"line-number"},[s._v("80")]),n("br")])]),n("h2",{attrs:{id:"_6-php-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_6-php-代码实现"}},[s._v("#")]),s._v(" 6. PHP 代码实现")]),s._v(" "),n("div",{staticClass:"language-php line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("radixSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxDigit")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxDigit")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxDigit")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$counter")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxDigit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("preg_match_all")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token single-quoted-string string"}},[s._v("'/\\d/'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("string"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$matches")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$numArr")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$matches")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$lenTmp")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$numArr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucket")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("array_key_exists")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$lenTmp")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$numArr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("intval")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$numArr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$lenTmp")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("array_key_exists")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucket")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$counter")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$counter")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucket")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$counter")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucket")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$pos")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$counter")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$value")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$counter")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$value")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("array_shift")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$counter")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$pos")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$value")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/111.2521be33.js b/learning/.vuepress/dist/assets/js/111.2521be33.js deleted file mode 100644 index 7f7b6e7d..00000000 --- a/learning/.vuepress/dist/assets/js/111.2521be33.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[111],{1027:function(s,t,a){s.exports=a.p+"assets/img/selectionSort.44be35da.gif"},1149:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("p",[s._v("选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。")]),s._v(" "),n("h2",{attrs:{id:"_1-算法步骤"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_1-算法步骤"}},[s._v("#")]),s._v(" 1. 算法步骤")]),s._v(" "),n("ol",[n("li",[n("p",[s._v("首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置")])]),s._v(" "),n("li",[n("p",[s._v("再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。")])]),s._v(" "),n("li",[n("p",[s._v("重复第二步,直到所有元素均排序完毕。")])])]),s._v(" "),n("h2",{attrs:{id:"_2-动图演示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2-动图演示"}},[s._v("#")]),s._v(" 2. 动图演示")]),s._v(" "),n("p",[n("img",{attrs:{src:a(1027),alt:"动图演示"}})]),s._v(" "),n("h2",{attrs:{id:"_3-javascript-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-javascript-代码实现"}},[s._v("#")]),s._v(" 3. JavaScript 代码实现")]),s._v(" "),n("div",{staticClass:"language-js line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("selectionSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" minIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n minIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("minIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 寻找最小的数")]),s._v("\n minIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 将最小数的索引保存")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("minIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("minIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br")])]),n("h2",{attrs:{id:"_4-python-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_4-python-代码实现"}},[s._v("#")]),s._v(" 4. Python 代码实现")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("selectionSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("\ntitle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 记录最小数的索引\n minIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("minIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n minIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" j\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("\ntitle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" i 不是最小数时,将 i 和最小数进行交换\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" minIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("minIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("minIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("h2",{attrs:{id:"_5-go-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_5-go-代码实现"}},[s._v("#")]),s._v(" 5. Go 代码实现")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("selectionSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\tlength "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" length"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\tmin "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" i\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\t\tmin "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" j\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t\tarr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("h2",{attrs:{id:"_6-java-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_6-java-代码实现"}},[s._v("#")]),s._v(" 6. Java 代码实现")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SelectionSort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IArraySort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Exception")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 总共要经过 N-1 轮比较")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" min "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 每轮需要比较的次数 N-i")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 记录目前能找到的最小值元素的下标")]),s._v("\n min "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 将找到的最小值和i位置所在的值进行交换")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" tmp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br")])]),n("h2",{attrs:{id:"_7-php-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_7-php-代码实现"}},[s._v("#")]),s._v(" 7. PHP 代码实现")]),s._v(" "),n("div",{staticClass:"language-php line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("selectionSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$minIndex")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$minIndex")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$minIndex")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$temp")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$minIndex")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$minIndex")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$temp")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/112.c60355fa.js b/learning/.vuepress/dist/assets/js/112.c60355fa.js deleted file mode 100644 index 16d9fb5b..00000000 --- a/learning/.vuepress/dist/assets/js/112.c60355fa.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[112],{1028:function(s,t,a){s.exports=a.p+"assets/img/insertionSort.be81c151.gif"},1150:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("p",[s._v("插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。")]),s._v(" "),n("p",[s._v("插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。")]),s._v(" "),n("h2",{attrs:{id:"_1-算法步骤"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_1-算法步骤"}},[s._v("#")]),s._v(" 1. 算法步骤")]),s._v(" "),n("ol",[n("li",[n("p",[s._v("将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。")])]),s._v(" "),n("li",[n("p",[s._v("从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)")])])]),s._v(" "),n("h2",{attrs:{id:"_2-动图演示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2-动图演示"}},[s._v("#")]),s._v(" 2. 动图演示")]),s._v(" "),n("p",[n("img",{attrs:{src:a(1028),alt:"动图演示"}})]),s._v(" "),n("h2",{attrs:{id:"_3-javascript-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-javascript-代码实现"}},[s._v("#")]),s._v(" 3. JavaScript 代码实现")]),s._v(" "),n("div",{staticClass:"language-js line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("insertionSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" preIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" current"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n preIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n current "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("preIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" current"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n preIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" current"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])]),n("h2",{attrs:{id:"_4-python-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_4-python-代码实现"}},[s._v("#")]),s._v(" 4. Python 代码实现")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("insertionSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n preIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n current "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" preIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("and")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" current"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n preIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" current\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("h2",{attrs:{id:"_5-go-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_5-go-代码实现"}},[s._v("#")]),s._v(" 5. Go 代码实现")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("insertionSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("range")]),s._v(" arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\tpreIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\t\tcurrent "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" preIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" current "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\tarr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\t\t\tpreIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t\tarr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("preIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" current\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])]),n("h2",{attrs:{id:"_6-java-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_6-java-代码实现"}},[s._v("#")]),s._v(" 6. Java 代码实现")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("InsertSort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IArraySort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Exception")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 对 arr 进行拷贝,不改变参数内容")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 记录要插入的数据")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 从已经排序的序列最右边的开始比较,找到比其小的数")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 存在比其小的数,插入")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" tmp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br")])]),n("h2",{attrs:{id:"_7-php-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_7-php-代码实现"}},[s._v("#")]),s._v(" 7. PHP 代码实现")]),s._v(" "),n("div",{staticClass:"language-php line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("insertionSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$preIndex")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$current")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$preIndex")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$preIndex")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$current")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$preIndex")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$preIndex")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$preIndex")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$preIndex")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$current")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/113.8a2c0d43.js b/learning/.vuepress/dist/assets/js/113.8a2c0d43.js deleted file mode 100644 index 922e847f..00000000 --- a/learning/.vuepress/dist/assets/js/113.8a2c0d43.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[113],{1033:function(t,s,a){t.exports=a.p+"assets/img/mergeSort.9541d116.gif"},1157:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("p",[t._v("归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。")]),t._v(" "),n("p",[t._v("作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:")]),t._v(" "),n("ul",[n("li",[t._v("自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);")]),t._v(" "),n("li",[t._v("自下而上的迭代;")])]),t._v(" "),n("p",[t._v("在《数据结构与算法 JavaScript 描述》中,作者给出了自下而上的迭代方法。但是对于递归法,作者却认为:")]),t._v(" "),n("blockquote",[n("p",[t._v("However, it is not possible to do so in JavaScript, as the recursion goes too deep for the language to handle.")]),t._v(" "),n("p",[t._v("然而,在 JavaScript 中这种方式不太可行,因为这个算法的递归深度对它来讲太深了。")])]),t._v(" "),n("p",[t._v("说实话,我不太理解这句话。意思是 JavaScript 编译器内存太小,递归太深容易造成内存溢出吗?还望有大神能够指教。")]),t._v(" "),n("p",[t._v("和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 的时间复杂度。代价是需要额外的内存空间。")]),t._v(" "),n("h2",{attrs:{id:"_2-算法步骤"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2-算法步骤"}},[t._v("#")]),t._v(" 2. 算法步骤")]),t._v(" "),n("ol",[n("li",[n("p",[t._v("申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;")])]),t._v(" "),n("li",[n("p",[t._v("设定两个指针,最初位置分别为两个已经排序序列的起始位置;")])]),t._v(" "),n("li",[n("p",[t._v("比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;")])]),t._v(" "),n("li",[n("p",[t._v("重复步骤 3 直到某一指针达到序列尾;")])]),t._v(" "),n("li",[n("p",[t._v("将另一序列剩下的所有元素直接复制到合并序列尾。")])])]),t._v(" "),n("h2",{attrs:{id:"_3-动图演示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-动图演示"}},[t._v("#")]),t._v(" 3. 动图演示")]),t._v(" "),n("p",[n("img",{attrs:{src:a(1033),alt:"动图演示"}})]),t._v(" "),n("h2",{attrs:{id:"_4-javascript-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_4-javascript-代码实现"}},[t._v("#")]),t._v(" 4. JavaScript 代码实现")]),t._v(" "),n("div",{staticClass:"language-js line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 采用自上而下的递归方法")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" middle "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Math"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("slice")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" middle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("slice")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("middle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("shift")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("shift")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("shift")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("shift")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br")])]),n("h2",{attrs:{id:"_5-python-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_5-python-代码实现"}},[t._v("#")]),t._v(" 5. Python 代码实现")]),t._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" math\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" arr\n middle "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" math"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("floor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("middle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("middle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" merge"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mergeSort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" mergeSort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("and")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pop"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pop"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pop"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pop"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br")])]),n("h2",{attrs:{id:"_6-go-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_6-go-代码实现"}},[t._v("#")]),t._v(" 6. Go 代码实现")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tlength "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" arr\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tmiddle "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\n\tleft "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("middle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\tright "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("middle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\tleft "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\tright "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tleft "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tright "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br")])]),n("h2",{attrs:{id:"_7-java-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_7-java-代码实现"}},[t._v("#")]),t._v(" 7. Java 代码实现")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MergeSort")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IArraySort")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throws")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 对 arr 进行拷贝,不改变参数内容")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" middle "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("copyOfRange")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" middle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("copyOfRange")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" middle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("copyOfRange")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("copyOfRange")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("copyOfRange")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("copyOfRange")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br")])]),n("h2",{attrs:{id:"_8-php-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_8-php-代码实现"}},[t._v("#")]),t._v(" 8. PHP 代码实现")]),t._v(" "),n("div",{staticClass:"language-php line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$len")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$len")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$middle")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$len")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$left")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("array_slice")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$middle")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$right")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("array_slice")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$middle")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$result")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$result")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("array_shift")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$result")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("array_shift")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$result")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("array_shift")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$result")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("array_shift")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$result")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br")])])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/114.9133a60a.js b/learning/.vuepress/dist/assets/js/114.9133a60a.js deleted file mode 100644 index 36d5aa57..00000000 --- a/learning/.vuepress/dist/assets/js/114.9133a60a.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[114],{1034:function(t,s,a){t.exports=a.p+"assets/img/quickSort.71c0f1c0.gif"},1158:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("p",[t._v("快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。")]),t._v(" "),n("p",[t._v("快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。")]),t._v(" "),n("p",[t._v("快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。")]),t._v(" "),n("p",[t._v("快速排序的名字起的是简单粗暴,因为一听到这个名字你就知道它存在的意义,就是快,而且效率高!它是处理大数据最快的排序算法之一了。虽然 Worst Case 的时间复杂度达到了 O(n²),但是人家就是优秀,在大多数情况下都比平均时间复杂度为 O(n logn) 的排序算法表现要更好,可是这是为什么呢,我也不知道。好在我的强迫症又犯了,查了 N 多资料终于在《算法艺术与信息学竞赛》上找到了满意的答案:")]),t._v(" "),n("blockquote",[n("p",[t._v("快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。")])]),t._v(" "),n("h2",{attrs:{id:"_1-算法步骤"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_1-算法步骤"}},[t._v("#")]),t._v(" 1. 算法步骤")]),t._v(" "),n("ol",[n("li",[n("p",[t._v("从数列中挑出一个元素,称为 “基准”(pivot);")])]),t._v(" "),n("li",[n("p",[t._v("重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;")])]),t._v(" "),n("li",[n("p",[t._v("递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;")])])]),t._v(" "),n("p",[t._v("递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。")]),t._v(" "),n("h2",{attrs:{id:"_2-动图演示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2-动图演示"}},[t._v("#")]),t._v(" 2. 动图演示")]),t._v(" "),n("p",[n("img",{attrs:{src:a(1034),alt:"动图演示"}})]),t._v(" "),n("h2",{attrs:{id:"_3-javascript-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-javascript-代码实现"}},[t._v("#")]),t._v(" 3. JavaScript 代码实现")]),t._v(" "),n("div",{staticClass:"language-js line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n partitionIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("typeof")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'number'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("typeof")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'number'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n partitionIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" partitionIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" partitionIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 分区操作")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" pivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 设定基准值(pivot)")]),t._v("\n index "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" pivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n index"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" index "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" high")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" pivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("low "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" high"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("low "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" high "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("high"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("high"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("high"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("low "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" high "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("high"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" high")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("low "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" high"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" pivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" high"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" high"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br")])]),n("h2",{attrs:{id:"_4-python-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_4-python-代码实现"}},[t._v("#")]),t._v(" 4. Python 代码实现")]),t._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("not")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("isinstance")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" left\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("not")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("isinstance")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" right\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n partitionIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" partition"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n quickSort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" partitionIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n quickSort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" partitionIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" arr\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n pivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left\n index "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" pivot"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" index\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n swap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n index"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n swap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br")])]),n("h2",{attrs:{id:"_5-go-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_5-go-代码实现"}},[t._v("#")]),t._v(" 5. Go 代码实现")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("_quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("_quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tpartitionIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("_quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" partitionIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("_quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" partitionIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" arr\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tpivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" left\n\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" pivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" index "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tarr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br")])]),n("h2",{attrs:{id:"_6-c-版"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_6-c-版"}},[t._v("#")]),t._v(" 6. C++版")]),t._v(" "),n("div",{staticClass:"language-C++ line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v(" //严蔚敏《数据结构》标准分割函数\n Paritition1(int A[], int low, int high) {\n int pivot = A[low];\n while (low < high) {\n while (low < high && A[high] >= pivot) {\n --high;\n }\n A[low] = A[high];\n while (low < high && A[low] <= pivot) {\n ++low;\n }\n A[high] = A[low];\n }\n A[low] = pivot;\n return low;\n }\n\n void QuickSort(int A[], int low, int high) //快排母函数\n {\n if (low < high) {\n int pivot = Paritition1(A, low, high);\n QuickSort(A, low, pivot - 1);\n QuickSort(A, pivot + 1, high);\n }\n }\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br")])]),n("h2",{attrs:{id:"_7-java-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_7-java-代码实现"}},[t._v("#")]),t._v(" 7. Java 代码实现")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("QuickSort")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IArraySort")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throws")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 对 arr 进行拷贝,不改变参数内容")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" partitionIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" partitionIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" partitionIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 设定基准值(pivot)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" pivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" index "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" pivot "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n index"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pivot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" index "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" index "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br")])]),n("h2",{attrs:{id:"_8-php-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_8-php-代码实现"}},[t._v("#")]),t._v(" 8. PHP 代码实现")]),t._v(" "),n("div",{staticClass:"language-php line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$middle")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$leftArray")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("array")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rightArray")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("array")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$i")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$i")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$middle")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rightArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$leftArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$leftArray")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$leftArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$leftArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$middle")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rightArray")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rightArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("array_merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$leftArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rightArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br")])])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/115.876b06dc.js b/learning/.vuepress/dist/assets/js/115.876b06dc.js deleted file mode 100644 index 933e14b5..00000000 --- a/learning/.vuepress/dist/assets/js/115.876b06dc.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[115],{1029:function(s,t,a){s.exports=a.p+"assets/img/heapSort.658d0f58.gif"},1151:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("p",[s._v("堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:")]),s._v(" "),n("ol",[n("li",[s._v("大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;")]),s._v(" "),n("li",[s._v("小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;")])]),s._v(" "),n("p",[s._v("堆排序的平均时间复杂度为 Ο(nlogn)。")]),s._v(" "),n("h2",{attrs:{id:"_1-算法步骤"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_1-算法步骤"}},[s._v("#")]),s._v(" 1. 算法步骤")]),s._v(" "),n("ol",[n("li",[n("p",[s._v("将待排序序列构建成一个堆 H[0……n-1],根据(升序降序需求)选择大顶堆或小顶堆;")])]),s._v(" "),n("li",[n("p",[s._v("把堆首(最大值)和堆尾互换;")])]),s._v(" "),n("li",[n("p",[s._v("把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;")])]),s._v(" "),n("li",[n("p",[s._v("重复步骤 2,直到堆的尺寸为 1。")])])]),s._v(" "),n("h2",{attrs:{id:"_2-动图演示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2-动图演示"}},[s._v("#")]),s._v(" 2. 动图演示")]),s._v(" "),n("p",[n("img",{attrs:{src:a(1029),alt:"动图演示"}})]),s._v(" "),n("h2",{attrs:{id:"_3-javascript-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-javascript-代码实现"}},[s._v("#")]),s._v(" 3. JavaScript 代码实现")]),s._v(" "),n("div",{staticClass:"language-js line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 因为声明的多个函数都需要数据长度,所以把len设置成为全局变量")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("buildMaxHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 建立大顶堆")]),s._v("\n len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Math"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("len"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 堆调整")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("buildMaxHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n len"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br")])]),n("h2",{attrs:{id:"_4-python-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_4-python-代码实现"}},[s._v("#")]),s._v(" 4. Python 代码实现")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("buildMaxHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" math\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("math"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("floor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n heapify"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v("\n largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arrLen "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("and")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" left\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arrLen "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("and")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" right\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n swap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n heapify"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("global")]),s._v(" arrLen\n arrLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n buildMaxHeap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n swap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n arrLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n heapify"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br")])]),n("h2",{attrs:{id:"_5-go-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_5-go-代码实现"}},[s._v("#")]),s._v(" 5. Go 代码实现")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\tarrLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("buildMaxHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arrLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" arrLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t\tarrLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arrLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("buildMaxHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arrLen "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" arrLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arrLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arrLen "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\tleft "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\tright "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v("\n\tlargest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" i\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arrLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\tlargest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" left\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arrLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\tlargest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" right\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arrLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\tarr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br")])]),n("h2",{attrs:{id:"_6-java-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_6-java-代码实现"}},[s._v("#")]),s._v(" 6. Java 代码实现")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HeapSort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IArraySort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Exception")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 对 arr 进行拷贝,不改变参数内容")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("buildMaxHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n len"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("buildMaxHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("largest "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" largest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br"),n("span",{staticClass:"line-number"},[s._v("45")]),n("br"),n("span",{staticClass:"line-number"},[s._v("46")]),n("br"),n("span",{staticClass:"line-number"},[s._v("47")]),n("br"),n("span",{staticClass:"line-number"},[s._v("48")]),n("br"),n("span",{staticClass:"line-number"},[s._v("49")]),n("br"),n("span",{staticClass:"line-number"},[s._v("50")]),n("br"),n("span",{staticClass:"line-number"},[s._v("51")]),n("br")])]),n("h2",{attrs:{id:"_7-php-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_7-php-代码实现"}},[s._v("#")]),s._v(" 7. PHP 代码实现")]),s._v(" "),n("div",{staticClass:"language-php line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("buildMaxHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("global")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("global")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$left")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$right")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$largest")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$left")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$largest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$largest")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$right")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$largest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$largest")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$largest")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$largest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$largest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$temp")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$temp")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("global")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("buildMaxHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br"),n("span",{staticClass:"line-number"},[s._v("45")]),n("br"),n("span",{staticClass:"line-number"},[s._v("46")]),n("br"),n("span",{staticClass:"line-number"},[s._v("47")]),n("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/116.0507409d.js b/learning/.vuepress/dist/assets/js/116.0507409d.js deleted file mode 100644 index 22d2469f..00000000 --- a/learning/.vuepress/dist/assets/js/116.0507409d.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[116],{1030:function(s,t,a){s.exports=a.p+"assets/img/countingSort.827d96b8.gif"},1152:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("p",[s._v("计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。")]),s._v(" "),n("h2",{attrs:{id:"_1-算法步骤"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_1-算法步骤"}},[s._v("#")]),s._v(" 1. 算法步骤")]),s._v(" "),n("ol",[n("li",[n("p",[s._v("找出原数组中元素值最大的,记为max。")])]),s._v(" "),n("li",[n("p",[s._v("创建一个新数组count,其长度是max加1,其元素默认值都为0。")])]),s._v(" "),n("li",[n("p",[s._v("遍历原数组中的元素,以原数组中的元素作为count数组的索引,以原数组中的元素出现次数作为count数组的元素值。")])]),s._v(" "),n("li",[n("p",[s._v("创建结果数组result,起始索引index。")])]),s._v(" "),n("li",[n("p",[s._v("遍历count数组,找出其中元素值大于0的元素,将其对应的索引作为元素值填充到result数组中去,每处理一次,count中的该元素值减1,直到该元素值不大于0,依次处理count中剩下的元素。")])]),s._v(" "),n("li",[n("p",[s._v("返回结果数组result。")])])]),s._v(" "),n("h2",{attrs:{id:"_2-动图演示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2-动图演示"}},[s._v("#")]),s._v(" 2. 动图演示")]),s._v(" "),n("p",[n("img",{attrs:{src:a(1030),alt:"动图演示"}})]),s._v(" "),n("h2",{attrs:{id:"_3-javascript-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-javascript-代码实现"}},[s._v("#")]),s._v(" 3. JavaScript 代码实现")]),s._v(" "),n("div",{staticClass:"language-js line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("countingSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" maxValue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" bucket "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Array")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("maxValue"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n sortedIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arrLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n bucketLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arrLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" bucketLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("sortedIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br")])]),n("h2",{attrs:{id:"_4-python-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_4-python-代码实现"}},[s._v("#")]),s._v(" 4. Python 代码实现")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("countingSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" maxValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n bucketLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" maxValue"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n bucket "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("bucketLen\n sortedIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n arrLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arrLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("not")]),s._v(" bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bucketLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("sortedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" j\n sortedIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br")])]),n("h2",{attrs:{id:"_5-go-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_5-go-代码实现"}},[s._v("#")]),s._v(" 5. Go 代码实现")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("countingSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" maxValue "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\tbucketLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\tbucket "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" bucketLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 初始为0的数组")]),s._v("\n\n\tsortedIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n\tlength "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\tbucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" bucketLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\tarr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("sortedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" j\n\t\t\tsortedIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\t\t\tbucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br")])]),n("h2",{attrs:{id:"_6-java-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_6-java-代码实现"}},[s._v("#")]),s._v(" 6. Java 代码实现")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CountingSort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IArraySort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Exception")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 对 arr 进行拷贝,不改变参数内容")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getMaxValue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("countingSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" maxValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("countingSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" maxValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" bucketLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" bucket "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("bucketLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" sortedIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" bucketLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("sortedIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getMaxValue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" maxValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br")])]),n("h2",{attrs:{id:"_7-php-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_7-php-代码实现"}},[s._v("#")]),s._v(" 7. PHP 代码实现")]),s._v(" "),n("div",{staticClass:"language-php line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("countingSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxValue")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxValue")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxValue")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$m")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$m")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxValue")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$m")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucket")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arrLen")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arrLen")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("array_key_exists")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucket")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucket")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucket")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$sortedIndex")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("foreach")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucket")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$key")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$sortedIndex")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$key")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/117.4d75eb96.js b/learning/.vuepress/dist/assets/js/117.4d75eb96.js deleted file mode 100644 index a5d31856..00000000 --- a/learning/.vuepress/dist/assets/js/117.4d75eb96.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[117],{1032:function(s,t,a){s.exports=a.p+"assets/img/bucket.414dd7da.gif"},1155:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("p",[s._v("桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:")]),s._v(" "),n("ol",[n("li",[s._v("在额外空间充足的情况下,尽量增大桶的数量")]),s._v(" "),n("li",[s._v("使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中")])]),s._v(" "),n("p",[s._v("同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。")]),s._v(" "),n("h2",{attrs:{id:"_1-什么时候最快"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_1-什么时候最快"}},[s._v("#")]),s._v(" 1. 什么时候最快")]),s._v(" "),n("p",[s._v("当输入的数据可以均匀的分配到每一个桶中。")]),s._v(" "),n("h2",{attrs:{id:"_2-什么时候最慢"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2-什么时候最慢"}},[s._v("#")]),s._v(" 2. 什么时候最慢")]),s._v(" "),n("p",[s._v("当输入的数据被分配到了同一个桶中。")]),s._v(" "),n("h2",{attrs:{id:"_3-动图演示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-动图演示"}},[s._v("#")]),s._v(" 3. 动图演示")]),s._v(" "),n("p",[n("img",{attrs:{src:a(1032),alt:"动图演示"}})]),s._v(" "),n("h2",{attrs:{id:"_4-javascript-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_4-javascript-代码实现"}},[s._v("#")]),s._v(" 4. JavaScript 代码实现")]),s._v(" "),n("div",{staticClass:"language-js line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bucketSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" bucketSize")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" minValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" minValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n minValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 输入数据的最小值")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" maxValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 输入数据的最大值")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//桶的初始化")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("DEFAULT_BUCKET_SIZE")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 设置桶的默认数量为5")]),s._v("\n bucketSize "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" bucketSize "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("DEFAULT_BUCKET_SIZE")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" bucketCount "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Math"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" minValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" bucketSize"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" buckets "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Array")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bucketCount"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" buckets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n buckets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//利用映射函数将数据分配到各个桶中")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n buckets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Math"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" minValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" bucketSize"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" buckets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("insertionSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("buckets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 对每个桶进行排序,这里使用了插入排序")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" buckets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("buckets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br")])]),n("h2",{attrs:{id:"_5-java-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_5-java-代码实现"}},[s._v("#")]),s._v(" 5. Java 代码实现")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BucketSort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IArraySort")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("InsertSort")]),s._v(" insertSort "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("InsertSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Exception")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 对 arr 进行拷贝,不改变参数内容")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sourceArray"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bucketSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bucketSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" bucketSize"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Exception")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" minValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" minValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n minValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" maxValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" bucketCount "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("maxValue "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" minValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" bucketSize"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" buckets "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("bucketCount"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 利用映射函数将数据分配到各个桶中")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" index "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" minValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" bucketSize"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n buckets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("arrAppend")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("buckets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" arrIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" bucket "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" buckets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("continue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 对每个桶进行排序,这里使用了插入排序")]),s._v("\n bucket "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" insertSort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" bucket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("arrIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * 自动扩容,并保存数据\n *\n * @param arr\n * @param value\n */")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("arrAppend")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("copyOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br"),n("span",{staticClass:"line-number"},[s._v("45")]),n("br"),n("span",{staticClass:"line-number"},[s._v("46")]),n("br"),n("span",{staticClass:"line-number"},[s._v("47")]),n("br"),n("span",{staticClass:"line-number"},[s._v("48")]),n("br"),n("span",{staticClass:"line-number"},[s._v("49")]),n("br"),n("span",{staticClass:"line-number"},[s._v("50")]),n("br"),n("span",{staticClass:"line-number"},[s._v("51")]),n("br"),n("span",{staticClass:"line-number"},[s._v("52")]),n("br"),n("span",{staticClass:"line-number"},[s._v("53")]),n("br"),n("span",{staticClass:"line-number"},[s._v("54")]),n("br"),n("span",{staticClass:"line-number"},[s._v("55")]),n("br"),n("span",{staticClass:"line-number"},[s._v("56")]),n("br"),n("span",{staticClass:"line-number"},[s._v("57")]),n("br"),n("span",{staticClass:"line-number"},[s._v("58")]),n("br"),n("span",{staticClass:"line-number"},[s._v("59")]),n("br"),n("span",{staticClass:"line-number"},[s._v("60")]),n("br"),n("span",{staticClass:"line-number"},[s._v("61")]),n("br"),n("span",{staticClass:"line-number"},[s._v("62")]),n("br"),n("span",{staticClass:"line-number"},[s._v("63")]),n("br"),n("span",{staticClass:"line-number"},[s._v("64")]),n("br")])]),n("h2",{attrs:{id:"_6-php-代码实现"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_6-php-代码实现"}},[s._v("#")]),s._v(" 6. PHP 代码实现")]),s._v(" "),n("div",{staticClass:"language-php line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bucketSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucketSize")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$minValue")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxValue")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$minValue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$minValue")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxValue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxValue")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucketCount")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$maxValue")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$minValue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucketSize")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$buckets")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("array")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$buckets")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$buckets")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$buckets")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$minValue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucketSize")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("array")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$buckets")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucketTmp")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$buckets")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucketTmp")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucketTmp")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$bucketTmp")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/118.5ecf1131.js b/learning/.vuepress/dist/assets/js/118.5ecf1131.js deleted file mode 100644 index 99c00b59..00000000 --- a/learning/.vuepress/dist/assets/js/118.5ecf1131.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[118],{1045:function(t,r,o){"use strict";o.r(r);var e=o(3),v=Object(e.a)({},(function(){var t=this,r=t.$createElement,o=t._self._c||r;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("p",[t._v("小浩算法是我在疫情期间完成的一部图解算法题典!目前共完成 "),o("font",{attrs:{color:"red"}},[o("b",[t._v("105道")])]),t._v("\n高频面试算法题目,全部采用漫画图解的方式。该教程目前共有 "),o("font",{attrs:{color:"red"}},[o("b",[t._v("11w")])]),t._v(" 人阅读。\n面向 "),o("font",{attrs:{color:"red"}},[o("b",[t._v("算法小白")])]),t._v(" 和 "),o("font",{attrs:{color:"red"}},[o("b",[t._v("初中阶读者")])]),t._v("。所有代码均在 leetcode 上测试运行,可以直接右上角搜索题号。")],1),t._v(" "),o("div",{staticClass:"custom-block danger"},[o("p",{staticClass:"custom-block-title"},[t._v("重要")]),t._v(" "),o("p",[t._v("目前该教程"),o("b",[t._v("全部免费")]),t._v(",正因如此被一些不良商家拿去卖钱! 所以我把全部的内容都同步到了 "),o("a",{attrs:{href:"https://github.com/geekxh/hello-algorithm",target:"_blank",rel:"noopener noreferrer"}},[t._v("github"),o("OutboundLink")],1),t._v(","),o("b",[t._v("希望大家可以帮我点一个 star,防止有更多的人上当受骗!")]),t._v(" 小浩感激不尽!")])]),t._v(" "),o("hr"),t._v(" "),o("p",[t._v("为了提高大家的学习效率,我做了两件事:")]),t._v(" "),o("p",[t._v("1、首先创建了"),o("b",[t._v("万人刷题群")]),t._v(",群里无广告,不套路。下方扫码回复"),o("font",{attrs:{color:"red"}},[o("b",[t._v("【进群】")])]),t._v(" 即可。")],1),t._v(" "),o("p",[t._v("2、同时我把自己写的所有内容整理成了一本电子书。下方扫码回复"),o("font",{attrs:{color:"red"}},[o("b",[t._v("【999】")])]),t._v(" 下载。")],1),t._v(" "),o("center",[o("img",{attrs:{src:"/code.png",alt:"JPEG"}})])],1)}),[],!1,null,null,null);r.default=v.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/119.05aaae74.js b/learning/.vuepress/dist/assets/js/119.05aaae74.js deleted file mode 100644 index 8eff3c82..00000000 --- a/learning/.vuepress/dist/assets/js/119.05aaae74.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[119],{1043:function(a,t,s){"use strict";s.r(t);var r=s(3),v=Object(r.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h2",{attrs:{id:"为什么要做这样的一个算法图解合集"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#为什么要做这样的一个算法图解合集"}},[a._v("#")]),a._v(" 为什么要做这样的一个算法图解合集")]),a._v(" "),s("p",[a._v("网上的算法教程杂乱且分散,质量层次不齐,浪费了大家大量宝贵的时间。很多题解,在我掌握题目后去看都费劲,更何况对于一些初学者。")]),a._v(" "),s("h2",{attrs:{id:"本教程阅读门槛"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#本教程阅读门槛"}},[a._v("#")]),a._v(" 本教程阅读门槛")]),a._v(" "),s("p",[a._v("本教程基本没有学习门槛。因为在每道题目中,我都会尽量去串基础知识,以达到学以致用的效果。")]),a._v(" "),s("h2",{attrs:{id:"学完本教程期望达到什么样的目的"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#学完本教程期望达到什么样的目的"}},[a._v("#")]),a._v(" 学完本教程期望达到什么样的目的")]),a._v(" "),s("ul",[s("li",[a._v("掌握基本的数据结构与算法")]),a._v(" "),s("li",[a._v("掌握各类型高频面试算法题")])]),a._v(" "),s("h2",{attrs:{id:"本教程有何特色"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#本教程有何特色"}},[a._v("#")]),a._v(" 本教程有何特色")]),a._v(" "),s("p",[a._v("每一道算法题都配有完整图解!仅此一家!")]),a._v(" "),s("h2",{attrs:{id:"题解是围绕什么编写的"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#题解是围绕什么编写的"}},[a._v("#")]),a._v(" 题解是围绕什么编写的")]),a._v(" "),s("p",[a._v("掌握!所有的题解都以掌握二字为前提。不会追求过多的奇淫技巧,毕竟我们不是专门研究算法的人。我见过太多算法初学者,一个题解看不懂,转头又去看第二个题解,第二个看不懂,又去看第三个,直到最后放弃掉。浪费了时间,题目还是不会做,这图什么呢?所以本教程所有的题解都是以掌握为目标,尽量把每一道题的思路都讲的明明白白的。")]),a._v(" "),s("h2",{attrs:{id:"题解是否严谨"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#题解是否严谨"}},[a._v("#")]),a._v(" 题解是否严谨")]),a._v(" "),s("p",[a._v("绝对严谨,所有的题解都在leetcode上进行过测试运行。")]),a._v(" "),s("h2",{attrs:{id:"没学过-java、go-是否可以学习"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#没学过-java、go-是否可以学习"}},[a._v("#")]),a._v(" 没学过 java、go 是否可以学习")]),a._v(" "),s("p",[a._v("当然可以。我期望大家更多的是去关注算法的本身,而不是语言层面的东西。所以本教程,其实各语言都会使用一些,并不局限于 java、go。但是,我绝对不会使用任何语法特性!我希望大家不要被语言所束缚!")]),a._v(" "),s("h2",{attrs:{id:"是否可以按照本教程顺序来刷题"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#是否可以按照本教程顺序来刷题"}},[a._v("#")]),a._v(" 是否可以按照本教程顺序来刷题")]),a._v(" "),s("p",[a._v("当然可以。一般刷题我们有两种策略,一种就是刷 leetcode 前一百道题目,另一种就是根据分类刷题。刷 leetcode 前一百道题,是因为这些题目都是经典题目。而根据分类,更适合算法小白和初中阶段读者。所以我在这里选择了根据分类来汇编,这样我们还可以在做一些题目的时候,与前面同类型的题目进行比较。")]),a._v(" "),s("h2",{attrs:{id:"这些题目刷完能达到什么效果"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#这些题目刷完能达到什么效果"}},[a._v("#")]),a._v(" 这些题目刷完能达到什么效果")]),a._v(" "),s("p",[a._v("刷完再说!")]),a._v(" "),s("h2",{attrs:{id:"你需要做什么"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#你需要做什么"}},[a._v("#")]),a._v(" 你需要做什么")]),a._v(" "),s("p",[a._v("开干!奥利给!")]),a._v(" "),s("h2",{attrs:{id:"看完题目还是不懂怎么办?"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#看完题目还是不懂怎么办?"}},[a._v("#")]),a._v(" 看完题目还是不懂怎么办?")]),a._v(" "),s("p",[a._v("下方扫码,加我微信,我拉你到刷题群。和大家一起交流学习!(备注:进群)")]),a._v(" "),s("img",{staticStyle:{zoom:"67%"},attrs:{src:"/code.png",alt:"PNG",width:"300/"}})])}),[],!1,null,null,null);t.default=v.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/12.c91672d5.js b/learning/.vuepress/dist/assets/js/12.c91672d5.js deleted file mode 100644 index bbf3afbb..00000000 --- a/learning/.vuepress/dist/assets/js/12.c91672d5.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{1005:function(t,s,a){t.exports=a.p+"assets/img/1.e3a1f41f.gif"},1006:function(t,s,a){t.exports=a.p+"assets/img/2.3e1b3fee.jpg"},1007:function(t,s,a){t.exports=a.p+"assets/img/3.96d46fed.gif"},1008:function(t,s,a){t.exports=a.p+"assets/img/4.08f28007.jpg"},1009:function(t,s,a){t.exports=a.p+"assets/img/5.36f3611e.jpg"},1010:function(t,s,a){t.exports=a.p+"assets/img/6.19b1a4e0.jpg"},1011:function(t,s,a){t.exports=a.p+"assets/img/7.4d3f86e3.jpg"},1012:function(t,s,a){t.exports=a.p+"assets/img/8.e26022ef.gif"},1013:function(t,s,a){t.exports=a.p+"assets/img/9.6fc15e39.jpg"},1014:function(t,s,a){t.exports=a.p+"assets/img/10.636058c2.jpg"},1015:function(t,s,a){t.exports=a.p+"assets/img/11.1ae1fab1.jpg"},1016:function(t,s,a){t.exports=a.p+"assets/img/12.db457c21.gif"},1017:function(t,s,a){t.exports=a.p+"assets/img/13.cc3506e4.gif"},1145:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("img",{attrs:{src:a(1005),alt:"PNG"}}),t._v(" "),n("blockquote",[n("p",[t._v("今天是小浩算法 “365刷题计划” 第103天。这是前几天一个同学去滴滴面试的原题。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题目和昨天讲的生命游戏有一点是很像的,就是同样也要求"),n("strong",[t._v("原地旋转")]),t._v("。其实在很多矩阵的题目中,都会有这样的要求,大家需要注意一下。")])]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第48题:旋转图像")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个 n × n 的二维矩阵表示一个图像。")])])])]),t._v(" "),n("p",[n("strong",[t._v("说明:")])]),t._v(" "),n("p",[t._v("你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("给定 matrix = \n[\n [1,2,3],\n [4,5,6],\n [7,8,9]\n],\n\n原地旋转输入矩阵,使其变为:\n[\n [7,4,1],\n [8,5,2],\n [9,6,3]\n]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("给定 matrix =\n[\n [ 5, 1, 9,11],\n [ 2, 4, 8,10],\n [13, 3, 6, 7],\n [15,14,12,16]\n], \n\n原地旋转输入矩阵,使其变为:\n[\n [15,13, 2, 5],\n [14, 3, 4, 1],\n [12, 6, 8, 9],\n [16, 7,10,11]\n]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])]),n("p",[t._v("题目理解起来还是很容易的:")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(1006),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[t._v("#")]),t._v(" 02、题解分析")]),t._v(" "),n("blockquote",[n("p",[t._v("这是一道看起来容易,但其实非常考察细心程度的算法题目,有太多地方会出现失误。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("我们用代码来旋转矩阵,肯定不能说像拿着一个东西整体直接旋转,类似这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(1007),alt:"PNG"}}),t._v(" "),n("p",[t._v("一般容易想到的是,一层层的从外到内旋转每一圈(至于为什么不从内到外,如果你觉得方便,也ok),也就是俗称的找框框:")]),t._v(" "),n("img",{staticStyle:{zoom:"33%"},attrs:{src:a(1008),alt:"PNG"}}),t._v(" "),n("p",[t._v("对每个框框,其实都有 4 个顶点:")]),t._v(" "),n("img",{staticStyle:{zoom:"33%"},attrs:{src:a(1009),alt:"PNG"}}),t._v(" "),n("p",[t._v("剩下的就是交换这四个顶点的值:")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(1010),alt:"PNG"}}),t._v(" "),n("p",[t._v("交换完毕之后,再继续交换移动后的四个顶点:")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(1011),alt:"PNG"}}),t._v(" "),n("p",[t._v("那代码实现其实就很简单了:")]),t._v(" "),n("br"),t._v(" "),n("ul",[n("li",[t._v("我们通过 x 和 y 就可以定义这个框框的边界")]),t._v(" "),n("li",[t._v("找到框框后,我们再通过框框边界来定义出4个顶点")]),t._v(" "),n("li",[t._v("然后完成交换")])]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("rotate")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" s "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" e "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" s "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" e"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n temp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" temp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])]),n("p",[t._v("当然,上面是一个 n x n 的矩阵找框框,如果不是 n x n 其实也类似,大家有兴趣可以看下下面这道:")]),t._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.99.其他补充题目/1.99.其他补充题目/01.html"}},[t._v("螺旋矩阵(54)")])],1),t._v(" "),n("br"),t._v(" "),n("p",[t._v("那我们除了找框框之外,还能不能有一些别的解法呢?当然可以,想想小时候我们通过对折来完成的填字游戏。")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(1012),alt:"PNG"}}),t._v(" "),n("p",[t._v("我们观察这个矩阵:")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(1013),alt:"PNG"}}),t._v(" "),n("p",[t._v("我们观察这个矩阵,向右旋转90°,是不是可以理解为"),n("strong",[t._v("先上下翻转,再沿对角线翻转")]),t._v(":")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(1014),alt:"PNG"}}),t._v(" "),n("p",[t._v("根据分析,完成代码(其实应该用Go写,交换元素会方便许多....):")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//JAVA")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("rotate")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//上下翻转 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tmp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//对角线翻转 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tmp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(1015),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、算法小知识"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、算法小知识"}},[t._v("#")]),t._v(" 03、算法小知识")]),t._v(" "),n("blockquote",[n("p",[t._v("骑士巡逻(英语:Knight's tour)是指在按照国际象棋中骑士的规定走法走遍整个棋盘的每一个方格,而且每个网格只能够经过一次。假若骑士能够从走回到最初位置,则称此巡逻为“封闭巡逻”,否则,称为“开巡逻”。对于8*8棋盘,一共有26,534,728,821,064种封闭巡逻,但是到底有多少种开巡逻仍然未知。")])]),t._v(" "),n("img",{attrs:{src:a(1016),alt:"PNG"}}),t._v(" "),n("img",{attrs:{src:a(1017),alt:"PNG"}}),t._v(" "),n("br"),t._v(" "),n("p",[t._v("今天的题目到这里就结束了,你学会了吗?快来评论区留下你的想法吧!")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/120.c5b701e3.js b/learning/.vuepress/dist/assets/js/120.c5b701e3.js deleted file mode 100644 index 4448b35b..00000000 --- a/learning/.vuepress/dist/assets/js/120.c5b701e3.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[120],{1048:function(t,r,e){"use strict";e.r(r);var n=e(3),o=Object(n.a)({},(function(){var t=this,r=t.$createElement,e=t._self._c||r;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("p",[e("a",{attrs:{href:"https://pan.baidu.com/s/1L7tO8a99B-c5xHMPrUKmqQ",target:"_blank",rel:"noopener noreferrer"}},[t._v("点击下载我写的电子书:1u28 (希望下方扫码支持一下,谢谢)"),e("OutboundLink")],1)]),t._v(" "),e("p",[t._v("扫码回复"),e("font",{attrs:{color:"red"}},[e("b",[t._v("【进群】")])]),t._v(" ,加入万人刷题群,群内可 BAT 内推。")],1),t._v(" "),e("p",[t._v("扫码回复"),e("font",{attrs:{color:"red"}},[e("b",[t._v("【999】")])]),t._v(",下载我整理的 40 张高清思维导图。")],1),t._v(" "),e("center",[e("img",{attrs:{src:"/code.png",alt:"JPEG"}})]),t._v(" "),e("p",[t._v("导图目录如下:")]),t._v(" "),e("center",[e("img",{staticStyle:{zoom:"50%"},attrs:{src:"/daotu-1.png",alt:"JPEG"}})])],1)}),[],!1,null,null,null);r.default=o.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/121.69753711.js b/learning/.vuepress/dist/assets/js/121.69753711.js deleted file mode 100644 index cd29eaac..00000000 --- a/learning/.vuepress/dist/assets/js/121.69753711.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[121],{1090:function(_,v,t){"use strict";t.r(v);var r=t(3),s=Object(r.a)({},(function(){var _=this,v=_.$createElement,t=_._self._c||v;return t("ContentSlotsDistributor",{attrs:{"slot-key":_.$parent.slotKey}},[t("blockquote",[t("p",[_._v("在面试的过程中,除了常规的算法题目,我们经常也会被问到一些趣味题型来考察思维,尤其以 FLAG(Facebook, LinkedIn, Amazon, Google)等公司为典型。而这类问题的背后,很多都有博弈论的影子。所以在本系列,我将为大家分享一整套需要掌握的"),t("strong",[_._v("博弈论")]),_._v("相关知识,希望大家可以喜欢。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("PS:本系列将不一定都是算法问题,不是IT行业的小伙伴也可以进行学习,来提高自身分析问题的能力。")])]),_._v(" "),t("h2",{attrs:{id:"_01、红眼睛和蓝眼睛"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_01、红眼睛和蓝眼睛"}},[_._v("#")]),_._v(" 01、红眼睛和蓝眼睛")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("红眼睛和蓝眼睛")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("一个岛上有100个人,其中有5个红眼睛,95个蓝眼睛。这个岛有三个奇怪的宗教规则。")])])])]),_._v(" "),t("p",[_._v("1.他们不能照镜子,不能看自己眼睛的颜色。")]),_._v(" "),t("p",[_._v("2.他们不能告诉别人对方的眼睛是什么颜色。")]),_._v(" "),t("p",[_._v("3.一旦有人知道了自己是红眼睛,他就必须在当天夜里自杀。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("某天,有个旅行者到了这个岛上。由于不知道这里的规矩,所以他在和全岛人一起狂欢的时候,不留神就说了一句话:【你们这里有红眼睛的人。】")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("问题:假设这个岛上的人每天都可以看到其他所有人,每个人都可以做出缜密的逻辑推理,请问岛上会发生什么?")]),_._v(" "),t("h2",{attrs:{id:"_02、题目分析"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[_._v("#")]),_._v(" 02、题目分析")]),_._v(" "),t("p",[_._v("题目乍看之下,没有任何逻辑可言!以目测条件,基本无法完成任何正常的推理。但是在仔细推敲之后,我们可以将问题简化,从假设只有1个红眼睛开始分析。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("我们假设岛上只有1个红眼睛的人,还有99个都是蓝眼睛。因为这个旅行者说了“这里有红眼睛的人”,"),t("strong",[_._v("那么在第一天的时候,这个红眼睛会发现其他的人都是蓝眼睛")]),_._v("(与此同时,其他人因为看到了这个红眼睛的人,所以都确认了自己的安全)"),t("strong",[_._v("那么这天晚上,这个红眼睛的人一定会自杀!")])]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("继续分析,假设这个岛上有2个红眼睛,那么当旅行者说“这里有红眼睛的人”之后的第一天,这两个红眼睛分别发现还有别的红眼睛存在,所以他们当天晚上认为自己是安全的。但是到了第二天,红眼睛惊讶的发现**,另一个红眼睛的人竟然没有自杀(说明岛上有不止一个红眼睛),并且当天他们也没有发现有别的红眼睛存在(说明另一个红眼睛就是自己)"),t("strong",[_._v("WTF,那肯定另一个红眼睛就是自己了,所以")]),_._v("在第二天夜里,两个红眼睛的人会同时自杀**!")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v('继续分析,假如岛上红眼睛有3个。那么在第一天,红眼睛发现了岛上还有另外两个红眼睛,红眼睛呵呵一笑,“反正不是我”。到了第二天,红眼睛仍然看到了另外两个红眼睛,红眼睛心想,"这下你两该完蛋了吧",毕竟你两都知道了自己是红眼睛,晚上回去统统自杀吧!(根据上面的推论得出)但是惊奇的是,'),t("strong",[_._v("到了第三天,红眼睛发现另外两个红眼睛竟然都没有自杀。")]),_._v("("),t("strong",[_._v("说明岛上红眼睛的人不止两个")]),_._v(")并且当天红眼睛也没发现新的红眼睛("),t("strong",[_._v("说明还有一个红眼睛就是自己")]),_._v(")所以在第三天的夜里,三个红眼睛会同时自杀。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("根据上面的推论,"),t("strong",[_._v("假设有N个红眼睛,那么到了第N天,这N个红眼睛就会自杀")]),_._v("。所以最终这个岛上红眼睛的人会统统自杀!这就是答案,生活就是这么朴实无华,且枯燥。")]),_._v(" "),t("h2",{attrs:{id:"_03、旅客的挽回"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_03、旅客的挽回"}},[_._v("#")]),_._v(" 03、旅客的挽回")]),_._v(" "),t("p",[_._v("上面的分析大家应该都看懂了。但若是在旅客说完这句话后,其并没有离开这个岛。同时他也看到了周围人眼里的惊慌和失措,这个时候,旅客为自己的行为感到了懊恼和悔恨!旅客决定对自己的话进行挽回,旅客又该怎么做呢?")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("这里我提供一种思路,"),t("strong",[_._v("旅客可以在第N次集会上杀掉N个红眼睛")]),_._v(',让这N个红眼睛 “GO TO SLEEP”,就可以中断事件的推理。事实上,基于人道主义,旅客并不需要手动杀人,她只需要在第N天的时候告诉这N个人,你们是红眼睛,那么这天晚上,这N个人就会自杀。"All RETURN",一切将回归秩序~')]),_._v(" "),t("br")])}),[],!1,null,null,null);v.default=s.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/122.63d86812.js b/learning/.vuepress/dist/assets/js/122.63d86812.js deleted file mode 100644 index 970a0496..00000000 --- a/learning/.vuepress/dist/assets/js/122.63d86812.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[122],{1088:function(_,v,t){"use strict";t.r(v);var s=t(3),r=Object(s.a)({},(function(){var _=this,v=_.$createElement,t=_._self._c||v;return t("ContentSlotsDistributor",{attrs:{"slot-key":_.$parent.slotKey}},[t("blockquote",[t("p",[_._v("在面试的过程中,除了常规的算法题目,我们经常也会被问到一些趣味题型来考察思维,尤其以 FLAG(Facebook, LinkedIn, Amazon, Google)等公司为典型。而这类问题的背后,很多都有博弈论的影子。所以在本系列,我将为大家分享一整套需要掌握的"),t("strong",[_._v("博弈论")]),_._v("相关知识,希望大家可以喜欢。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("PS:本系列将不一定都是算法问题,不是IT行业的小伙伴也可以进行学习,来提高自身分析问题的能力。")])]),_._v(" "),t("h2",{attrs:{id:"_01、海盗分金币问题"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_01、海盗分金币问题"}},[_._v("#")]),_._v(" 01、海盗分金币问题")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("海盗分金币")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("在大海上,有5个海盗抢得100枚金币,他们决定每一个人按顺序依次提出自己的分配方案,如果提出的方案没有获得半数或半数以上的人的同意,则这个提出方案的人就被扔到海里喂鲨鱼。那么第一个提出方案的人要怎么做,才能使自己的利益最大化?")])])])]),_._v(" "),t("p",[_._v("海盗们有如下特点:")]),_._v(" "),t("p",[_._v("1.足智多谋,总是采取最优策略。")]),_._v(" "),t("p",[_._v("2.贪生怕死,尽量保全自己性命。")]),_._v(" "),t("p",[_._v("3.贪得无厌,希望自己得到越多宝石越好")]),_._v(" "),t("p",[_._v("4.心狠手辣,在自己利益最大的情况下希望越多人死越好。")]),_._v(" "),t("p",[_._v("5.疑心多虑,不信任彼此,尽量确保自身利益不寄希望与别人给自己更大利益。")]),_._v(" "),t("h2",{attrs:{id:"_02、题目分析"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[_._v("#")]),_._v(" 02、题目分析")]),_._v(" "),t("p",[_._v("首先我们很容易会觉得,抽签到第一个提方案的海盗会很吃亏!因为只要死的人够多,那么平均每个人获取的金币就最多,而第一个提方案的人是最容易死的。但是事实是,在满足海盗特点的基础上,"),t("strong",[_._v("第一个提方案的海盗是最赚的")]),_._v(",我们一起来分析一下。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("假如我们设想只有两个海盗。那么不管第一个说什么,只要第二个人不同意,第二个人就可以得到全部的金币!所以"),t("strong",[_._v("第一个海盗必死无疑")]),_._v(",这个大家都能理解。(当然,这样的前提是一号提出方案后不可以马上自己同意,不然如果自己提出给自己全部金币的方案,然后自己支持,这样就是二号必死无疑)")]),_._v(" "),t("p",[_._v("假如现在我们加入第三个海盗,这时候原来的一号成为了二号,二号成为了三号。这时候现在的二号心里会清楚,"),t("strong",[_._v("如果他投死了一号,那么自己必死无疑")]),_._v("!所以根据贪生怕死的原则,二号肯定会让一号存活。而此时一号心理也清楚,无论自己提出什么样的方案,二号都会让自己存活,而这时只要加上自己的一票,就有半数通过,所以一号提出方案:把金币都给我。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("现在又继续加入了新的海盗!原来的1,2,3号,成为了现在的2,3,4号。这时候新的一号海盗洞悉了奥秘,知道了**如果自己死了,二号就可以获取全部的金币,**所以提出给三号和四号一人一个金币,一起投死2号。而与此同时,现在的3号和4号获取的要比三个人时多(三个人时自己获取不了任何金币),所以他们会同意这个方案!")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("现在加入我们的大Boss,最后一个海盗。根据分析,大Boss海盗1号推知出2号的方案后就可以提出(97,0,1,2,0)或者(97,0,1,0,2)的方案。这样的分配方案对现在的3号海盗相比现在的2号的分配方案还多了一枚金币,就会投赞成票,4号或者5号因为得到了2枚金币,相比2号的一枚多,也会支持1号,加上1号自己的赞成票,方案就会通过,即1号提出(97,0,1,2,0)或(97,0,1,0,2)的分配方案,大Boss成功获得了97枚金币。")]),_._v(" "),t("h2",{attrs:{id:"_03、思考"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_03、思考"}},[_._v("#")]),_._v(" 03、思考")]),_._v(" "),t("p",[_._v("最终,"),t("strong",[_._v("大Boss一号海盗得到97枚金币,投死了老二和老五")]),_._v(",这竟然是我们分析出的最佳方案!这个答案明显是反直觉的,如果你是老大,你敢这样分金币,必死无疑。可是,推理过程却非常严谨,无懈可击,那么问题出在哪里呢?")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v('其实,在"海盗分赃"模型中,任何"分配者"想让自己的方案获得通过的关键是,**事先考虑清楚"对手"的分配方案是什么,**'),t("strong",[_._v("并用最小的代价获取最大收益")]),_._v(","),t("strong",[_._v('拉拢"对手"分配方案中最不得意的人们')]),_._v("。1号看起来最有可能喂鲨鱼,但他牢牢地把握住先发优势,结果不但消除了死亡威胁,还收益最大。而5号,看起来最安全,没有死亡的威胁,甚至还能坐收渔人之利,却因不得不看别人脸色行事而只能分得一小杯羹。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("不过,模型任意改变一个假设条件,最终结果都不一样。而现实世界远比模型复杂。"),t("strong",[_._v("因为假定所有人都理性,本身就是不理性的")]),_._v("。回到“海盗分金”的模型中,只要3号、4号或5号中有一个人偏离了绝对聪明的假设,海盗1号无论怎么分都可能会被扔到海里去了。所以,1号首先要考虑的就是他的海盗兄弟们的聪明和理性究竟靠得住靠不住,否则先分者必定倒霉。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("如果某人和一号本身不对眼,就想丢他喂鲨鱼。果真如此,1号自以为得意的方案岂不成了自掘坟墓。再就是俗话所说的“人心隔肚皮”。由于信息不对称,谎言和虚假承诺就大有用武之地,而阴谋也会像杂草般疯长,并借机获益。如果2号对3、4、5号大放烟幕弹,宣称对于1号所提出任何分配方案,他一定会再多加上一个金币给他们。这样,结果又当如何?")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("通常,现实中人人都有自认的公平标准,因而时常会嘟嚷:“"),t("strong",[_._v("谁动了我的奶酪?")]),_._v("”可以料想,一旦1号所提方案和其所想的不符,就会有人大闹。当大家都闹起来的时候,1号能拿着97枚金币毫发无损、镇定自若地走出去吗?最大的可能就是,海盗们会要求修改规则,然后重新分配。当然,大家也可以讲清楚下次再得100枚金币时,先由2号海盗来分…然后是3号……颇有点像美国总统选举,轮流主政。说白了,其实是民主形式下的分赃制。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("最可怕的是其他四人形成一个反1号的大联盟并制定出新规则:四人平分金币,将1号扔进大海。这就颇有点阿Q式的革命理想:高举平均主义的旗帜,将富人扔进死亡深渊。")]),_._v(" "),t("br"),_._v(" "),t("p",[_._v("最后,这里也提供一份代码实现,供有兴趣的同学参考(该代码我大概看了一下,但是因为时间的关系,没有跑单测进行验证,特此说明!)")]),_._v(" "),t("br"),_._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[_._v("以上代码输出:5人时分配方案:[97, 0, 1, 0, 2]\n")])]),_._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[_._v("1")]),t("br")])]),t("br"),_._v(" "),t("p",[_._v("看懂了吗?如果看懂了,这里提出一个问题:假如我们将"),t("strong",[_._v("人性")]),_._v("考虑在内,同时也进行"),t("strong",[_._v("理性")]),_._v("的分析,如果你是老大,又该如何提出这个方案呢?大家在留言区留下自己的回答吧!")])])}),[],!1,null,null,null);v.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/123.6bf94e7d.js b/learning/.vuepress/dist/assets/js/123.6bf94e7d.js deleted file mode 100644 index 65c630f4..00000000 --- a/learning/.vuepress/dist/assets/js/123.6bf94e7d.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[123],{1114:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("blockquote",[a("p",[s._v("今天为大家分享一道看起来**“高大上****”**的题目。")]),s._v(" "),a("p",[s._v("话不多说,直接看题吧。")])]),s._v(" "),a("h2",{attrs:{id:"_01、水分子的产生"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、水分子的产生"}},[s._v("#")]),s._v(" 01、水分子的产生")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("水分子的产生")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("现在有两种线程,氢 oxygen 和氧 hydrogen,你的目标是组织这两种线程来产生水分子。")])])])]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("氢和氧线程会被分别给予 releaseHydrogen 和 releaseOxygen 方法来允许它们突破屏障。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("这些线程应该三三成组突破屏障并能立即组合产生一个水分子。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("你必须保证产生一个水分子所需线程的结合必须发生在下一个水分子产生之前。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("换句话说:")]),s._v(" "),a("p",[s._v("如果一个氧线程到达屏障时没有氢线程到达,它必须等候直到两个氢线程到达。")]),s._v(" "),a("p",[s._v("如果一个氢线程到达屏障时没有其它线程到达,它必须等候直到一个氧线程和另一个氢线程到达。")]),s._v(" "),a("p",[s._v("书写满足这些限制条件的氢、氧线程同步代码。")]),s._v(" "),a("br"),s._v(" "),a("p",[a("strong",[s._v("示例 1:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('输入: "HOH"\n输出: "HHO"\n解释: "HOH" 和 "OHH" 依然都是有效解。\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("br"),s._v(" "),a("p",[a("strong",[s._v("示例 2:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('输入: "OOHHHH"\n输出: "HHOHHO"\n解释: "HOHHHO", "OHHHHO", "HHOHOH", "HOHHOH", "OHHHOH", "HHOOHH", "HOHOHH" 和 "OHHOHH" 依然都是有效解。\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("br"),s._v(" "),a("p",[s._v("限制条件:")]),s._v(" "),a("ul",[a("li",[s._v("输入字符串的总长将会是 3n, 1 ≤ n ≤ 50;")]),s._v(" "),a("li",[s._v("输入字符串中的 “H” 总数将会是 2n;")]),s._v(" "),a("li",[s._v("输入字符串中的 “O” 总数将会是 n。")])]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("代码模板:")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" H2O "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("H2O")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("hydrogen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Runnable")]),s._v(" releaseHydrogen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("InterruptedException")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// releaseHydrogen.run() outputs "H". Do not change or remove this line. releaseHydrogen.run(); ')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("oxygen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Runnable")]),s._v(" releaseOxygen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("InterruptedException")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// releaseOxygen.run() outputs "O". Do not change or remove this line.')]),s._v("\n releaseOxygen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h2",{attrs:{id:"_02、java分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、java分析"}},[s._v("#")]),s._v(" 02、JAVA分析")]),s._v(" "),a("p",[s._v("乍看之下,题目貌似很高大上,不少同学一听多线程直接就慌了神。我们一起分析一下。一个氧消耗两个氢,两个氢供给一个氧。我们只要可以模拟氢和氧的供给关系,就可以顺利进行求解。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("这里先介绍一下Java中的Semaphore:Semaphore是 synchronized 的加强版,作用是"),a("strong",[s._v("控制线程的并发数量")]),s._v("。可以通过 acquire 和 release 来进行类似 lock 和 unlock 的操作。")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//请求一个信号量,这时候信号量个数-1,当减少到0的时候,下一次acquire不会再执行,只有当执行一个release()的时候,信号量不为0的时候才可以继续执行acquire")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("acquire")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//释放一个信号量,这时候信号量个数+1,")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("release")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("p",[s._v("什么?听不懂!大白话就是叫做 Semaphore 的这个东东,可以控制同时有多少线程可以进去,比一般的锁要稍微高级那么一点点。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("由于题目中给的限制条件,已经明确说明了H是2n,O是n,所以我们不需要考虑无法构成水分子的情况。我们分别定义H和O的信号量,都初始化为2个信号量。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("在每一次产生O的过程中,都需要等待产生了两个H。")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("java"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("util"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("concurrent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Semaphore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" H2O "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("H2O")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("6")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Semaphore")]),s._v(" h "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Semaphore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Semaphore")]),s._v(" o "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Semaphore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("hydrogen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Runnable")]),s._v(" releaseHydrogen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("InterruptedException")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n h"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("acquire")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n releaseHydrogen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("release")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("oxygen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Runnable")]),s._v(" releaseOxygen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("InterruptedException")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("acquire")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n releaseOxygen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n h"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("release")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])]),a("h2",{attrs:{id:"_03、c-代码分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、c-代码分析"}},[s._v("#")]),s._v(" 03、C++代码分析")]),s._v(" "),a("p",[s._v("如果没有原生的信号量支持怎么办?其实也是一样的。我们可以通过锁来模拟信号量。这里加一个C++版本的实现。")]),s._v(" "),a("div",{staticClass:"language-c++ line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("class H2O { \nprivate: \n int countOxygen; \n pthread_mutex_t lockHy; \n pthread_mutex_t lockOx; \npublic: \n H2O() { \n pthread_mutex_init(&lockOx,NULL);        \n pthread_mutex_init(&lockHy,NULL);\n pthread_mutex_lock(&lockOx);\n countOxygen = 2;\n }\n void hydrogen(function releaseHydrogen) {\n pthread_mutex_lock(&lockHy);\n releaseHydrogen();\n countOxygen--;\n if(countOxygen > 0){\n pthread_mutex_unlock(&lockHy);\n }else{\n pthread_mutex_unlock(&lockOx);\n }\n }\n void oxygen(function releaseOxygen) {\n pthread_mutex_lock(&lockOx);\n releaseOxygen();\n countOxygen = 2;\n pthread_mutex_unlock(&lockHy);\n }\n};\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])]),a("h2",{attrs:{id:"_03、python代码分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、python代码分析"}},[s._v("#")]),s._v(" 03、Python代码分析")]),s._v(" "),a("p",[s._v("好吧,其他语言都有并发。但是我PY竟然连并发都没有(杠精勿扰,我知道有 threading 库可以用。并且里边也已经提供了现成的信号量可以用)这种情况下怎么办?")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("还是可以解决,我们可以用队列模拟进行实现")]),s._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("H2O")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" __init__"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" \n self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("h"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("o "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" hydrogen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" releaseHydrogen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Callable[[], None]'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("None")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("h"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("append"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("releaseHydrogen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("7")]),s._v("\n self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" oxygen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" releaseOxygen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Callable[[], None]'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("None")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("append"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("releaseOxygen"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("h"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("and")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("h"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("pop"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("h"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("pop"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("pop"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("h2",{attrs:{id:"_04、go语言版本"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_04、go语言版本"}},[s._v("#")]),s._v(" 04、GO语言版本")]),s._v(" "),a("p",[s._v("已经提供了PY,JAVA,C++的版本。对于GO而言,不管你是通过channel来模拟信号量的方式,还是参照PY的方式进行实现,我觉得应该都可以完成。")])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/124.2c04d5ed.js b/learning/.vuepress/dist/assets/js/124.2c04d5ed.js deleted file mode 100644 index 40ed5ec0..00000000 --- a/learning/.vuepress/dist/assets/js/124.2c04d5ed.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[124],{1113:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("blockquote",[a("p",[s._v("小浩算法改版了,大家看一下风格怎么样,还喜欢吗?所有的排版,绘图,文案,题解都是由小浩一人完成哦~")]),s._v(" "),a("p",[s._v("今天为大家分享一道关于**“救生艇****”**的题目。")]),s._v(" "),a("p",[s._v("话不多说,直接看题吧。")])]),s._v(" "),a("h2",{attrs:{id:"_01、题目示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("第881题:救生艇")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回载到每一个人所需的最小船数。(保证每个人都能被船载)。")])])])]),s._v(" "),a("p",[a("strong",[s._v("示例 1:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("输入:people = [1,2], limit = 3\n输出:1\n解释:1 艘船载 (1, 2)\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("br"),s._v(" "),a("p",[a("strong",[s._v("示例 2:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("输入:people = [3,2,2,1], limit = 3\n输出:3\n解释:3 艘船分别载 (1, 2), (2) 和 (3)\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("br"),s._v(" "),a("p",[a("strong",[s._v("示例 3:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("输入:people = [3,5,3,4], limit = 5\n输出:4\n解释:4 艘船分别载 (3), (3), (4), (5)\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("br"),s._v(" "),a("p",[a("strong",[s._v("提示:")])]),s._v(" "),a("ul",[a("li",[s._v("1 <= people.length <= 50000")]),s._v(" "),a("li",[s._v("1 <= people[i] <= limit <= 30000")])]),s._v(" "),a("h2",{attrs:{id:"_02、题目分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),a("p",[s._v("这不是一道算法题,这是一个脑筋急转弯。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("一个船最多可以装两个人,并且不能把船压垮。同时要求把这些人可以统统装下的最小船数。用脚趾头也可以想到,我们需要"),a("strong",[s._v("尽最大努力的去维持一个床上得有两个人")]),s._v("。。哦,不,船上。这是什么思想?Bingo,贪心。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("思路很简单:")]),s._v(" "),a("ol",[a("li",[s._v("我们首先需要让这些人"),a("strong",[s._v("根据体重进行排序。")])]),s._v(" "),a("li",[s._v("同时"),a("strong",[s._v("维护两个指针,每次让最重的一名上船,同时让最轻的也上船")]),s._v("。(因为最重的要么和最轻的一起上船。要么就无法配对,只能自己占用一艘船的资源)")])]),s._v(" "),a("h2",{attrs:{id:"_03、java示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、java示例"}},[s._v("#")]),s._v(" 03、JAVA示例")]),s._v(" "),a("p",[s._v("根据分析,得到代码:")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("numRescueBoats")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" people"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" limit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("people"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" people"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" ans "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ans"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("people"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" people"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" limit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n i"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n j"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" ans"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("h2",{attrs:{id:"_04、go示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_04、go示例"}},[s._v("#")]),s._v(" 04、GO示例")]),s._v(" "),a("p",[s._v("GO代码其实也一样:")]),s._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("numRescueBoats")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("people "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" limit "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n sort"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ints")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("people"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n ans :"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("people"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" j "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" people"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" people"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" limit "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n i"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n j"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n ans"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" ans\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("h2",{attrs:{id:"_05、题目扩展"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_05、题目扩展"}},[s._v("#")]),s._v(" 05、题目扩展")]),s._v(" "),a("p",[s._v("这里肯定马上就有细心的读者会问!为什么你每次是让最瘦的和最胖的来凑一对。而不是放弃掉这个最瘦的,去找一个逼近limit体重的人来乘船呢?这里要注意题目,"),a("strong",[s._v("因为题中已经告诉了, 一艘船仅能坐两人")]),s._v("。所以去找一个逼近limit体重的人是没有意义的。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("但是,这里并不妨碍我们将此题扩展进行思考。这里留下疑问,"),a("strong",[s._v("如果我们不对船上的人数进行限制")]),s._v(",那么应该如何来完成本题呢?大家可以尝试代码练习一下。")])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/125.dae9510e.js b/learning/.vuepress/dist/assets/js/125.dae9510e.js deleted file mode 100644 index 974c4f6a..00000000 --- a/learning/.vuepress/dist/assets/js/125.dae9510e.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[125],{1153:function(s,a,t){"use strict";t.r(a);var n=t(3),r=Object(n.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("p",[s._v("希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。")]),s._v(" "),t("p",[s._v("希尔排序是基于插入排序的以下两点性质而提出改进方法的:")]),s._v(" "),t("ul",[t("li",[s._v("插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;")]),s._v(" "),t("li",[s._v("但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;")])]),s._v(" "),t("p",[s._v("希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。")]),s._v(" "),t("h2",{attrs:{id:"_1-算法步骤"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-算法步骤"}},[s._v("#")]),s._v(" 1. 算法步骤")]),s._v(" "),t("ol",[t("li",[t("p",[s._v("选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;")])]),s._v(" "),t("li",[t("p",[s._v("按增量序列个数 k,对序列进行 k 趟排序;")])]),s._v(" "),t("li",[t("p",[s._v("每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。")])])]),s._v(" "),t("h2",{attrs:{id:"_2-javascript-代码实现"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-javascript-代码实现"}},[s._v("#")]),s._v(" 2. JavaScript 代码实现")]),s._v(" "),t("div",{staticClass:"language-js line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-js"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("shellSort")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("arr")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" len "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n temp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//动态定义间隔序列")]),s._v("\n gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Math"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" i "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n temp "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" j "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" temp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" temp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br")])]),t("h2",{attrs:{id:"_3-python-代码实现"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-python-代码实现"}},[s._v("#")]),s._v(" 3. Python 代码实现")]),s._v(" "),t("div",{staticClass:"language-python line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-python"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("shellSort")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" math\n gap"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" gap"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n temp "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n j "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("gap\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" j "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("and")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" temp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n j"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v("gap\n arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" temp\n gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" math"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("floor"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br")])]),t("h2",{attrs:{id:"_4-go-代码实现"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_4-go-代码实现"}},[s._v("#")]),s._v(" 4. Go 代码实现")]),s._v(" "),t("div",{staticClass:"language-go line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-go"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("shellSort")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\tlength "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\tgap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" length"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\tgap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" gap"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" length"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\ttemp "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\t\t\tj "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" i "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" gap\n\t\t\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" j "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" temp "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\t\tarr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\t\t\t\tj "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v(" gap\n\t\t\t"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t\t\tarr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" temp\n\t\t"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t\tgap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br")])]),t("h2",{attrs:{id:"_5-java-代码实现"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_5-java-代码实现"}},[s._v("#")]),s._v(" 5. Java 代码实现")]),s._v(" "),t("div",{staticClass:"language-java line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ShellSort")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IArraySort")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sourceArray"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Exception")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 对 arr 进行拷贝,不改变参数内容")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("copyOf")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sourceArray"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sourceArray"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" tmp "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("j "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" tmp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n j "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v(" gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" gap"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" tmp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Math")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("gap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" arr"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br")])]),t("h2",{attrs:{id:"_6-php-代码实现"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_6-php-代码实现"}},[s._v("#")]),s._v(" 6. PHP 代码实现")]),s._v(" "),t("div",{staticClass:"language-php line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("shellSort")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$temp")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("floor")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$len")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$temp")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$i")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$temp")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$j")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$gap")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$temp")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arr")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br")])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/126.b897c930.js b/learning/.vuepress/dist/assets/js/126.b897c930.js deleted file mode 100644 index c14dd9f9..00000000 --- a/learning/.vuepress/dist/assets/js/126.b897c930.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[126],{1156:function(t,e,n){"use strict";n.r(e);var s=n(3),l=Object(s.a)({},(function(){var t=this.$createElement,e=this._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("p",[this._v("这是一个彩蛋。")])])}),[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/127.3c1e0228.js b/learning/.vuepress/dist/assets/js/127.3c1e0228.js deleted file mode 100644 index eea4bebb..00000000 --- a/learning/.vuepress/dist/assets/js/127.3c1e0228.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[127],{355:function(n,w,o){}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/13.8b88dcbf.js b/learning/.vuepress/dist/assets/js/13.8b88dcbf.js deleted file mode 100644 index 78909745..00000000 --- a/learning/.vuepress/dist/assets/js/13.8b88dcbf.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{1102:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("昨天我们在“除了某个元素只出现一次以外,其余每个元素均出现二次”的条件下,通过使用“异或”的操作,找到了只出现一次的元素。那对于其余每个元素均出现三次的case,我们应该如何解决呢?一起来看下吧。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("看之前强烈建议复习昨天的文章:")]),t._v(" "),n("br"),t._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.8.位运算系列/learning/1.8/804.html"}},[t._v("只出现一次的数字(136)")])],1),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("这种通过改变题中条件,进而增加难度的方式,其实是出题者惯用的一种手段!")])]),t._v(" "),n("br"),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第137题:只出现一次的数字Ⅱ")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗?")])])])]),t._v(" "),n("p",[n("strong",[t._v("说明:")])]),t._v(" "),n("p",[t._v("你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [2,2,3,2]\n输出: 3\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [0,1,0,1,0,1,99]\n输出: 99\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("br"),t._v(" "),n("p",[n("strong",[t._v("PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没什么意思了。")])]),t._v(" "),n("h2",{attrs:{id:"_02、hashmap求解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、hashmap求解"}},[t._v("#")]),t._v(" 02、HashMap求解")]),t._v(" "),n("blockquote",[n("p",[t._v("很简单就能想到,说白了就是"),n("strong",[t._v("统计每个元素出现的次数,最终再返回次数为1的元素")]),t._v("。但是使用了额外空间。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("直接上代码:(go版本)")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("singleNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//如果是其他语言,请注意对应的判空操作! ")]),t._v("\n m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" v "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" v "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" k\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(726),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、数学方式"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、数学方式"}},[t._v("#")]),t._v(" 03、数学方式")]),t._v(" "),n("blockquote",[n("p",[t._v("这个题目曾经在Google很火~目前国内应该也有很多厂子会问到。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("原理:[A,A,A,B,B,B,C,C,C] 和 [A,A,A,B,B,B,C],差了两个C。即:")]),t._v(" "),n("p",[t._v("3×("),n("em",[t._v("a")]),t._v(" "),n("em",[t._v("b")]),t._v(" "),n("em",[t._v("c")]),t._v(")−("),n("em",[t._v("a")]),t._v(" "),n("em",[t._v("a")]),t._v(" "),n("em",[t._v("a")]),t._v(" "),n("em",[t._v("b")]),t._v(" "),n("em",[t._v("b")]),t._v(" "),n("em",[t._v("b")]),t._v(" "),n("em",[t._v("c")]),t._v(")=2"),n("em",[t._v("c")])]),t._v(" "),n("p",[t._v("也就是说,如果把"),n("strong",[t._v("原数组去重、再乘以3得到的值,刚好就是要找的元素的2倍")]),t._v("。举个例子:")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(727),alt:"PNG"}}),t._v(" "),n("p",[t._v("利用这个性质,进行求解:(python代码如下,这里要注意的是,使用int可能会因为超出界限报错)")]),t._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("singleNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("self"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" List"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("sum")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("set")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("sum")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(728),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_04、位运算"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、位运算"}},[t._v("#")]),t._v(" 04、位运算")]),t._v(" "),n("blockquote",[n("p",[t._v("对于“每个其余元素,均出现了二次”之所以可以使用“"),n("strong",[t._v("异或")]),t._v("”进行求解,原因是因为“异或”操作可以让两数相同归 0。那对于其余元素出现三次的,是不是只要可以让其三者相同归 0,就能达到我们的目的呢?")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("这个思想可能比较简单,但是要让大家理解,还是有一定难度。如果大家准备好了,可以开始往下看。我看过leetcode上的题解,很多都是直接扔出来一个公式,其实讲的我认为并不是特别的清楚。所以我打算先把本题退化到“每个其余元素,均出现二次”的case来进行分析一下。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("假如我们有 [21,21,26] 三个数,是下面这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(729),alt:"PNG"}}),t._v(" "),n("p",[t._v("回想一下,之所以能用“"),n("strong",[t._v("异或")]),t._v("”,其实我们是完成了一个 "),n("strong",[t._v("同一位上有2个1清零")]),t._v(" 的过程。上面的图看起来可能容易,如果是这样 (下图应为26^21):")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(730),alt:"PNG"}}),t._v(" "),n("p",[t._v("那对于“每个其余元素,均出现了三次”也是一样,如果我们可以完成 **一个同一位上的三个1清零的过程,**也就是 a ?a ?a = 0,问题则迎刃冰解。那因为各语言中都没有这样一个现成的方法可以使用,所以我们需要构造一个。(想象一下,位运算也是造出来的对不对?)")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(731),alt:"PNG"}}),t._v(" "),n("p",[t._v("如何构造,这里先说第一种方法(注意,到这里我们的问题已经转化成了定义一种 a ? a ? a = 0 的运算),观察一下“异或”运算:")]),t._v(" "),n("center",[t._v(" 1^1=0 ")]),t._v(" "),n("center",[t._v(" 1^0=1 ")]),t._v(" "),n("center",[t._v(" 0^1=1 ")]),t._v("\n是不是可以理解为,其实就是二进制的加法,然后砍掉进位呢?\n"),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(732),alt:"PNG"}}),t._v(" "),n("p",[n("strong",[t._v("砍掉进位的过程,是不是又可以理解为对 2 进行取模")]),t._v(",也就是取余。到了这里,问题已经非常非常明确了。那我们要完成一个 a ? a ? a = 0 的运算,是不是其实就是让其二进制的每一位数都相加,最后再对 3 进行一个取模的过程呢?(一样,如果要定义一个 a ? a ? a ? a = 0 的运算,那就最后对 4 进行取模就可以了)")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//go ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("singleNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n number"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//初始化每一位1的个数为0 ")]),t._v("\n number "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//通过右移i位的方式,计算每一位1的个数")]),t._v("\n number "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//最终将抵消后剩余的1放到对应的位数上")]),t._v("\n res "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("number"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" i\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])]),n("p",[t._v("如果对上面的代码不能理解,可以看看这个图,假设只有一个数 [21],我们通过不断右移的方式,获取其每一位上的1。当然,这里因为余数都是1,所以肯定都保留了下来,然后与 1 进行 “与”运算,最终再将其放入到对应的位数上。")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(733),alt:"PNG"}}),t._v(" "),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(734),alt:"PNG"}}),t._v(" "),n("p",[t._v("在上面的代码中,"),n("strong",[t._v("我们通过一个number,来记录每一位数出现的次数")]),t._v("。但是缺点是,我们记录了64位(Go语言中,int为32位以上)")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(735),alt:"PNG"}}),t._v(" "),n("p",[t._v("那如果我们可以同时对所有位进行计数,是不是就可以简化过程。因为我们的目的是把每一位与3取模进行运算,是不是就可以理解为其实是一个"),n("strong",[t._v("三进制")]),t._v("。如果大家听不懂三进制的话,可以简单理解为3次一循环,也就是 00 - 01 - 10 - 11。但是又因为对于 11 这种情况,我们需要砍掉(上面已经说过了,相当于 11 - 00 的转化),所以我们就只有3个状态,00 - 01 - 10,所以我们采用 a 和 b 来记录状态。其中的状态转移过程如下:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(736),alt:"PNG"}}),t._v(" "),n("p",[t._v("这里 a‘ 和 b’ 的意思代表着 a 和 b 下一次的状态。next 代表着下一个 bit 位对应的值。然后这是什么,不就是状态机嘛。。。我们通过 a 和 b 的状态变化,来完成次数统计。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("然后因为此图复杂,将其分别简化成 a 和 b 的卡诺图(卡诺图是逻辑函数的一种图形表示。两逻辑相邻项,合并为一项,保留相同变量,消去不同变量。先 b’ 后 a‘ )")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("next\\a,b")]),t._v(" "),n("th",[t._v("00")]),t._v(" "),n("th",[t._v("01")]),t._v(" "),n("th",[t._v("11")]),t._v(" "),n("th",[t._v("10")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("1")]),t._v(" "),n("td",[t._v("1")]),t._v(" "),n("td",[t._v("0")]),t._v(" "),n("td",[t._v("X")]),t._v(" "),n("td",[t._v("0")])]),t._v(" "),n("tr",[n("td",[t._v("0")]),t._v(" "),n("td",[t._v("0")]),t._v(" "),n("td",[t._v("1")]),t._v(" "),n("td",[t._v("X")]),t._v(" "),n("td",[t._v("0")])])])]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("next\\a,b")]),t._v(" "),n("th",[t._v("00")]),t._v(" "),n("th",[t._v("01")]),t._v(" "),n("th",[t._v("11")]),t._v(" "),n("th",[t._v("10")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("1")]),t._v(" "),n("td",[t._v("0")]),t._v(" "),n("td",[t._v("1")]),t._v(" "),n("td",[t._v("X")]),t._v(" "),n("td",[t._v("0")])]),t._v(" "),n("tr",[n("td",[t._v("0")]),t._v(" "),n("td",[t._v("0")]),t._v(" "),n("td",[t._v("0")]),t._v(" "),n("td",[t._v("X")]),t._v(" "),n("td",[t._v("1")])])])]),t._v(" "),n("p",[t._v("然后我们根据卡诺图(这个卡诺图其实并不难看。。如果学习一下话,还是挺简单的。)写出关系式:")]),t._v(" "),n("center",[t._v(" a` = (a &~ next) | (b & next) ")]),t._v(" "),n("center",[t._v(" b` = (~a & ~b & next) | (b & ~next) ")]),t._v("\n然后就是套公式:(Java代码,注意Go语言中是不天然支持 ~ 这种运算的)\n"),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("class Solution "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n public "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("singleNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" next "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" ~next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("~a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" ~b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" ~next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tmp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br")])]),n("p",[t._v("当然,其实题解还可以再进一步优化,其实就是化简上一步中的公式:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("class Solution "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n public "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("singleNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" next "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("^")]),t._v(" next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" ~a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("^")]),t._v(" next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" ~b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])]),n("p",[t._v("当然,这个解法就相当牛皮了,反正我第一次做肯定是想不到的。。。我看了一下,第一个给出这个解法的人,应该是一位国外的工程师(某扣上面有很多人其实都是把题解翻译过来的,当然我有时也会哈哈哈哈,我觉得这某种意义上讲也是一个好的现象,挺好)不过毕竟非原创,还是得说明一下!")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(737),alt:"PNG"}}),t._v(" "),n("br"),t._v(" "),n("p",[t._v("总之,今天的题目,有一定的难度!希望大家动脑动手动脚, 认真想想。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])],1)}),[],!1,null,null,null);s.default=e.exports},726:function(t,s,a){t.exports=a.p+"assets/img/1.4875b097.jpg"},727:function(t,s,a){t.exports=a.p+"assets/img/2.d061881a.jpg"},728:function(t,s,a){t.exports=a.p+"assets/img/3.34b978c4.jpg"},729:function(t,s,a){t.exports=a.p+"assets/img/4.aef60610.jpg"},730:function(t,s,a){t.exports=a.p+"assets/img/5.f6036c4a.jpg"},731:function(t,s,a){t.exports=a.p+"assets/img/6.b47733d0.jpg"},732:function(t,s,a){t.exports=a.p+"assets/img/7.84e9f7d6.jpg"},733:function(t,s,a){t.exports=a.p+"assets/img/8.e6a571aa.jpg"},734:function(t,s,a){t.exports=a.p+"assets/img/9.82e35d01.jpg"},735:function(t,s,a){t.exports=a.p+"assets/img/10.063d52f8.jpg"},736:function(t,s,a){t.exports=a.p+"assets/img/11.02c892eb.jpg"},737:function(t,s,a){t.exports=a.p+"assets/img/12.5a12e850.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/14.168d7583.js b/learning/.vuepress/dist/assets/js/14.168d7583.js deleted file mode 100644 index 630a3151..00000000 --- a/learning/.vuepress/dist/assets/js/14.168d7583.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{1124:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天为大家分享很出名的 LRU 算法,第一讲共包括 4 节。")]),t._v(" "),n("ul",[n("li",[t._v("LRU概述")]),t._v(" "),n("li",[t._v("LRU使用")]),t._v(" "),n("li",[t._v("LRU实现")]),t._v(" "),n("li",[t._v("Redis近LRU概述")])])]),t._v(" "),n("h2",{attrs:{id:"_01、lru-概述"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、lru-概述"}},[t._v("#")]),t._v(" 01、LRU 概述")]),t._v(" "),n("p",[t._v("LRU 是 Least Recently Used 的缩写,译为最近最少使用。它的理论基础为“"),n("strong",[t._v("最近使用的数据会在未来一段时期内仍然被使用,已经很久没有使用的数据大概率在未来很长一段时间仍然不会被使用")]),t._v("”由于该思想非常契合业务场景 ,并且可以解决很多实际开发中的问题,所以我们经常通过 LRU 的思想来作缓存,一般也将其称为"),n("strong",[t._v("LRU缓存机制")]),t._v("。因为恰好 leetcode 上有这道题,所以我干脆把题目贴这里。但是对于 LRU 而言,希望大家不要局限于本题(大家不用担心学不会,我希望能做一个全网最简单的版本,希望可以坚持看下去!)下面,我们一起学习一下。")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第146题:LRU缓存机制")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作:获取数据 get 和 写入数据 put 。")])])])]),t._v(" "),n("p",[t._v("获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1 。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("进阶:你是否可以在 O(1) 时间复杂度内完成这两种操作?")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("LRUCache cache = new LRUCache( 2 /* 缓存容量 */ );\ncache.put(1, 1);\ncache.put(2, 2);\ncache.get(1); // 返回 1\ncache.put(3, 3); // 该操作会使得密钥 2 作废\ncache.get(2); // 返回 -1 (未找到)\ncache.put(4, 4); // 该操作会使得密钥 1 作废\ncache.get(1); // 返回 -1 (未找到)\ncache.get(3); // 返回 3\ncache.get(4); // 返回 4\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("h2",{attrs:{id:"_02、lru-使用(解释)"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、lru-使用(解释)"}},[t._v("#")]),t._v(" 02、LRU 使用(解释)")]),t._v(" "),n("p",[t._v("由于我实在担心部分同学完全懵逼零基础,所以我把上面的LRUCache的示例解释一下。")]),t._v(" "),n("p",[t._v("第一步:我们申明一个 LRUCache ,长度为 2。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(834),alt:"PNG"}}),t._v(" "),n("p",[t._v("第二步:我们分别向 cache 里边 put(1,1) 和 put(2,2),这里因为最近使用的是 2( put 也算作使用)所以2在前,1 在后。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(835),alt:"PNG"}}),t._v(" "),n("p",[t._v("第三步:我们 get(1),也就是我们使用了 1,所以需要将 1 移到前面。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(836),alt:"PNG"}}),t._v(" "),n("p",[t._v("第四步:此时我们 put(3,3),因为 2 是最近最少使用的,所以我们需要将 2 进行作废。此时我们再 get(2),就会返回 -1 。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(837),alt:"PNG"}}),t._v(" "),n("p",[t._v("第五步:我们继续 put(4,4),同理我们将 1 作废。此时如果 get(1) ,也是返回 -1 。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(838),alt:"PNG"}}),t._v(" "),n("p",[t._v("第六步:此时我们 get(3) ,实际为调整 3 的位置。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(839),alt:"PNG"}}),t._v(" "),n("p",[t._v("第七步:同理,get(4),继续调整 4 的位置。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(840),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、lru-实现(层层剖析)"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、lru-实现(层层剖析)"}},[t._v("#")]),t._v(" 03、LRU 实现(层层剖析)")]),t._v(" "),n("blockquote",[n("p",[t._v("上面的图搞了我半小时,基本不是弱智的话,应该都能理解 LRU 的使用了。现在我们聊一下实现。LRU 一般来讲,我们是使用"),n("strong",[t._v("双向链表")]),t._v("实现。基本上在面试的时候,能写出来双向链表的实现,已经可以打 9 分了。但是这里我要强调的是,其实在项目中,并不绝对是这样。比如 Redis 源码里,LRU 的淘汰策略,就没有使用双向链表,而是使用一种模拟链表的方式。因为 Redis 大多是当内存在用(我知道可以持久化),如果再在内存中去维护一个链表,就平添了一些复杂性,同时也会多耗掉一些内存,后面我会单独拉出来 Redis 的源码给大家分析,这里不细说。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("回到题目,为什么我们要选择双向链表来实现呢?看看上面的使用步骤图,大家会发现,在整个 LRUCache 的使用中,我们需要"),n("strong",[t._v("频繁的去调整首尾元素的位置")]),t._v("。而双向链表的结构,刚好满足这一点(再啰嗦一下,前几天我刚好看了 groupcache 的源码,里边就是用双向链表来做的 LRU,当然它里边做了一些改进。groupcache 是memcache 作者实现的 go 版本,如果有 go 的读者,可以去看看源码,还是有一些收获。)")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("下面,我们采用 hashmap+ 双向链表的方式进行实现。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("首先,我们定义一个 LinkNode ,用以存储元素。因为是双向链表,自然我们要定义 pre 和 next。同时,我们需要存储下元素的 key 和 value 。val 大家应该都能理解,关键是为什么需要存储 key?举个例子,比如当整个cache 的元素满了,此时我们需要删除 map 中的数据,需要通过 LinkNode 中的 key 来进行查询,否则无法获取到 key。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" LinkNode "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("struct")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" val "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v("\n\tpre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LinkNode\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br")])]),n("p",[t._v("现在有了 LinkNode ,自然需要一个 Cache 来存储所有的 Node。我们定义 cap 为 cache 的长度,m 用来存储元素。head 和 tail 作为 Cache 的首尾。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" LRUCache "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("struct")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tm "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LinkNode\n\t"),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("cap")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v("\n\thead"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tail "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LinkNode\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br")])]),n("p",[t._v("接下来我们对整个 Cache 进行初始化。在初始化 head 和 tail 的时候将它们连接在一起。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("capacity "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" LRUCache "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\thead "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\ttail "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\thead"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tail\n\ttail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" capacity"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br")])]),n("p",[t._v("大概是这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(841),alt:"PNG"}}),t._v(" "),n("p",[t._v("现在我们已经完成了 Cache 的构造,剩下的就是添加它的 API 了。因为 Get 比较简单,我们先完成 Get 方法。这里分两种情况考虑,如果没有找到元素,我们返回 -1。如果元素存在,我们需要把这个元素移动到首位置上去。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("this "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n head "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("head \n cache "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("m \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next \n v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),t._v("\n v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next \n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head\n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("val\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])]),n("p",[t._v("大概就是下面这个样子(假若 2 是我们 get 的元素)")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(842),alt:"PNG"}}),t._v(" "),n("p",[t._v("我们很容易想到这个方法后面还会用到,所以将其抽出。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("this "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("AddNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\thead "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("head\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//从当前位置删除")]),t._v("\n\tnode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next\n\tnode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//移动到首位置")]),t._v("\n\tnode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next\n\thead"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node\n\tnode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head\n\thead"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("this "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tcache "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("m\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tthis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("MoveToHead")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("val\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br")])]),n("p",[t._v("现在我们开始完成 Put。实现 Put 时,有两种情况需要考虑。假若元素存在,其实相当于做一个 Get 操作,也是移动到最前面("),n("strong",[t._v("但是需要注意的是,这里多了一个更新值的步骤")]),t._v(")。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("this "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Put")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n head "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("head\n\ttail "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tail\n\tcache "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("m\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//假若元素存在")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//1.更新值")]),t._v("\n\t\tv"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("val "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" value\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//2.移动到最前")]),t._v("\n\t\tthis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("MoveToHead")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//TODO")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])]),n("p",[t._v("假若元素不存在,我们将其插入到元素首,并把该元素值放入到 map 中。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("this "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Put")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n head "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("head\n\ttail "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tail\n\tcache "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("m\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//存在")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//1.更新值")]),t._v("\n\t\tv"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("val "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" value\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//2.移动到最前")]),t._v("\n\t\tthis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("MoveToHead")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tv "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\tv"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next\n v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head\n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v\n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v\n cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("p",[t._v("但是我们漏掉了一种情况,**如果恰好此时Cache中元素满了,需要删掉最后的元素。**处理完毕,附上 Put 函数完整代码。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("this "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Put")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n head "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("head\n\ttail "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tail\n\tcache "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("m\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//存在")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//1.更新值")]),t._v("\n\t\tv"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("val "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" value\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//2.移动到最前")]),t._v("\n\t\tthis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("MoveToHead")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tv "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("cap")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//删除最后元素 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("delete")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tail\n tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next\n v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head\n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v\n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v\n cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br")])]),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(843),alt:"PNG"}}),t._v(" "),n("p",[t._v("最后,我们完成所有代码:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" LinkNode "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("struct")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" val "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v("\n\tpre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LinkNode\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" LRUCache "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("struct")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tm "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LinkNode\n\t"),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("cap")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v("\n\thead"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tail "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LinkNode\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("capacity "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" LRUCache "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\thead "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\ttail "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\thead"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tail\n\ttail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" capacity"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("this "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tcache "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("m\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tthis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("MoveToHead")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("val\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("this "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("AddNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\thead "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("head\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//从当前位置删除")]),t._v("\n\tnode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next\n\tnode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//移动到首位置")]),t._v("\n\tnode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next\n\thead"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node\n\tnode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head\n\thead"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("this "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("LRUCache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Put")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n head "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("head\n\ttail "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tail\n\tcache "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("m\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//存在")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" exist "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//1.更新值")]),t._v("\n\t\tv"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("val "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" value\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//2.移动到最前")]),t._v("\n\t\tthis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("MoveToHead")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tv "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("LinkNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("cap")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//删除最后元素 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("delete")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tail\n tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next\n v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head\n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pre "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v\n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v\n cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" v\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br"),n("span",{staticClass:"line-number"},[t._v("58")]),n("br"),n("span",{staticClass:"line-number"},[t._v("59")]),n("br"),n("span",{staticClass:"line-number"},[t._v("60")]),n("br"),n("span",{staticClass:"line-number"},[t._v("61")]),n("br"),n("span",{staticClass:"line-number"},[t._v("62")]),n("br"),n("span",{staticClass:"line-number"},[t._v("63")]),n("br"),n("span",{staticClass:"line-number"},[t._v("64")]),n("br")])]),n("p",[t._v("优化后:")]),t._v(" "),n("div",{staticClass:"language-g line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("type LinkNode struct {\n\tkey, val int\n\tpre, next *LinkNode\n}\n\ntype LRUCache struct {\n\tm map[int]*LinkNode\n\tcap int\n\thead, tail *LinkNode\n}\n\nfunc Constructor(capacity int) LRUCache {\n\thead := &LinkNode{0, 0, nil, nil}\n\ttail := &LinkNode{0, 0, nil, nil}\n\thead.next = tail\n\ttail.pre = head\n\treturn LRUCache{make(map[int]*LinkNode), capacity, head, tail}\n}\n\nfunc (this *LRUCache) Get(key int) int {\n\tcache := this.m\n\tif v, exist := cache[key]; exist {\n\t\tthis.MoveToHead(v)\n\t\treturn v.val\n\t} else {\n\t\treturn -1\n\t}\n}\n\nfunc (this *LRUCache) RemoveNode(node *LinkNode) {\n\tnode.pre.next = node.next\n\tnode.next.pre = node.pre\n}\n\nfunc (this *LRUCache) AddNode(node *LinkNode) {\n\thead := this.head\n\tnode.next = head.next\n\thead.next.pre = node\n\tnode.pre = head\n\thead.next = node\n}\n\nfunc (this *LRUCache) MoveToHead(node *LinkNode) {\n\tthis.RemoveNode(node)\n\tthis.AddNode(node)\n}\n\nfunc (this *LRUCache) Put(key int, value int) {\n\ttail := this.tail\n\tcache := this.m\n\tif v, exist := cache[key]; exist {\n\t\tv.val = value\n\t\tthis.MoveToHead(v)\n\t} else {\n\t\tv := &LinkNode{key, value, nil, nil}\n\t\tif len(cache) == this.cap {\n\t\t\tdelete(cache, tail.pre.key)\n\t\t\tthis.RemoveNode(tail.pre)\n\t\t}\n\t\tthis.AddNode(v)\n\t\tcache[key] = v\n\t}\n}\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br"),n("span",{staticClass:"line-number"},[t._v("58")]),n("br"),n("span",{staticClass:"line-number"},[t._v("59")]),n("br"),n("span",{staticClass:"line-number"},[t._v("60")]),n("br"),n("span",{staticClass:"line-number"},[t._v("61")]),n("br"),n("span",{staticClass:"line-number"},[t._v("62")]),n("br"),n("span",{staticClass:"line-number"},[t._v("63")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(844),alt:"PNG"}}),t._v(" "),n("p",[t._v("因为该算法过于重要,给一个 Java 版本的:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java版本")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" java"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Hashtable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\npublic class LRUCache "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n class DLinkedNode "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n LinkedNode prev"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n LinkedNode next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n private void "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("addNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("DLinkedNode node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("prev "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("prev "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n private void "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("removeNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("DLinkedNode node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n LinkedNode prev "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("prev"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n LinkedNode next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n prev"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("prev "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" prev"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n private void "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("moveToHead")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("DLinkedNode node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("removeNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("addNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n private DLinkedNode "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("popTail")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n DLinkedNode res "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("prev"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("removeNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n private Hashtable"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Integer"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" DLinkedNode"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" cache "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("new")]),t._v(" Hashtable"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Integer"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" DLinkedNode"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n private "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" size"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n private "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" capacity"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n private DLinkedNode head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n public "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("LRUCache")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" capacity"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n this"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("capacity "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" capacity"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n head "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("DLinkedNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n tail "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("DLinkedNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("prev "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n public "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n DLinkedNode node "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" null"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("moveToHead")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n public void "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("put")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n DLinkedNode node "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" null"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n DLinkedNode newNode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("DLinkedNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n newNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("key "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n newNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("put")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" newNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("addNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("newNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("size"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("size "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" capacity"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n DLinkedNode tail "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("popTail")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n cache"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("remove")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tail"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("size"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("moveToHead")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br"),n("span",{staticClass:"line-number"},[t._v("58")]),n("br"),n("span",{staticClass:"line-number"},[t._v("59")]),n("br"),n("span",{staticClass:"line-number"},[t._v("60")]),n("br"),n("span",{staticClass:"line-number"},[t._v("61")]),n("br"),n("span",{staticClass:"line-number"},[t._v("62")]),n("br"),n("span",{staticClass:"line-number"},[t._v("63")]),n("br"),n("span",{staticClass:"line-number"},[t._v("64")]),n("br"),n("span",{staticClass:"line-number"},[t._v("65")]),n("br"),n("span",{staticClass:"line-number"},[t._v("66")]),n("br"),n("span",{staticClass:"line-number"},[t._v("67")]),n("br"),n("span",{staticClass:"line-number"},[t._v("68")]),n("br"),n("span",{staticClass:"line-number"},[t._v("69")]),n("br"),n("span",{staticClass:"line-number"},[t._v("70")]),n("br"),n("span",{staticClass:"line-number"},[t._v("71")]),n("br"),n("span",{staticClass:"line-number"},[t._v("72")]),n("br"),n("span",{staticClass:"line-number"},[t._v("73")]),n("br"),n("span",{staticClass:"line-number"},[t._v("74")]),n("br"),n("span",{staticClass:"line-number"},[t._v("75")]),n("br"),n("span",{staticClass:"line-number"},[t._v("76")]),n("br"),n("span",{staticClass:"line-number"},[t._v("77")]),n("br"),n("span",{staticClass:"line-number"},[t._v("78")]),n("br"),n("span",{staticClass:"line-number"},[t._v("79")]),n("br")])]),n("h2",{attrs:{id:"_04、redis-近lru-介绍"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、redis-近lru-介绍"}},[t._v("#")]),t._v(" 04、Redis 近LRU 介绍")]),t._v(" "),n("blockquote",[n("p",[t._v("上文完成了咱们自己的 LRU 实现,现在现在聊一聊 Redis 中的近似 LRU 。由于"),n("strong",[t._v("真实LRU需要过多的内存(在数据量比较大时)")]),t._v(",所以 Redis 是使用一种随机抽样的方式,来实现一个近似 LRU 的效果。说白了,LRU 根本只是一个"),n("strong",[t._v("预测键访问顺序的模型")]),t._v("。")])]),t._v(" "),n("p",[t._v("在 Redis 中有一个参数,叫做 “maxmemory-samples”,是干嘛用的呢?")]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("# LRU and minimal TTL algorithms are not precise algorithms but approximated  # algorithms (in order to save memory), so you can tune it for speed or  # accuracy. For default Redis will check five keys and pick the one that was  # used less recently, you can change the sample size using the following  # configuration directive.  6#  # The default of 5 produces good enough results. 10 Approximates very closely  # true LRU but costs a bit more CPU. 3 is very fast but not very accurate.  # 10maxmemory-samples 5\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br")])]),n("p",[t._v("上面我们说过了,"),n("strong",[t._v("近似LRU是用随机抽样的方式来实现一个近似的LRU效果")]),t._v("。这个参数其实就是作者提供了一种方式,可以让我们人为干预样本数大小,将其设的越大,就越接近真实 LRU 的效果,当然也就意味着越耗内存。(初始值为 5 是作者默认的最佳)")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(845),alt:"PNG"}}),t._v(" "),n("p",[t._v("这个图解释一下,绿色的点是新增加的元素,深灰色的点是没有被删除的元素,浅灰色的是被删除的元素。最下面的这张图,是真实 LRU 的效果,第二张图是默认该参数为 5 的效果,可以看到浅灰色部分和真实的契合还是不错的。第一张图是将该参数设置为 10 的效果,已经基本接近真实 LRU 的效果了。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("今天基本就说到这里。那 Redis 中的近似 LRU 是如何实现的呢?因为时间的关系,我打算做到下一期的内容。最后,评论区留下你的想法吧!")])])}),[],!1,null,null,null);s.default=e.exports},834:function(t,s,a){t.exports=a.p+"assets/img/1.18f4e142.jpg"},835:function(t,s,a){t.exports=a.p+"assets/img/2.58e28193.png"},836:function(t,s,a){t.exports=a.p+"assets/img/3.575d3fba.png"},837:function(t,s,a){t.exports=a.p+"assets/img/4.79cdc876.png"},838:function(t,s,a){t.exports=a.p+"assets/img/5.606dbc80.png"},839:function(t,s,a){t.exports=a.p+"assets/img/6.c17fdc30.png"},840:function(t,s,a){t.exports=a.p+"assets/img/7.0d48a111.png"},841:function(t,s,a){t.exports=a.p+"assets/img/8.68ddf420.png"},842:function(t,s,a){t.exports=a.p+"assets/img/9.e544788a.jpeg"},843:function(t,s,a){t.exports=a.p+"assets/img/10.b01bb056.jpeg"},844:function(t,s,a){t.exports=a.p+"assets/img/11.62c59617.jpeg"},845:function(t,s,a){t.exports=a.p+"assets/img/12.b9283517.jpeg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/15.eb714af1.js b/learning/.vuepress/dist/assets/js/15.eb714af1.js deleted file mode 100644 index 26c5f11e..00000000 --- a/learning/.vuepress/dist/assets/js/15.eb714af1.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{1121:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天分享一道比较简单的题目,希望大家可以5分钟掌握!")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("最小的k个数")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:arr = [3,2,1], k = 2\n输出:[1,2] 或者 [2,1]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:arr = [0,1,2,1], k = 1\n输出:[0]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("限制:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("0 <= k <= arr.length <= 10000\n0 <= arr[i] <= 10000\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("h2",{attrs:{id:"_02、堆和大小顶堆"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、堆和大小顶堆"}},[t._v("#")]),t._v(" 02、堆和大小顶堆")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题出自《剑指offer》,是一道非常高频的题目。可以通过排序等多种方法求解。但是这里,我们使用较为经典的**大顶堆(大根堆)**解法进行求解。因为我知道有很多人可能一脸懵逼,所以,我们先复习一下大顶堆。")])]),t._v(" "),n("p",[t._v("首先复习一下"),n("strong",[t._v("堆")]),t._v(",堆(Heap)是计算机科学中一类特殊的数据结构的统称,我们通常是指一个可以被看做一棵"),n("strong",[t._v("完全二叉树")]),t._v("的数组对象。如果不记得什么是完全二叉树,可以复习这篇:")]),t._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.99.其他补充题目/1.4/407.html"}},[t._v("二叉树第七讲 - 完全二叉树(222)")])],1),t._v(" "),n("p",[t._v("堆的特性是"),n("strong",[t._v("父节点的值总是比其两个子节点的值大或小")]),t._v("。如果父节点比它的两个子节点的值都要大,我们叫做"),n("strong",[t._v("大顶堆")]),t._v("。如果父节点比它的两个子节点的值都要小,我们叫做"),n("strong",[t._v("小顶堆")]),t._v("。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(809),alt:"PNG"}}),t._v(" "),n("p",[t._v("我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(810),alt:"PNG"}}),t._v(" "),n("p",[t._v("大顶堆,满足以下公式:")]),t._v(" "),n("blockquote",[n("center",[t._v("arr[i] >= arr[2i 1] && arr[i] >= arr[2i 2]")])],1),t._v(" "),n("p",[t._v("小顶堆也一样:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(811),alt:"PNG"}}),t._v(" "),n("p",[t._v("小顶堆,满足以下公式:")]),t._v(" "),n("blockquote",[n("center",[t._v("arr[i] <= arr[2i 1] && arr[i] <= arr[2i 2]")])],1),t._v(" "),n("h2",{attrs:{id:"_03、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、题目分析"}},[t._v("#")]),t._v(" 03、题目分析")]),t._v(" "),n("blockquote",[n("p",[t._v("上面我们学习了大顶堆,现在考虑如何用大根堆进行求解。")])]),t._v(" "),n("p",[t._v("首先,我们创建一个大小为k的大顶堆。假如数组为[4,5,1,6,2,7,3,8],k=4。大概是下面这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(812),alt:"PNG"}}),t._v(" "),n("p",[t._v("我想肯定这里有不知道如何建堆的同学。记住:"),n("strong",[t._v("对于一个没有维护过的堆(完全二叉树),我们可以从其最后一个节点的父节点开始进行调整")]),t._v("。这个不需要死记硬背,其实就是一个层层调节的过程。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("从最后一个节点的父节点调整")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(813),alt:"PNG"}}),t._v(" "),n("p",[t._v("继续向上调整")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(814),alt:"PNG"}}),t._v(" "),n("p",[t._v("继续向上调整")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(815),alt:"PNG"}}),t._v(" "),n("p",[t._v("建堆 调整的代码大概就是这样:(翻Java牌子)")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//建堆。对于一个还没维护过的堆,从他的最后一个节点的父节点开始进行调整。")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("buildHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//最后一个节点 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" lastNode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//记住:父节点 = (i - 1) / 2 左节点 = 2 * i 1 右节点 = 2 * i 2; ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//最后一个节点的父节点 7")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" startHeapify "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("lastNode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("startHeapify "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//不断调整建堆的过程")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" startHeapify"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//调整大顶堆的过程")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//和当前节点的左右节点比较,如果节点中有更大的数,那么交换,并继续对交换后的节点进行维护")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//左右子节点")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" c1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//假定当前节点最大")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//如果左子节点比较大,更新max = c1;")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//如果右子节点比较大,更新max = c2;")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//如果最大的数不是节点i的话,那么heapify(nums, max),即调整节点i的子树。")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//递归处理")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br")])]),n("p",[t._v("然后我们从下标 k 继续开始依次遍历数组的剩余元素。"),n("strong",[t._v("如果元素小于堆顶元素,那么取出堆顶元素,将当前元素入堆")]),t._v("。在上面的示例中 ,因为2小于堆顶元素6,所以将2入堆。我们发现现在的完全二叉树不满足大顶堆,所以对其进行调整。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("调整前")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(816),alt:"PNG"}}),t._v(" "),n("p",[t._v("调整后")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(817),alt:"PNG"}}),t._v(" "),n("p",[t._v("继续重复上述步骤,依次将7,3,8入堆。这里因为7和8都大于堆顶元素5,所以只有3会入堆。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("调整前")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(818),alt:"PNG"}}),t._v(" "),n("p",[t._v("调整后")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(819),alt:"PNG"}}),t._v(" "),n("p",[t._v("最后得到的堆,就是我们想要的结果。由于堆的大小是 K,所以这里空间复杂度是O(K),时间复杂度是O(NlogK)。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("根据分析,完成代码:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLeastNumbers")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//对arr数组的前k个数建堆 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" heap "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("arraycopy")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" heap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("buildHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("heap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//对后面较小的树建堆")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" heap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n heap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("heap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//返回这个堆")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" heap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("buildHeap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" lastNode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" startHeapify "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("lastNode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("startHeapify "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" startHeapify"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" c1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("heapify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("swap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(820),alt:"PNG"}})])}),[],!1,null,null,null);s.default=r.exports},809:function(t,s,a){t.exports=a.p+"assets/img/1.71519116.jpg"},810:function(t,s,a){t.exports=a.p+"assets/img/2.da9ba16e.png"},811:function(t,s,a){t.exports=a.p+"assets/img/3.6c81b835.png"},812:function(t,s,a){t.exports=a.p+"assets/img/4.84cffc54.png"},813:function(t,s,a){t.exports=a.p+"assets/img/5.f0a35d44.png"},814:function(t,s,a){t.exports=a.p+"assets/img/6.1e7a6bde.jpg"},815:function(t,s,a){t.exports=a.p+"assets/img/7.dc3e1d79.jpg"},816:function(t,s,a){t.exports=a.p+"assets/img/8.fb3c4977.jpg"},817:function(t,s,a){t.exports=a.p+"assets/img/9.f04372f5.png"},818:function(t,s,a){t.exports=a.p+"assets/img/10.7645bc40.jpg"},819:function(t,s,a){t.exports=a.p+"assets/img/11.b8f438c1.jpg"},820:function(t,s){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/16.4350692d.js b/learning/.vuepress/dist/assets/js/16.4350692d.js deleted file mode 100644 index b2957930..00000000 --- a/learning/.vuepress/dist/assets/js/16.4350692d.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{1138:function(t,s,a){"use strict";a.r(s);var v=a(3),i=Object(v.a)({},(function(){var t=this,s=t.$createElement,v=t._self._c||s;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("blockquote",[v("p",[t._v("今天为大家分享一道“奇葩”面试题。")])]),t._v(" "),v("h2",{attrs:{id:"_01、加油站问题"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_01、加油站问题"}},[t._v("#")]),t._v(" 01、加油站问题")]),t._v(" "),v("blockquote",[v("p",[t._v("信心满满的去面试,面试突然问了这样一个让人瞬间懵逼的问题....")])]),t._v(" "),v("br"),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("问题:北京有多少加油站?")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("对的,你没看错,这就是原题。。。")])])])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("遇到这种“智障问题”怎么办?不要怕,直接给出答案!“截止到2019年,北京共有1063个加油站。”对,就是这么刚。直接答出来,让面试官懵逼!")]),t._v(" "),v("h2",{attrs:{id:"_02、费米估算"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_02、费米估算"}},[t._v("#")]),t._v(" 02、费米估算")]),t._v(" "),v("blockquote",[v("p",[t._v("上面的答案当然是玩笑。其实这道题,并没有那么玄乎,一起分析下。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("这道题目主要考察人的估算能力。而估算界,有一个估算大牛叫做费米。")]),t._v(" "),v("img",{attrs:{src:a(935),alt:"PNG"}}),t._v(" "),v("p",[t._v("这位大牛有多牛呢?据说第一颗原子弹正在试爆,费米随手把自己笔记本的一张纸撕成小碎片顺手一撒,碎纸随风飘落,在费米身后2米处落下。")]),t._v(" "),v("img",{attrs:{src:a(936),alt:"PNG"}}),t._v(" "),v("p",[t._v("费米根据这个数据,心算得出核爆量大约是一万吨TNT。这个数据和一些尖端的仪器设备花了数星期时间来分析波速、波压得出的数据基本一致。")]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("于是这种估算方法后来就被称为费米估算。")]),t._v(" "),v("h2",{attrs:{id:"_03、题目分析"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_03、题目分析"}},[t._v("#")]),t._v(" 03、题目分析")]),t._v(" "),v("blockquote",[v("p",[t._v("幸运的是,大师的估算方法并没有失传。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("费米估算,其实说白了就是将"),v("strong",[t._v("正确答案,转化为一系列估算变量的乘法")]),t._v("。首先要把变量选的准确,其次要把变量估的准确。")]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("回到本题,我们要分析的问题是:")]),t._v(" "),v("img",{attrs:{src:a(937),alt:"PNG"}}),t._v(" "),v("p",[t._v("那我们至少得有多少辆车吧?但是并不是所有的车,每天都会上路。所以准确的说我们需要知道每天上路的车有多少。")]),t._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:a(938),alt:"PNG"}}),t._v(" "),v("p",[t._v("但是是所有上路的车都需要加油吗?当然不是,所以我们还得改改:")]),t._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:a(939),alt:"PNG"}}),t._v(" "),v("p",[t._v("知道了每天上路需要加油的车辆数,我们得知道每个加油站可以满足多少辆车吧?")]),t._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:a(940),alt:"PNG"}}),t._v(" "),v("p",[t._v("那加油站用什么满足车?自然是油咯。")]),t._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:a(941),alt:"PNG"}}),t._v(" "),v("p",[t._v("问题来了,那我们如何知道每天上路需要加油的车辆数?是不是我们可以转化为 北京车辆总数 / 加油频次:")]),t._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:a(942),alt:"PNG"}}),t._v(" "),v("p",[t._v("这个加油频次,相信大家就很容易估算出来了。跑滴滴的一天一次油,正常开的话一周一次,开的少一点的话差不多半个月一次。")]),t._v(" "),v("p",[v("img",{staticStyle:{zoom:"50%"},attrs:{src:a(943),alt:"PNG"}}),v("img",{staticStyle:{zoom:"50%"},attrs:{src:a(944),alt:"PNG"}})]),t._v(" "),v("p",[t._v("① 每天上路需要加油的车辆数 ② 每个加油站的容量")]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("所以我们只要回答出上面两个参数,再给出计算公式。就可以很完美的解答本题了!")]),t._v(" "),v("h2",{attrs:{id:"_04、总结"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_04、总结"}},[t._v("#")]),t._v(" 04、总结")]),t._v(" "),v("blockquote",[v("p",[t._v("数学家的嘴,骗人的鬼。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("上面的费米估算大家应该都知道是个什么东东了。还有很多类似的题目“芝加哥的钢琴家数量”,“上海有多少滴滴”,“成都有多少家星巴克”这都是一类问题。")]),t._v(" "),v("img",{staticStyle:{zoom:"33%"},attrs:{src:a(945),alt:"PNG"}}),t._v(" "),v("p",[t._v("其实到这里就可以结束了,但是我还是想说“数学家的嘴,骗人的鬼”,有一个叫做德雷克的数学家,他用费米估算来解释自己单身的原因:")]),t._v(" "),v("br"),t._v(" "),v("ul",[v("li",[t._v("1、住在我附近的女性有多少?(伦敦:400万)")]),t._v(" "),v("li",[t._v("2、多少人有可能年龄上适合?(20%:80万)")]),t._v(" "),v("li",[t._v("3、多少人有可能是单身?(50%:40万)")]),t._v(" "),v("li",[t._v("4、多少人有可能拥有大学文凭?(26%:104000)")]),t._v(" "),v("li",[t._v("5、多少人有可能有魅力?(5%:5200)")]),t._v(" "),v("li",[t._v("6、多少人有可能觉得我有魅力?(5%:260)")]),t._v(" "),v("li",[t._v("7、多少人有可能和我合得来?(10%:26)")]),t._v(" "),v("li",[t._v("到最后,他愿意交往的女人,全世界只有26个。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("还专门发表了一篇论文,用数学大谈特谈自己没有女朋友的原因。")]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("然鹅。他在论文发表结束后,就马上结婚了。。哈哈哈哈哈,当然,这并不是说费米估算没有用,或许是估算错误吧!")]),t._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:a(946),alt:"PNG"}}),t._v(" "),v("p",[t._v("好了,基本就是这样了。周末写文不容易,求个转发,来个评论。感谢~")])])}),[],!1,null,null,null);s.default=i.exports},935:function(t,s,a){t.exports=a.p+"assets/img/1.84a19499.jpg"},936:function(t,s,a){t.exports=a.p+"assets/img/2.7985fafb.jpg"},937:function(t,s){t.exports="data:image/jpeg;base64,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"},938:function(t,s,a){t.exports=a.p+"assets/img/4.52846cf7.jpg"},939:function(t,s,a){t.exports=a.p+"assets/img/5.0bd26895.jpg"},940:function(t,s,a){t.exports=a.p+"assets/img/6.6209e333.jpg"},941:function(t,s,a){t.exports=a.p+"assets/img/7.3bd17b29.jpg"},942:function(t,s,a){t.exports=a.p+"assets/img/8.170082ec.jpg"},943:function(t,s,a){t.exports=a.p+"assets/img/9.ceb7e1fe.jpg"},944:function(t,s,a){t.exports=a.p+"assets/img/10.1e64ecfb.jpg"},945:function(t,s,a){t.exports=a.p+"assets/img/11.b3b5c2b3.jpg"},946:function(t,s,a){t.exports=a.p+"assets/img/12.8e7f1b16.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/17.b9e444cf.js b/learning/.vuepress/dist/assets/js/17.b9e444cf.js deleted file mode 100644 index 85a79fe1..00000000 --- a/learning/.vuepress/dist/assets/js/17.b9e444cf.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{1132:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天为大家分享一道FLAG和BAT都出现过的经典面试题。题目有一定难度,建议大家耐着性子看完!不要说没天赋看不懂。在这个浮躁到努力的人都很少的年代,还谈不上说天赋这件事。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题是非常好的一道题目,也是前面100道里最难的题目之一,相当经典!")])]),t._v(" "),n("br"),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第4题:寻找两个正序数组的中位数")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m n))。你可以假设 nums1 和 nums2 不会同时为空。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("nums1 = [1, 3]\nnums2 = [2]\n则中位数是 2.0\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("nums1 = [1, 2]\nnums2 = [3, 4]\n则中位数是 (2 3)/2 = 2.5\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("blockquote",[n("p",[t._v("中位数(Median)又称中值,统计学中的专有名词,是按顺序排列的一组数据中居于中间位置的数,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("题意还是比较简单的,没有什么需要额外补充。当然可以直接暴力求解,因为都是有序数组,直接进行合并,再对合并后的数组通过判断是否是偶数个,求出中位数。但是由于这种方法肯定是达不到O(log(n))的,所以我们直接略过。如果是为了练习code能力的小伙伴,下去可以自行试试。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("那如何保证时间复杂度在O(log(n))呢?这里有一个小技巧,"),n("strong",[t._v("一般如果题目要求时间复杂度在O(log(n)),大部分都是可以使用二分的思想来进行求解")]),t._v("。当然,本题的二分是有一点反直觉的,可能不是很容易想到,一起看下。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("首先,我们考虑一个问题,如果只有一个有序数组,我们需要找中位数,那肯定需要判断元素是奇数个还是偶数个,如果是奇数个那最中间的就是中位数,如果是偶数个的话,那就是最中间两个数的和除以2。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(883),alt:"PNG"}}),t._v(" "),n("p",[t._v("那如果是两个数组,也是一样的,我们先求出两个数组长度之和。如果为奇数,就找中间的那个数,也就是 "),n("strong",[t._v("(长度之和 1)/2")]),t._v(" 。如果为偶数,那就找 "),n("strong",[t._v("长度之和/2")]),t._v("。比如下面的 (9 5)/2 = 7,那我们最终就是"),n("strong",[t._v("找到排列第7位的值")]),t._v("。此时,问题其实已经转化为“"),n("strong",[t._v("找到两个数组中第k小的元素")]),t._v("”。找到了第7位之后,第8位我们已经知道了,然后第7位和第8位的和,除以2就是我们要找的中位数("),n("strong",[t._v("注意:这里的7和8你其实是不知道的,图中画出来,只是为了帮助理解")]),t._v(")")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(884),alt:"PNG"}}),t._v(" "),n("p",[t._v("现在的问题是,我们如何用二分的思想来找到中间排列第7位的数。这里有一种不太好想到的方式,"),n("strong",[t._v("是用删的方式")]),t._v(",因为**如果我们可以把多余的数排除掉,最终剩下的那个数,是不是就是我们要找的数?**对于上面的数组,我们可以先删掉 7/2=3 个数。那这里,可以选择删上面的,也可以选择删下面的。那这里因为 i=")]),t._v(" nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v('//计算出每次要比较的两个数的值,来决定 "删除"" 哪边的元素')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" mid1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("MAX_VALUE"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" mid2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("MAX_VALUE"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//通过递归的方式,来模拟删除掉前K/2个元素")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" mid2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findK")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findK")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(893),alt:"PNG"}})],1)}),[],!1,null,null,null);s.default=e.exports},883:function(t,s){t.exports="data:image/jpeg;base64,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"},884:function(t,s,a){t.exports=a.p+"assets/img/2.20c68c2c.jpg"},885:function(t,s,a){t.exports=a.p+"assets/img/3.df655fea.jpg"},886:function(t,s,a){t.exports=a.p+"assets/img/4.71b453f4.jpg"},887:function(t,s,a){t.exports=a.p+"assets/img/5.585e5236.jpg"},888:function(t,s,a){t.exports=a.p+"assets/img/6.dba384e6.jpg"},889:function(t,s,a){t.exports=a.p+"assets/img/7.a8ef541f.jpg"},890:function(t,s,a){t.exports=a.p+"assets/img/8.16885cbd.jpg"},891:function(t,s,a){t.exports=a.p+"assets/img/9.f90fe0ae.jpg"},892:function(t,s,a){t.exports=a.p+"assets/img/10.4c4c11dd.jpg"},893:function(t,s){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/18.777e7ada.js b/learning/.vuepress/dist/assets/js/18.777e7ada.js deleted file mode 100644 index 2d13680f..00000000 --- a/learning/.vuepress/dist/assets/js/18.777e7ada.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{1064:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v('在上一篇中,我们通过题目**“最长上升子序列” 以及 "最大子序和",'),n("strong",[t._v("学习了DP(动态规划)在")]),t._v("线性关系**中的分析方法。这种分析方法,也在运筹学中被称为“线性动态规划”,具体指的是 “目标函数为特定变量的线性函数,约束是这些变量的线性不等式或等式,目的是求目标函数的最大值或最小值”。这点大家作为了解即可,不需要死记,更不要生搬硬套!")]),t._v(" "),n("p",[t._v("在本节中,我们将继续分析一道略微区别于之前的题型,希望可以由此题与之前的题目进行对比论证,进而顺利求解!")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第120题:三角形最小路径和")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。")])])])]),t._v(" "),n("p",[n("strong",[t._v("例如,给定三角形:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("[\n [2],\n [3,4],\n [6,5,7],\n [4,1,8,3]\n]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br")])]),n("p",[t._v("则自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。")]),t._v(" "),n("blockquote",[n("p",[n("strong",[t._v("这道题有一定难度哦!如果没有思路请回顾上一篇的学习内容!")])]),t._v(" "),n("p",[n("strong",[t._v("不建议直接看题解!")])])]),t._v(" "),n("h2",{attrs:{id:"_02、题目图解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[t._v("#")]),t._v(" 02、题目图解")]),t._v(" "),n("p",[t._v("首先我们分析题目,要找的是**三角形最小路径和,**这是个啥意思呢?假设我们有一个三角形:[[2], [3,4], [6,5,7],")]),t._v(" "),n("p",[t._v("[4,1,8,3]]")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(520),alt:"PNG"}}),t._v(" "),n("p",[t._v("那从上到下的最小路径和就是2-3-5-1,等于11。")]),t._v(" "),n("p",[t._v("由于我们是使用数组来定义一个三角形,所以便于我们分析,我们将三角形稍微进行改动:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(521),alt:"PNG"}}),t._v(" "),n("p",[t._v("这样相当于我们将整个三角形进行了拉伸。这时候,我们根据题目中给出的条件:每一步只能移动到下一行中相邻")]),t._v(" "),n("p",[t._v("的结点上。其实也就等同于,"),n("strong",[t._v("每一步我们只能往下移动一格或者右下移动一格")]),t._v("。将其转化成代码,假如2所在的元")]),t._v(" "),n("p",[t._v("素位置为[0,0],那我们往下移动就只能移动到[1,0]或者[1,1]的位置上。假如5所在的位置为[2,1],同样也只能移动")]),t._v(" "),n("p",[t._v("到[3,1]和[3,2]的位置上。如下图所示:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(522),alt:"PNG"}}),t._v(" "),n("p",[t._v("题目明确了之后,现在我们开始进行分析。题目很明显是"),n("strong",[t._v("一个找最优解的问题,并且可以从子问题的最优解进")])]),t._v(" "),n("p",[n("strong",[t._v("行构建")]),t._v("。所以我们通过动态规划进行求解。首先,我们定义状态:")]),t._v(" "),n("blockquote",[n("center",[n("b",[t._v(" dp[i][j] : 表示包含第i行j列元素的最小路径和 ")])])],1),t._v(" "),n("p",[t._v("我们很容易想到可以自顶向下进行分析。并且,无论最后的路径是哪一条,它一定要经过最顶上的元素,即 [0,0]。所以我们需要对 dp[0][0] 进行初始化。")]),t._v(" "),n("blockquote",[n("center",[n("b",[t._v(" dp[0][0] = [0][0]位置所在的元素值 ")])])],1),t._v(" "),n("p",[t._v("继续分析,如果我们要求dp[i][j],那么其一定会从自己头顶上的两个元素移动而来。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(523),alt:"PNG"}}),t._v(" "),n("p",[t._v("如5这个位置的最小路径和,要么是从2-3-5而来,要么是从2-4-5而来。然后取两条路径和中较小的一个即可。进")]),t._v(" "),n("p",[t._v("而我们得到状态转移方程:")]),t._v(" "),n("blockquote",[n("center",[n("b",[t._v(" dp[i][j] = min(dp[i-1][j-1],dp[i-1][j]) + triangle[i][j] ")])])],1),t._v(" "),n("p",[t._v("但是,我们这里会遇到一个问题!除了最顶上的元素之外,")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(524),alt:"PNG"}}),t._v(" "),n("p",[n("strong",[t._v("最左边的元素只能从自己头顶而来")]),t._v("。(2-3-6-4)")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(525),alt:"PNG"}}),t._v(" "),n("p",[n("strong",[t._v("最右边的元素只能从自己左上角而来")]),t._v("。(2-4-7-3)")]),t._v(" "),n("p",[t._v("然后,我们观察发现,"),n("strong",[t._v("位于第2行的元素,都是特殊元素")]),t._v("("),n("strong",[t._v("因为都只能从[0,0]的元素走过来")]),t._v(")")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(526),alt:"PNG"}}),t._v(" "),n("p",[t._v("我们可以直接将其特殊处理,得到:")]),t._v(" "),n("blockquote",[n("center",[n("b",[t._v(" dp[1][0] = triangle[1][0] + triangle[0][0] ")])]),t._v(" "),n("center",[n("b",[t._v(" dp[1][1] = triangle[1][1] + triangle[0][0] ")])])],1),t._v(" "),n("br"),t._v(" "),n("p",[t._v("最后,我们只要找到"),n("strong",[t._v("最后一行元素中,路径和最小的一个")]),t._v(",就是我们的答案。即:")]),t._v(" "),n("blockquote",[n("center",[n("b",[t._v(" l:dp数组长度 ")])]),t._v(" "),n("center",[n("b",[t._v(" result = min(dp[l-1,0],dp[l-1,1],dp[l-1,2]....) ")])])],1),t._v(" "),n("p",[t._v("综上我们就分析完了,我们总共进行了4步:")]),t._v(" "),n("ol",[n("li",[t._v("定义状态")]),t._v(" "),n("li",[t._v("总结状态转移方程")]),t._v(" "),n("li",[t._v("分析状态转移方程不能满足的特殊情况。")]),t._v(" "),n("li",[t._v("得到最终解")])]),t._v(" "),n("h2",{attrs:{id:"_03、go语言示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[t._v("#")]),t._v(" 03、Go语言示例")]),t._v(" "),n("p",[t._v("根据以上分析,可以得到代码如下:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("minimumTotal")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tdp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" triangle "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" b\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" a\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br")])]),n("p",[t._v("运行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(527),alt:"PNG"}}),t._v(" "),n("p",[t._v("运行上面的代码,我们发现使用的内存过大。我们有没有什么办法可以压缩内存呢?通过观察我们发现,"),n("strong",[t._v("在我们")])]),t._v(" "),n("p",[n("strong",[t._v("自顶向下的过程中,其实我们只需要使用到上一层中已经累积计算完毕的数据,并且不会再次访问之前的元素数")])]),t._v(" "),n("p",[n("strong",[t._v("据")]),t._v("。绘制成图如下:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(528),alt:"PNG"}}),t._v(" "),n("p",[t._v("优化后的代码如下:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("minimumTotal")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\ttriangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\ttriangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\ttriangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\ttriangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\ttriangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\ttriangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" triangle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" b\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" a\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br")])]),n("p",[t._v("运行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(529),alt:"PNG"}})])}),[],!1,null,null,null);s.default=r.exports},520:function(t,s,a){t.exports=a.p+"assets/img/1.e9ab843e.png"},521:function(t,s,a){t.exports=a.p+"assets/img/2.a9bb6bb9.png"},522:function(t,s,a){t.exports=a.p+"assets/img/3.b24151b9.png"},523:function(t,s,a){t.exports=a.p+"assets/img/4.b941e37c.png"},524:function(t,s,a){t.exports=a.p+"assets/img/5.3aa639d9.png"},525:function(t,s,a){t.exports=a.p+"assets/img/6.61b74f5e.png"},526:function(t,s,a){t.exports=a.p+"assets/img/7.efb587cb.png"},527:function(t,s,a){t.exports=a.p+"assets/img/8.7a33313c.jpg"},528:function(t,s,a){t.exports=a.p+"assets/img/9.99919de2.png"},529:function(t,s,a){t.exports=a.p+"assets/img/10.cc9e7651.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/19.87dbe463.js b/learning/.vuepress/dist/assets/js/19.87dbe463.js deleted file mode 100644 index a5546518..00000000 --- a/learning/.vuepress/dist/assets/js/19.87dbe463.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{1140:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天是小浩算法“365刷题计划”第102天。每个人的起点和终点都是一样的,但过程却各不相同。我们无法主宰生死却可以选择如何让生命有意义。我们如何用算法来进行一场生命的游戏呢!")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("生命游戏,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。")])]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第289题:生命游戏")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。")])])])]),t._v(" "),n("p",[t._v("每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:")]),t._v(" "),n("br"),t._v(" "),n("ul",[n("li",[t._v("如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;")]),t._v(" "),n("li",[t._v("如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;")]),t._v(" "),n("li",[t._v("如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;")]),t._v(" "),n("li",[t._v("如果死细胞周围正好有三个活细胞,则该位置死细胞复活;")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("根据当前状态,写一个函数来计算面板上所有细胞的下一个(一次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("题目有点复杂,举例说明:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(952),alt:"PNG"}}),t._v(" "),n("p",[t._v("注意:"),n("strong",[t._v("面板上所有格子需要同时被更新")]),t._v(":你不能先更新某些格子,然后使用它们的更新后的值再更新其他格子。")]),t._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[t._v("#")]),t._v(" 02、题解分析")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题目的关键点是:"),n("strong",[t._v("面板上所有格子需要同时被更新")])])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("本题的复杂主要复杂在 4 个更新规则,所以我们需要先对 4 个规则进行掌握(我们仅对下面绿色标出的元素进行说明)")]),t._v(" "),n("br"),t._v(" "),n("ul",[n("li",[n("p",[t._v("R1:细胞数少于两个,则该位置"),n("strong",[t._v("活细胞")]),t._v("死亡")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(953),alt:"PNG"}})]),t._v(" "),n("li",[n("p",[t._v("R2:有两个或三个活细胞,则该位置"),n("strong",[t._v("活细胞")]),t._v("仍然存活")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(954),alt:"PNG"}})]),t._v(" "),n("li",[n("p",[t._v("R3:有超过三个活细胞,则该位置"),n("strong",[t._v("活细胞")]),t._v("死亡")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(955),alt:"PNG"}})]),t._v(" "),n("li",[n("p",[t._v("R4:有三个活细胞,则该位置"),n("strong",[t._v("死细胞")]),t._v("复活")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(956),alt:"PNG"}})])]),t._v(" "),n("p",[t._v("四个规则理解起来并不复杂,现在考虑如何解决问题。最自然的想法是:一个个的更新细胞状态。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("但是这里我们会遇到一个问题:假设你每次更新完毕后,都把更新后的结果填入数组。那么当前轮其他格子的更新就会引用到你已经更新的结果。啥意思呢:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(957),alt:"PNG"}}),t._v(" "),n("p",[t._v("比如上面这个就是"),n("strong",[t._v("错误")]),t._v("的:我们先依据规则4更新了绿色框处的状态,此时蓝色框色周围同样满足规则4。"),n("strong",[t._v("已更新细胞的状态会影响到周围其他还未更新细胞状态的计算")]),t._v("。这明显不是我们想要的!")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(958),alt:"PNG"}}),t._v(" "),n("p",[t._v("那我们最简单的思路:是不是只要我们能一直获取原始数组的数据,不就可以保证更新一直正确了吗!至于在哪里,其实不管是copy一个数组,还是说用hashmap存一下数值其实都ok。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("因为这种思路相对比较简单,我就直接上 leetcode 官方题解的代码了:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("gameOfLife")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" neighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" rows "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" cols "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 创建复制数组 copyBoard")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" copyBoard "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("rows"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("cols"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 从原数组复制一份到 copyBoard 中")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" row "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" row "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" rows"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" row"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" col "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" col "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" cols"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" col"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n copyBoard"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("row"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("col"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("row"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("col"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 遍历面板每一个格子里的细胞")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" row "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" row "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" rows"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" row"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" col "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" col "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" cols"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" col"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 对于每一个细胞统计其八个相邻位置里的活细胞数量")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("neighbors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" neighbors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" r "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("row "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" neighbors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("col "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" neighbors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 查看相邻的细胞是否是活细胞")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("r "),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v(" rows "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" r "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c "),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v(" cols "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("copyBoard"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 规则 1 或规则 3 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("copyBoard"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("row"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("col"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("row"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("col"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 规则 4")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("copyBoard"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("row"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("col"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("row"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("col"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br")])]),n("p",[t._v("然后有意思的事情发生了,大神之所以是大神,就是大神的思路和普通人不一样。大神说,你这种方法可以是可以,但是占用了新的空间。")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("你不就想既可以保存原数组的状态,还可以更新新的状态吗?这些统统都可以在原有数组上搞")]),t._v("。具体怎么搞呢?")]),t._v(" "),n("br"),t._v(" "),n("ul",[n("li",[t._v("原来的 0 和 1 不就是代表死和生吗?但是你要更新新的状态,无非就是从生->死,从死->生。那我们加个状态 2,代表 生->死,加个状态 3 表示从 死>生。")]),t._v(" "),n("li",[t._v("对于一个节点来说,如果它周边的点是 1 或者 2,就说明该点上一轮是活的。")]),t._v(" "),n("li",[t._v("整体策略是完成 原始状态->过渡状态->真实状态 的过程。")]),t._v(" "),n("li",[t._v("过渡状态 到 真实状态,代码就是把 0 和 2 变回 0,1 和 3 变回1的过程。用模只是代码技巧。")]),t._v(" "),n("li",[t._v("策略实现的第一步是先找到当前节点周围的存活节点数。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("代码大概就是这样:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//JAVA")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("gameOfLife")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 原始状态 -> 过渡状态 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 判断上边 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 判断左边 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 判断下边 ")]),t._v("\n \t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n \tliveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 判断右边 ")]),t._v("\n \t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n \tliveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 判断左上角 ")]),t._v("\n \t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n \tliveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t \t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//判断右下角 ")]),t._v("\n \t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n \tliveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 判断右上角 ")]),t._v("\n \t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n \tliveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 判断左下角 ")]),t._v("\n \t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n \tliveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 根据周边存活数量更新当前点,结果是 0 和 1 的情况不用更新 ")]),t._v("\n \t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n \tboard"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" liveNeighbors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 过渡状态 -> 真实状态 ")]),t._v("\n \t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n \tboard"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" board"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n \t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(959),alt:"PNG"}}),t._v(" "),n("p",[t._v("细心的读者也许会想到,这不就是卡诺图吗?是的。在大多数的矩阵状态变化类题目中,卡诺图、状态机 等都是一些常用的技巧。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("一般的通用解法为:")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("1、大部分都是遍历两次矩阵,第一遍引入中间值(中间状态),存储一些原矩阵不包含的额外信息。")]),t._v(" "),n("p",[t._v("2、通过 原始矩阵->过渡矩阵->真实矩阵 的策略,在结尾处将中间状态置成真实状态。")]),t._v(" "),n("p",[t._v("3、当遍历到某个位置时,需要查看它周边的位置,此时如果每一个周围的位置都手写,然后再判断是否越界,就很麻烦。一般用一个数组,保存向周边位置变化的坐标偏移值。")]),t._v(" "),n("p",[t._v("4、如果是 0 和 1 的状态置换,可以使用位运算来秀操作。如果涉及状态过多,考虑是否可以简化状态。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("总之:这是一道相对比较经典的题目,如果大家有兴趣,大家可以练习一下 第73题 矩阵置零,也是类似的解法。")]),t._v(" "),n("h2",{attrs:{id:"_03、每日算法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、每日算法"}},[t._v("#")]),t._v(" 03、每日算法")]),t._v(" "),n("blockquote",[n("p",[t._v("宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。")])]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(960),alt:"PNG"}}),t._v(" "),n("img",{attrs:{src:a(961),alt:"PNG"}}),t._v(" "),n("br"),t._v(" "),n("p",[t._v("今天的题目到这里就结束了,你学会了吗?快来评论区留下你的想法吧!")])])}),[],!1,null,null,null);s.default=r.exports},952:function(t,s,a){t.exports=a.p+"assets/img/1.f680c845.jpg"},953:function(t,s){t.exports="data:image/jpeg;base64,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"},954:function(t,s){t.exports="data:image/jpeg;base64,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"},955:function(t,s){t.exports="data:image/jpeg;base64,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"},956:function(t,s){t.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAi0AAADcCAMAAACLZmHVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABoVBMVEX8/Pz5+fnu7u7////w8PAmJiYkJCQGBgYFBQUcHBy/v78AAAC0tLTo6Oi9vb3/871zGAAAgsb///fGgjnWmloYAAD//+/Ojkr347V7QRgYXZy1llL//8aEAAAAACFSisbv///nplKMVYy95//v7+/f398/Pz9gYGBvmFdznFt1nl01Qi4JCQmvvKiCs2YgLRkODg4DAwOntKDA27iPu3eLmISzs7MMDAwPDw9/f3/V6NTf7NgQEBCPj4/d6tbIwJBuWC8cAAAcM0RZhZ3B5NTV3Z1gFgAAdqW5l0sUAAAcMzc3Py8UO26l3dTV6M2ldi/OuW4wAAAAFj51ucfV2bKCVRQpcqXO6NSzjEvV6MeRWABEl8AAAD6Cx9SsgT7V0pBLAAAAAFmX2dSldhQ3jLnOz5ZnOxQUVYKXiETVsWYAP4K56NTBm0sAYJbI6NTV6KVuAAAAABtEfqXBl0QAap3VtW4ALHSs6NR1TXSe0tSsgSnVx4I3AAAAAG6l6NSldgDVz4lEAAAASonV2ZZZAABEk7kAAC9npsAUap0UKDfU4c1AqI/aAAAAAWJLR0QDEQxM8gAAAAlwSFlzAAAOxAAADsQBlSsOGwAAB4pJREFUeNrt3PlbE1cUxnFMwmIuoqK44k4ppSVtlS4Mltau0lW7a/e9dtG2dt/3xb+6TwIoSS73Ocmcy8yc+d5f5DlPeDnn8HECYZ4MDDTPli0DnlPx1LyPlBfJLHZmtXlW/+k4NU/N+0h5kcxCZ6KFTHkmWsiUZ6KFTHkmWsiUZ6KFTHkmWsiUZ6KFTHkmWsiUZ6KFTHkmWsiUZ6KFTHkmWsiUZ6KFTHkmWsiUZ6KFTHkmWsiUZ6KFTHkmWsiUZwa0DA4Nqp/hka36oUP1QnwXDOxzoNY8lUqt+wy5opzR7ua9E8mLtW2pPt3qPkPXFldXP8MRMgddQa4txd9nWEtV+wxHyCyQFvXZN3mfaEGLpE+0BIpo8U6EFrRI+kRLoIgW70RoQYukT7QEimjxToQWtEj6REugiBbvRGhBi6RPtASKaPFOhBa0SPpES6CIFu9EaEGLpE+0BIpo8U6EFrRI+kRLoIgW70RoQYukz1UtG7/LbnGmGyvEuxab2aft6dCits/WA6xeOfsu8kzknQgtaJH0iZZAES3eidCCFkmfaAkU0eKdCC1okfSJlkARLd6J0IIWSZ9oCRTR4p0ILWiR9ImWQBEt3onQghZJn2gJFNHinUhHy/YdO9WnE2ca1JLXfapoGd/l1KeTZ9rTktt9amgZ3z2hPl0Pmea05HefClr27J1w2tP1kmlNS473mV7Lvv3uwEHl6XrKNKYlz/tMrWXy0OEjR4/pTtdbpi0tud5n6vtIJ4+fqFa1p+sp09Z9uQXYZ9q7jpWn6y3TlpZ877P1gLSvD2Q8naVnot5m3+R9ogUtkj7REiiixTsRWtAi6RMtgSJavBOhBS2SPtESKKLFOxFa0CLpEy2BIlq8E6EFLZI+udMyUOROS+9EaEGLpE+0BIpo8U6EFrRI+kRLoIgW70RoQYukT7QEimjxToQWtEj6REugiBbvRDr3kWY8nbn7cvO9T9vToUVtn60HWL1y9l3kmcg7EVrQIukTLYEiWrwToQUtkj7REiiixTsRWtAi6RMtgSJavBOhBS2SPtESKKLFOxFa0CLpEy2BYmotUzfJ+kx50KI4Xd/F9NeW6Zs7vRjYJ1oiaak71+HFwD7REuvnlmnX4cXAPtESS0vduXYvBvaJlmi/E027di8G9omWaFpWLi43vBjYJ1rivd4y7dq8GNgnWuJpuX5xWfFiYJ8BLcNuWP3MzNwyq35mbh1UP0MaIbe59V5GCrPPuQ211JqnUql1nxGnf2YaMc7tETpVP3fcWZh9nuzGsCIkcG3Z6urqZ7ZxSv3MN+7q/kJjY/U0xfpoqk9fKd59z41v670LU8XZ58bXlo21xHienW2cSrTPfGNxo+n6Lqr83LKw3oqJfaIlmpap0+utmNgnWqJpWWizYmKfaImlZeXSct2KiX2iJZaWhXYrJvaJlkhapk63WzGxT7RE0rLQYcXEPtESSct9U51FA/tES6Hv4kYLWnK7T7SgBS1oQQtast0nWtCCFrSgBS3Z7hMtaEELWqJo2dx3A44z3VJp3105k33ang4tavtsfVGrV86+izwTeSdCC1rQgha0oCXbfaIFLWhBC1rQku0+0YIWtKAFLWjJdp9oQQta0IIWtGS7Tx0t23fs1J3u/gfOuAcferisWtT3mSTJI48+lg8t47uc7nRnl93jT5xxTz5VTi3q+0yS5OlnXD60jO+e0J3u3Plnn0uS519wL75URi3q+2xieXk5H1r27J1wqtNduOheSVrXzldfK6EW9X02V/r6ssuFln373YGDqtO98eZbb7c+eMe9Wz4t+vtMkvfedx98mActk4cOHzl6THW6S+6jj1sffOI+vVw2LRH2mVz57PMvLl/V0JL2PtLJ4yeqVd3prrovV35e+cp9/Y1kOkv35UbYZ3Ll2++aWxVriXwXt+5036/N9cOPP/1cNi0R9rn2f1BBS+uLpn19QHe6X9bm+vU3mRZLz0QR9tmzlsivzqFFUERLlOl6fiZCS4m1rPspd/WXI7Sk2adtLZfc7+X9DTrCPm1r+ePPMr86p79P21ouXHR/JeV95R8tvU137vzf/7T+qvhvKf+qiJbepju77P4r8R0LaOltupLfDWVbi/hwp2Wh94kWtKAFLWhBS7b7RAta0IIWtKAl232iBS1oQUsULSr3kWY8nbn7cvO9T9vToUVtn60vavXK2XeRZyLvRGhBC1rQgha0ZLtPtKAFLWhBC1qy3Sda0IIWtKAFLdnuEy1oQQta0IKWbPeJFrSgBS1oQUu2+0QLWtCCFrSgJdt9BrUMqp/Zxrz+KYyWwu9zoNY8lUqt+ww5/TPTiHGudTfvnUherG1L9elW9xm4ttRH691nbCxVce7k3GLXWVpaTFNcvFaMa4uBfQa0xNgYmYXORAuZ8ky0kCnPRAuZ8ky0kCnPRAuZ8ky0kCnPRAuZ8ky0kCnPRAuZ8ky0kCnPRAuZ8ky0kCnPRAuZ8ky0kCnPRAuZ8ky0kCnPRAuZ8sxNfodhMg1k5qcTMnOdmZurHJn5z0QLmfJMtJApz0QLmfJMtJApz0QLmfJMtJApz0QLmfJMtJApz/wfa4hQ0+GyhKAAAAAASUVORK5CYII="},957:function(t,s,a){t.exports=a.p+"assets/img/6.389dadc8.jpg"},958:function(t,s,a){t.exports=a.p+"assets/img/7.662c3152.jpg"},959:function(t,s){t.exports="data:image/jpeg;base64,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"},960:function(t,s,a){t.exports=a.p+"assets/img/9.72fd97d3.gif"},961:function(t,s,a){t.exports=a.p+"assets/img/10.170a7f3c.gif"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/20.1b1ce662.js b/learning/.vuepress/dist/assets/js/20.1b1ce662.js deleted file mode 100644 index 66034121..00000000 --- a/learning/.vuepress/dist/assets/js/20.1b1ce662.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{1080:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("在上一篇中,我们学习了解了"),n("strong",[t._v("平衡二叉树")]),t._v(",并且利用DFS进行了验证。在本节中,我们将继续学习"),n("strong",[t._v("完全二叉树")]),t._v("的相关内容。首先了解一下什么是完全二叉树。")])]),t._v(" "),n("h2",{attrs:{id:"_01、完全二叉树"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、完全二叉树"}},[t._v("#")]),t._v(" 01、完全二叉树")]),t._v(" "),n("p",[t._v("完全二叉树由满二叉树引出,先来了解一下什么是满二叉树:")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("如果"),n("strong",[t._v("二叉树中除了叶子结点,每个结点的度都为 2")]),t._v(",则此二叉树称为"),n("strong",[t._v("满二叉树")]),t._v("。("),n("strong",[t._v("二叉树的度")]),t._v("代表**某个结点的孩子或者说直接后继的个数。**对于二叉树而言,1度是只有一个孩子或者说单子树,2度是有两个孩子或者说左右子树都有。)")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("比如下面这颗:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(636),alt:"img"}}),t._v(" "),n("p",[t._v("那什么又是完全二叉树呢:")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("如果"),n("strong",[t._v("二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布")]),t._v(",则此二叉树被称为"),n("strong",[t._v("完全二叉树")]),t._v("。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("比如下面这颗:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(637),alt:"img"}}),t._v(" "),n("p",[t._v("而这颗就不是:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(638),alt:"img"}}),t._v(" "),n("p",[t._v("熟悉了概念,我们还是一起来看题目吧。")]),t._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第222题:完全二叉树的节点个数")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给出一个完全二叉树,求出该树的节点个数。")])])])]),t._v(" "),n("p",[n("strong",[t._v("说明:")])]),t._v(" "),n("p",[t._v("完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: \n 1\n / \\\n 2 3\n / \\ /\n4 5 6\n\n输出: 6\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br")])]),n("h2",{attrs:{id:"_03、递归求解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、递归求解"}},[t._v("#")]),t._v(" 03、递归求解")]),t._v(" "),n("p",[t._v("首先分析题目,我们很容易可以想到通过递归,来求解节点个数。")]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("func countNodes(root *TreeNode) int {\n if root != nil {\n return 1 + countNodes(root.Right) + countNodes(root.Left)\n }\n return 1 + countNodes(root.Right) + countNodes(root.Left)\n}\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(639),alt:"img"}}),t._v(" "),n("p",[t._v("但是很明显,出题者肯定不是要这种答案。因为这种答案和完全二叉树一毛钱关系都没有。所以我们继续思考。")]),t._v(" "),n("h2",{attrs:{id:"_04、经典解法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、经典解法"}},[t._v("#")]),t._v(" 04、经典解法")]),t._v(" "),n("p",[t._v("由于题中已经告诉我们这是一颗完全二叉树,我们又已知了完全二叉树除了最后一层,其他层都是满的,并且最后一层的节点全部靠向了左边。那我们可以想到,可以将该完全二叉树可以分割成"),n("strong",[t._v("若干满二叉树和完全二叉树")]),t._v(","),n("strong",[t._v("满二叉树直接根据层高h计算出节点为2^h-1,"),n("strong",[t._v("然后")]),t._v("继续计算子树中完全二叉树节点")]),t._v("。那如何分割成若干满二叉树和完全二叉树呢?"),n("strong",[t._v("对任意一个子树,遍历其左子树层高left,右子树层高right,相等左子树则是满二叉树,否则右子树是满二叉树")]),t._v("。这里可能不容易理解,我们看图。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("假如我们有树如下:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(640),alt:"img"}}),t._v(" "),n("p",[t._v("我们看到根节点的左右子树高度都为3,那么说明左子树是一颗满二叉树。因为节点已经填充到右子树了,左子树必定已经填满了。所以左子树的节点总数我们可以直接得到,是2^left - 1,加上当前这个root节点,则正好是2^3,即 8。然后只需要再对右子树进行递归统计即可。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(641),alt:"img"}}),t._v(" "),n("p",[t._v("那假如我们的树是这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(642),alt:"img"}}),t._v(" "),n("p",[t._v("我们看到左子树高度为3,右子树高度为2。说明此时最后一层不满,但倒数第二层已经满了,可以直接得到右子树的节点个数。同理,右子树节点+root节点,总数为2^right,即2^2。再对左子树进行递归查找。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(643),alt:"img"}}),t._v(" "),n("p",[t._v("根据分析,得出代码:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("countNodes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TreeNode")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("countLevel")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("countLevel")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("countNodes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("countNodes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("countLevel")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TreeNode")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" level "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n level"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n root "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" level"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br")])]),n("p",[t._v("运行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(644),alt:"img"}})])}),[],!1,null,null,null);s.default=e.exports},636:function(t,s,a){t.exports=a.p+"assets/img/1.d12167e7.jpg"},637:function(t,s,a){t.exports=a.p+"assets/img/2.e5a6e037.jpg"},638:function(t,s){t.exports="data:image/jpeg;base64,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"},639:function(t,s,a){t.exports=a.p+"assets/img/4.3662f31c.jpg"},640:function(t,s,a){t.exports=a.p+"assets/img/5.b6280d8e.jpg"},641:function(t,s,a){t.exports=a.p+"assets/img/6.027b3f47.jpg"},642:function(t,s,a){t.exports=a.p+"assets/img/7.13aa55b6.jpg"},643:function(t,s,a){t.exports=a.p+"assets/img/8.ec06de5a.jpg"},644:function(t,s,a){t.exports=a.p+"assets/img/9.730e40a3.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/21.5330b659.js b/learning/.vuepress/dist/assets/js/21.5330b659.js deleted file mode 100644 index bc3c82aa..00000000 --- a/learning/.vuepress/dist/assets/js/21.5330b659.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{1142:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天是小浩算法 “365刷题计划” 第105天。这是昨天一个同学面试快手被问到的算法题,很不幸的是他被挂掉了。征得对方同意后,拿出来分享给大家~")])]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(965),alt:"PNG"}}),s._v(" "),n("center",[s._v("(如果要进入算法交流群的,扫描二维码就可以了)")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(966),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("子集:如果集合A的任意一个元素都是集合B的元素,那么集合A称为集合B的子集。")])]),s._v(" "),n("br"),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第48题:子集")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一组"),n("strong",[s._v("不含重复元素")]),s._v("的整数数组 "),n("em",[s._v("nums")]),s._v(",返回该数组所有可能的子集(幂集)。")])])])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("**说明:**解集不能包含重复的子集")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: nums = [1,2,3] \n\n输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] \n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[s._v("题目本身没有太多需要补充的,初中数学知识:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(967),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_02、题解分析-高级"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析-高级"}},[s._v("#")]),s._v(" 02、题解分析(高级)")]),s._v(" "),n("blockquote",[n("p",[s._v("上一个很厉害的题解。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("首先我们可以证明一下 N 个元素的子集个数有 2^N 个:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(968),alt:"PNG"}}),s._v(" "),n("p",[s._v("可以类比为 N 个不同的小球,一次拿出若干个小球(可以不拿),对于每一个球都可以选择拿或者不拿,共有 N 个球,总共判断 N 次,产生了 2^N 个子集。比如:123,共有下面 8 个子集:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(969),alt:"PNG"}}),s._v(" "),n("p",[s._v("然后考虑解题思路,**暂且不谈回溯,我们其实可以用二进制来模拟每个元素是否选中的状态。**又因为我们已知了对于 N 个元素共有 2^N 个子集,所以我们直接遍历 2^N 个元素。")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("subsets")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//存放所有子集 ")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//子集总数共有 2^N 个 ")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//遍历所有的子集 ")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" sub "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//TODO : 找到对应的子集元素")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])]),n("p",[s._v("但是我们并不知道具体的子集元素。那如何找到对应的子集元素呢?"),n("strong",[s._v("对于 2^N 个 N 位的二进制数,我们可以通过从后往前的第 j 个二进制位的 0 和 1 来表示是否放入子集集合。")])]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" sub"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[s._v("综合一下代码:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("subsets")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//存放所有子集 ")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//子集总数公有 2^N 个 ")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//遍历所有的子集 ")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" sub "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" sub"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sub"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br")])]),n("p",[s._v("为帮助大家理解,假设 nums 为 [1,2,3],res 的存储过程为:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(970),alt:"PNG"}}),s._v(" "),n("p",[s._v("大家可以仔细体会一下这个题解。")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(971),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_03、题解分析(普通)"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、题解分析(普通)"}},[s._v("#")]),s._v(" 03、题解分析(普通)")]),s._v(" "),n("blockquote",[n("p",[s._v("当然,上面的题解并不是凡人可以直接想到的。所以我们这里还是给出一种更为通用的题解~")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("集合中所有元素的选/不选,其实构成了一个满二叉树。左子树选,右子树不选。自然,那从根节点到所有叶子节点的路径,就构成了所有的子集。")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(972),alt:"PNG"}}),s._v(" "),n("center",[s._v("(旋转90°)")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(973),alt:"PNG"}}),s._v(" "),n("p",[s._v("那这种解法其实就好理解很多了:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n \n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("subsets")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" list "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("dfs")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("dfs")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" start"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" start"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("dfs")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("remove")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n \n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br")])]),n("p",[s._v("总之,这道题目其实还是有一定难度的,难点主要包括:")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[s._v("数学知识的混淆,忘记考虑空集等情况。")]),s._v(" "),n("li",[s._v("和全排列问题混淆,把 2^N 当做 N!处理。")]),s._v(" "),n("li",[s._v("递归与回溯细节掌握不扎实。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("但并不是不可以攻克,建议大家下去自行练习一番~")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("加油,奥利给!")])])],1)}),[],!1,null,null,null);t.default=e.exports},965:function(s,t,a){s.exports=a.p+"assets/img/1.0690e47c.jpg"},966:function(s,t,a){s.exports=a.p+"assets/img/2.9d2cac0d.jpg"},967:function(s,t,a){s.exports=a.p+"assets/img/3.fea14d13.jpg"},968:function(s,t,a){s.exports=a.p+"assets/img/4.9c6ba0d5.gif"},969:function(s,t,a){s.exports=a.p+"assets/img/5.f1a30d9b.jpg"},970:function(s,t){s.exports="data:image/jpeg;base64,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"},971:function(s,t){s.exports="data:image/jpeg;base64,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"},972:function(s,t,a){s.exports=a.p+"assets/img/8.af52760a.jpg"},973:function(s,t,a){s.exports=a.p+"assets/img/9.1ef32719.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/22.751097e9.js b/learning/.vuepress/dist/assets/js/22.751097e9.js deleted file mode 100644 index a9f72dce..00000000 --- a/learning/.vuepress/dist/assets/js/22.751097e9.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{1053:function(t,s,a){"use strict";a.r(s);var n=a(3),A=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天为大家分享一道让很多人头疼过的题目 - Z字形变化。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("额。。。不知道是不是我瞎,明明是N么(杠精勿扰,只是说说)")])]),t._v(" "),n("br"),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第6题:Z 字形变换")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v('将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 **"LEETCODEISHIRING" **行数为 3 时,排列如下:')])])])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("L C I R\nE T O E S I I G\nE D H N\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("br"),t._v(" "),n("p",[t._v("之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"),n("strong",[t._v('"LCIRETOESIIGEDHN"')]),t._v("。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("请你实现这个将字符串进行指定行数变换的函数:")]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("string convert(string s, int numRows);\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br")])]),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('输入: s = "LEETCODEISHIRING", numRows = 3\n输出: "LCIRETOESIIGEDHN"\n')])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('输入: s = "LEETCODEISHIRING", numRows = 4\n输出: "LDREOEIIECIHNTSG"\n\n解释:\nL D R\nE O E I I\nE C I H N\nT S G\n')])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br")])]),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(476),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("blockquote",[n("p",[t._v("这是我比较推崇的一道“小学题目”,因为其没有任何复杂的思维逻辑,只需要按部就班,就可以顺利解答。难的是,按部就班的过程里,却极其容易出错。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("因为最终目的是变换字符串的顺序,并且题中也没有限制说不可用额外空间,所以我们秉承不重复造轮子的原则,想办法利用某种结构对原字符串做文章。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v('假若我们采用示例2的数据来进行分析,输入字符串 s 为 "LEETCODEISHIRING", numRows 为 4 ,画成图大概长这样:')]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(477),alt:"PNG"}}),t._v(" "),n("p",[t._v("重点来了,"),n("strong",[t._v("我们的目标是按行打印,那总得有个东西来存储每行的数据吧")]),t._v("?因为只需要存储"),n("strong",[t._v("每行")]),t._v("的数据,那是不是用个数组就可以了。(当然,你硬说搞个map来存也没啥毛病,就是有点闲得蛋疼)")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("问题来了,那数组设置多大呢?自然是有多少行我们就设置多大呗,换句话说,numRows多大,我们的数组就设置多大。画成图大概就是下面这个样子:")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(478),alt:"PNG"}}),t._v(" "),n("p",[t._v("存储的容器有了,原字符串也列出来是啥样了,现在嘎哈?自然就是把原字符串放到容器里咯。怎么放?"),n("strong",[t._v("根据 numRows 的大小来回进行放置即可")]),t._v("(即从0到n-1,再从n-1到0)。具体的请看下图:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(479),alt:"PNG"}}),t._v(" "),n("p",[t._v("上面的图长得不得了,但是观察我们能看出来,"),n("strong",[t._v("每 2n-2 即为一个周期")]),t._v("。到了这里,应该没有人会质疑这是一道小学题目了吧。。。把所有的字符串放完之后,大概就是下面这个样子:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(480),alt:"PNG"}}),t._v(" "),n("p",[t._v("最后一步,咱们让这个数组排排坐,就可以开始吃果果:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(481),alt:"PNG"}}),t._v(" "),n("p",[t._v("如果看不清楚,不如这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(482),alt:"PNG"}}),t._v(" "),n("p",[t._v("根据分析,得出代码(好久没翻go的牌子了):")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//go")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("convert")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" numRows "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" numRows "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" s\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("rune")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" numRows"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" period "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" numRows "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" mod "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" period\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" mod "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" numRows "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tres"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mod"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tres"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("period "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" mod"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" strings"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Join")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{},attrs:{src:a(483),alt:"PNG"}}),t._v(" "),n("p",[t._v("上面的代码要强调两点:")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("第一:用了一个rune,这个其实是go里的用法,用来处理unicode或utf-8字符而已,并没有什么特别的。")]),t._v(" "),n("p",[t._v("第二:12-15行的意思是,在周期内,正着走 numRows-1 下,剩余的反着走。(也就是上面那个长长的图)")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("为了照顾Java的小伙伴,再给出一个Java版本的:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("convert")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" numRows"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("numRows "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("numRows"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("fill")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" chars "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("toCharArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" chars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" period "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" numRows "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" mod "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" period"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mod "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" numRows"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mod"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" chars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("period "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" mod"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("valueOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("chars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StringBuilder")]),t._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StringBuilder")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" ch "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ch"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("toString")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br")])]),n("p",[t._v("和Go语言的示例一样,代码的关键仍然是计算轨迹的过程(10-17),这里再提供另外一种计算轨迹的方式:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("convert")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" numRows"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("numRows "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("numRows"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("fill")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" flag "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("toCharArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" numRows "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" flag "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("flag"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" flag"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StringBuilder")]),t._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StringBuilder")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" ch "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ch"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("toString")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("p",[t._v("通过使用一个标志位,来使轨迹回移。(本质其实是一样的)")]),t._v(" "),n("br"),t._v(" "),n("h2",{attrs:{id:"_03、总结"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、总结"}},[t._v("#")]),t._v(" 03、总结")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题目的意义在于考察coding的能力,本身的思维过程并不复杂。有的同学一看这种题目,"),n("strong",[t._v("就想通过二维数组来进行计算,殊不知已经落入了题目的陷阱(不信你试试,二维数组出错率一定远胜一维数组)")]),t._v("。当然,本题也是可以不借助额外空间来进行实现的,核心的逻辑完全相同,建议大家下去自己动手练习一下。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);s.default=A.exports},476:function(t,s,a){t.exports=a.p+"assets/img/1.c8aefc09.gif"},477:function(t,s,a){t.exports=a.p+"assets/img/2.2ea69152.jpg"},478:function(t,s,a){t.exports=a.p+"assets/img/3.e3a47b2e.jpg"},479:function(t,s,a){t.exports=a.p+"assets/img/4.c46f6eb3.jpg"},480:function(t,s,a){t.exports=a.p+"assets/img/5.dfc3e337.jpg"},481:function(t,s){t.exports="data:image/jpeg;base64,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"},482:function(t,s){t.exports="data:image/jpeg;base64,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"},483:function(t,s){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/23.a7bcde24.js b/learning/.vuepress/dist/assets/js/23.a7bcde24.js deleted file mode 100644 index 5e2cb5a5..00000000 --- a/learning/.vuepress/dist/assets/js/23.a7bcde24.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{1083:function(A,s,t){"use strict";t.r(s);var a=t(3),n=Object(a.a)({},(function(){var A=this,s=A.$createElement,a=A._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[a("blockquote",[a("p",[A._v("今天为大家分享如何用算法来求全排列!话不多说,直接看题!")])]),A._v(" "),a("h2",{attrs:{id:"_01、全排列概念"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、全排列概念"}},[A._v("#")]),A._v(" 01、全排列概念")]),A._v(" "),a("blockquote",[a("p",[A._v("什么是全排列?从 n 个不同元素中任取 m(m≤n)个元素,按照一定的顺序排列起来,叫做从 n 个不同元素中取出 m 个元素的一个排列。当 m=n 时所有的排列情况叫全排列。")])]),A._v(" "),a("br"),A._v(" "),a("p",[A._v("比如 [1,2,3] 全排列共有 6 种:")]),A._v(" "),a("img",{attrs:{src:t(655),alt:"PNG"}}),A._v(" "),a("h2",{attrs:{id:"_02、全排列题目"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、全排列题目"}},[A._v("#")]),A._v(" 02、全排列题目")]),A._v(" "),a("blockquote",[a("p",[A._v("然后把上面的全排列稍微改改,就变成了一道算法题。。。")])]),A._v(" "),a("table",[a("thead",[a("tr",[a("th",[A._v("全排列问题")])])]),A._v(" "),a("tbody",[a("tr",[a("td",[A._v("给定一个 "),a("strong",[A._v("没有重复")]),A._v(" 数字的序列,返回其所有可能的全排列。")])])])]),A._v(" "),a("p",[a("strong",[A._v("示例:")])]),A._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[A._v("输入: [1,2,3]\n\n输出:\n[\n [1,2,3],\n [1,3,2],\n [2,1,3],\n [2,3,1],\n [3,1,2],\n [3,2,1]\n]\n")])]),A._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[A._v("1")]),a("br"),a("span",{staticClass:"line-number"},[A._v("2")]),a("br"),a("span",{staticClass:"line-number"},[A._v("3")]),a("br"),a("span",{staticClass:"line-number"},[A._v("4")]),a("br"),a("span",{staticClass:"line-number"},[A._v("5")]),a("br"),a("span",{staticClass:"line-number"},[A._v("6")]),a("br"),a("span",{staticClass:"line-number"},[A._v("7")]),a("br"),a("span",{staticClass:"line-number"},[A._v("8")]),a("br"),a("span",{staticClass:"line-number"},[A._v("9")]),a("br"),a("span",{staticClass:"line-number"},[A._v("10")]),a("br"),a("span",{staticClass:"line-number"},[A._v("11")]),a("br")])]),a("h2",{attrs:{id:"_03、题解分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、题解分析"}},[A._v("#")]),A._v(" 03、题解分析")]),A._v(" "),a("blockquote",[a("p",[A._v("这种由基础数学知识改编而成的题目,在面试时还是很受欢迎的。因为作为面试官,可以用这种题目,来显示自己的博学。(谬论)")])]),A._v(" "),a("br"),A._v(" "),a("p",[A._v("假如我们不是做算法题,而是做数学题。我们会一个位置一个位置的来考虑,先写出以1开头的排列,再写出以2开头的排列,最后写出以3开头的排列。")]),A._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:t(656),alt:"PNG"}}),A._v(" "),a("p",[A._v("这种思路是不是很像深度优先(DFS)的求解过程呢?")]),A._v(" "),a("br"),A._v(" "),a("p",[A._v("1、我们先选择 1,然后为 1 的第二位选择 2,此时 1 的 第三位只能选择 3。")]),A._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:t(657),alt:"PNG"}}),A._v(" "),a("p",[A._v("2、然后完成了上面的步骤,我们需要回退到 1,因为只有 1 这里还存在别的选择 1-3,然后填写 1-3 后,只有 1-3-2 一种选择。")]),A._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:t(658),alt:"PNG"}}),A._v(" "),a("p",[A._v("3、此时我们需要从 1-3-2,回退到 1-3,再回退到 1,再回退到 根节点,然后重新选择 2。")]),A._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:t(659),alt:"PNG"}}),A._v(" "),a("p",[A._v("4、后面的流程与前面相似,我就不一步步的描述了。")]),A._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:t(660),alt:"PNG"}}),A._v(" "),a("p",[A._v("当然,如果不省略其回溯过程,就是下面这个样子:")]),A._v(" "),a("p",[A._v("[TODO]")]),A._v(" "),a("p",[A._v("上面分析是分析完了,但是仍然不妨碍你继续懵逼。。。“题目中不是给我的是一个数组吗?作为一个合格的算法小白,我特么根本就不知道 DFS 在这里面咋用啊!!”本来想扔完代码就走,想了想还是决定讲一下。")]),A._v(" "),a("br"),A._v(" "),a("p",[A._v("我们把代码先丢出来(注意,这个代码不是最优的,这样写只是易于大家理解。比如我们还可以通过置换的方式来进行优化,又或者其他的优化方法。但是都大同小异,核心是回溯的过程):")]),A._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[A._v("//JAVA ")]),A._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("class")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("Solution")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("{")]),A._v(" \n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("List")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("Integer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(">")])]),A._v(" ans "),a("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("new")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("ArrayList")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(";")]),A._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("public")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("List")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("Integer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(">")])]),A._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("permute")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("]")]),A._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("{")]),A._v(" \n "),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("dfs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),A._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(",")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("new")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("ArrayList")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(";")]),A._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("return")]),A._v(" ans"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(";")]),A._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("}")]),A._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("private")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("void")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("dfs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("]")]),A._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(",")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("Integer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(">")])]),A._v(" tmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("{")]),A._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),A._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("Arrays")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("toString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),A._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[A._v("+")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[A._v('","')]),A._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[A._v("+")]),A._v(" tmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(";")]),A._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("if")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),A._v("tmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[A._v("==")]),A._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),A._v("length"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("{")]),A._v("\n ans"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("add")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("new")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[A._v("ArrayList")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),A._v("tmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(";")]),A._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("}")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("else")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("{")]),A._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("for")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("int")]),A._v(" num "),a("span",{pre:!0,attrs:{class:"token operator"}},[A._v(":")]),A._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("{")]),A._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("if")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[A._v("!")]),A._v("tmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("contains")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),A._v("num"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("{")]),A._v("\n tmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("add")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),A._v("num"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(";")]),A._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("dfs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),A._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(",")]),A._v(" tmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(";")]),A._v("\n tmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("remove")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),A._v("tmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[A._v("size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[A._v("-")]),A._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[A._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(";")]),A._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("}")]),A._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("}")]),A._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("}")]),A._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("}")]),A._v("\n \n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("}")]),A._v("\n")])]),A._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[A._v("1")]),a("br"),a("span",{staticClass:"line-number"},[A._v("2")]),a("br"),a("span",{staticClass:"line-number"},[A._v("3")]),a("br"),a("span",{staticClass:"line-number"},[A._v("4")]),a("br"),a("span",{staticClass:"line-number"},[A._v("5")]),a("br"),a("span",{staticClass:"line-number"},[A._v("6")]),a("br"),a("span",{staticClass:"line-number"},[A._v("7")]),a("br"),a("span",{staticClass:"line-number"},[A._v("8")]),a("br"),a("span",{staticClass:"line-number"},[A._v("9")]),a("br"),a("span",{staticClass:"line-number"},[A._v("10")]),a("br"),a("span",{staticClass:"line-number"},[A._v("11")]),a("br"),a("span",{staticClass:"line-number"},[A._v("12")]),a("br"),a("span",{staticClass:"line-number"},[A._v("13")]),a("br"),a("span",{staticClass:"line-number"},[A._v("14")]),a("br"),a("span",{staticClass:"line-number"},[A._v("15")]),a("br"),a("span",{staticClass:"line-number"},[A._v("16")]),a("br"),a("span",{staticClass:"line-number"},[A._v("17")]),a("br"),a("span",{staticClass:"line-number"},[A._v("18")]),a("br"),a("span",{staticClass:"line-number"},[A._v("19")]),a("br"),a("span",{staticClass:"line-number"},[A._v("20")]),a("br"),a("span",{staticClass:"line-number"},[A._v("21")]),a("br"),a("span",{staticClass:"line-number"},[A._v("22")]),a("br"),a("span",{staticClass:"line-number"},[A._v("23")]),a("br"),a("span",{staticClass:"line-number"},[A._v("24")]),a("br"),a("span",{staticClass:"line-number"},[A._v("25")]),a("br")])]),a("p",[A._v("假若 nums 为 [1,2,3],会有下面的输出:")]),A._v(" "),a("img",{staticStyle:{zoom:"80%"},attrs:{src:t(661),alt:"PNG"}}),A._v(" "),a("p",[A._v("其实这个代码还是很容易理解的,他干了个啥事?就是当我们按顺序去枚举每一位时,我们要把已经选择过的数字排除掉(第16行代码),比如我们上面选择三个数字:")]),A._v(" "),a("br"),A._v(" "),a("ul",[a("li",[A._v("在枚举第一位的时候,就有三种情况")]),A._v(" "),a("li",[A._v("在枚举第二位的时候,就只有两种情况(前面已经出现的一个数字不可以再出现)")]),A._v(" "),a("li",[A._v("在枚举第三位的时候,就只有一种情况(前面已经出现的两个数字不可以再出现)")])]),A._v(" "),a("br"),A._v(" "),a("p",[A._v("整个代码其实就干了这么一件事!而 第12行 的代码,其实就是说"),a("strong",[A._v("当枚举到最后一位的时候,这个就是我们要的排列结果,所以我们要放入到全排列结果集中。")])]),A._v(" "),a("br"),A._v(" "),a("p",[A._v("那这里还有一个很重要的代码,其实是 第19行,这一步其实是干啥!说白了就是在回到上一位时,我们要就把上一次的选择结果"),a("strong",[A._v("撤销")]),A._v("掉。不然如果你之前选过了,后面不就不能继续用了么。")]),A._v(" "),a("h2",{attrs:{id:"_04、总结"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_04、总结"}},[A._v("#")]),A._v(" 04、总结")]),A._v(" "),a("blockquote",[a("p",[A._v("回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。")])]),A._v(" "),a("br"),A._v(" "),a("p",[A._v("这是最简单的一道全排列题目,注意我在上面的题解中,并没有引入什么状态、路径、选择列表、结束条件之类的专业术语,甚至我连回溯的概念都没有提及。")]),A._v(" "),a("img",{staticStyle:{zoom:"80%"},attrs:{src:t(662),alt:"PNG"}}),A._v(" "),a("p",[A._v("之所以这样讲,我是希望咱可以从最简单的人类思考出发,而不是去套用一些框架之类的东东。。。。当然,至于更多的概念和回溯框架的东西,我会在后面更为复杂的题目中为大家引入。")]),A._v(" "),a("br"),A._v(" "),a("p",[A._v("好了,基本就是这样了。周末写文不容易,求个转发,来个评论。感谢~")])])}),[],!1,null,null,null);s.default=n.exports},655:function(A,s,t){A.exports=t.p+"assets/img/1.f3588f7c.jpg"},656:function(A,s){A.exports="data:image/jpeg;base64,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"},657:function(A,s,t){A.exports=t.p+"assets/img/3.6f35751e.jpg"},658:function(A,s,t){A.exports=t.p+"assets/img/4.386090fa.jpg"},659:function(A,s,t){A.exports=t.p+"assets/img/5.f3b5c75b.jpg"},660:function(A,s,t){A.exports=t.p+"assets/img/6.7626291b.jpg"},661:function(A,s){A.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAXQAAAESCAMAAADaEN4mAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAS1BMVEUnKCIhlw8E+AwC2BYhJyEmJx0W2AsJlx0CuBoC9xIaJyEmJxoR9wsauAsmcxIC9w8WlxIRcyEmTxYJ9w8WTyEW2BIJ9xIJ9wv///8gXMnLAAAAAWJLR0QYm2mFHgAAAAlwSFlzAAAOxAAADsQBlSsOGwAABZ1JREFUeNrtndFy2zYQRWU1jtvYcho3Sf//Tzu2LAuEuBIYdvdOeM95yQwpLGbuyCKDwwV3OwCAbO72+z8+/frw+8/7/cNMvYvj0HD35/Hf+89/fZk5/fg0H95h/3H88DBXrz8ODe8hPX/9ezb0w7fdyz/fZ0c+Pn07foTQl3IM6f7Hl+fZ0N/+BoL03lMl9MV8hBSGfvpG97z8PA4g9MXcDv0we6E98Jv+69wM/e7r92Do4TiU0BdzK/Q4893z8U+A0BfTh/74NAn/+ZR5d/ztAtt+00/nCX2A95Be77v3b7Ed2q/262363PHX//t0v+nv5wl9gHNIpwPRb3t4oX1ozxP6AF3oL//OZxsdP4X7cZ7QB2DtBQAAYAVJF9LwPCRKjHM9bh0vSJIYTT1CvyBHYrT1CP2CNIlB6DFpEoPQY9IkBqHHpEkMQo9JkxiEHpMkMc71CP2SPInRnYczeRJjch5aWHsBAABYQfKFdHicFfkSI6pnfCuZLzGievahZ0qMqJ596JkSI6pH6IkSI6pH6IkSI6pH6IkSI6pH6GkSI6pH6JkSI6pH6O2B/1li3BrnSLLEuDXOE9ZeAAAAViC6kA7X2yQ6iTFWb5PoJMZYvU2ikxhj9TaJTmKM1dskOokxVm+T6CTGWL1NopMYY/U2iUpi3Kq3aWQS41a9LSOTGM5yQyQxvOUGay8AAAAr4GkAAcUSw0tWRBRLDC9ZEVEvMYxkRUS9xDCSFRHVEsNKVkSUSwwnWRFRLTGsZEVEscTwkhURtRLDTFZE0IkhgE4MAay9AAAArICnAQToJEY0j8GtpE5iRPPYhK6QGNE8NqErJEY0D6EnSoxoHkJPlBjRPISeKDGieQxDr5IY1ttMySSG8zZTdGIIoBNDAGsvAAAAK+DlUgKSJIaXlFhKksTwkhJLyZEYOy8psZQ0ieEkJZaSJjGcpMRS0iSGk5RYSpbEsJISS0mSGF5SYik5EsNMSiyFF3sL4MXeAlh7AQAAWAEtjQLyJcaU8zzGt5L5EmNCM4996JkSY1Krmcc+9EyJ0UHoFRKjg9ArJEYHoVdIjH4UoadLjItxhF4gMSbjmnkIvT3AdlLpsJ2UANZeAAAAVkBLowCdxBirt0l0EmOs3ibRSYyxeptEJzHG6m0SncQYq7dJdBJjrN4m0UmMsXqbRCUxrN+VIZMYzu/KYDspAWwnJYC1FwAAgBXwNICAYonhJSsiiiWGl6yIqJUY8TgryiWGk6yIqJYYVrIiolxiOMmKiHKJ4SQrIsolhpOsiKiVGGayIoJODAF0Yghg7QUAAGAFPA0gQCcxplhtM6WTGBO8tpnSSYzJHF7bTOkkRgeht2RJjA5Cbz+QJTE6CL05nyYx+qPGoVdJDOttpmQSw3mbKToxBNCJIYC1FwAAgBXwcikBSRKDjotrJEkMOi6ukScx6LgIyZMYdFyEZEkMOi6ukCYx6LiIyZIYdFxcIUli0HFxjRyJQcfFVXixtwBe7C2AtRcAAIAV0NIoIF9iTLHquIjIlxgTvDouIvIlxqSWV8dFRL7E6CD0ConRQegVEqOD0CskRj+K0NMlhnXHRUS6xHDuuIhgOykBbCclgLUXAACAFdDSKEAnMaJ5DG4ldRIjmscmdIXEiOaxCV0hMaJ5CD1RYkTzEHqixIjmIfREiRHNYxh6lcSI5nEKvV5iRPMYhd4cYDupdNhOSgBrLwAAACvgaQABxRLDS1ZEFEsML1kRUSsxdl6yIqJcYjjJiohyieEkKyLKJYaTrIiolhhWsiKiWGJ4yYqIWolhJisi6MQQQCeGANZeAAAAVsDTAAJ0EmOK1TZTOokxwWubKZ3EmBzz2mZKJzE6CL0lS2J0EHr7gSyJ0UHozfk0idFXMw69SmJYbzMlkxjO20zRiSGATgwBrL0AAPzm/AfiHsPikXWGCgAAAABJRU5ErkJggg=="},662:function(A,s,t){A.exports=t.p+"assets/img/8.c7dee1ef.gif"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/24.281f9edc.js b/learning/.vuepress/dist/assets/js/24.281f9edc.js deleted file mode 100644 index 40463161..00000000 --- a/learning/.vuepress/dist/assets/js/24.281f9edc.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{1086:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("在上一节中,我们使用"),n("strong",[t._v("双端队列")]),t._v("完成了滑动窗口的一道颇为困难的题目,以此展示了什么是滑动窗口。在本节中我们将继续深入分析,探索滑动窗口题型一些具有模式性的解法。")])]),t._v(" "),n("h2",{attrs:{id:"_01、滑动窗口介绍"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、滑动窗口介绍"}},[t._v("#")]),t._v(" 01、滑动窗口介绍")]),t._v(" "),n("p",[t._v("对于大部分滑动窗口类型的题目,一般是"),n("strong",[t._v("考察字符串的匹配")]),t._v("。比较标准的题目,会给出一个"),n("strong",[t._v("模式串B")]),t._v(",以及一个"),n("strong",[t._v("目标串A")]),t._v("。然后提出问题,找到"),n("strong",[t._v("A中符合对B一些限定规则的子串或者对A一些限定规则的结果,"),n("strong",[t._v("最终")]),t._v("再将搜索出的子串完成题意中要求的组合或者其他")]),t._v("。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("比如:给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("又或者:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("再如:给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("都是属于这一类的标准题型。而对于这一类题目,我们常用的解题思路,"),n("strong",[t._v("是去维护一个可变长度的滑动窗口")]),t._v("。无论是使用"),n("strong",[t._v("双指针")]),t._v(",还是使用"),n("strong",[t._v("双端队列")]),t._v(",又或者用"),n("strong",[t._v("游标")]),t._v("等其他奇技淫巧,目的都是一样的。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("Now,我们通过一道题目来进行具体学习吧")]),t._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第3题:无重复字符的最长子串")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('输入: "abcabcbb"\n输出: 3 \n解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3\n')])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('输入: "bbbbb"\n输出: 1\n解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。\n')])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("p",[n("strong",[t._v("示例 3:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('输入: "pwwkew"\n输出: 3\n解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。\n')])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("br"),t._v(" "),n("p",[t._v('请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。')]),t._v(" "),n("h2",{attrs:{id:"_03、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、题解分析"}},[t._v("#")]),t._v(" 03、题解分析")]),t._v(" "),n("p",[t._v("直接分析题目,假设我们的输入为“abcabcbb”,我们只需要维护一个窗口在输入字符串中进行移动。如下图:")]),t._v(" "),n("img",{attrs:{src:a(669),alt:"img"}}),t._v(" "),n("p",[t._v("当下一个元素在窗口没有出现过时,我们扩大窗口。")]),t._v(" "),n("img",{attrs:{src:a(670),alt:"img"}}),t._v(" "),n("p",[t._v("当下一个元素在窗口中出现过时,我们缩小窗口,将"),n("strong",[t._v("出现过的元素以及其左边的元素")]),t._v("统统移出:")]),t._v(" "),n("img",{attrs:{src:a(671),alt:"img"}}),t._v(" "),n("p",[t._v("在整个过程中,我们"),n("strong",[t._v("记录下窗口出现过的最大值")]),t._v("即可。而我们唯一要做的,只需要"),n("strong",[t._v("尽可能扩大窗口")]),t._v("。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("那我们代码中通过什么来维护这样的一个窗口呢?anyway~ 不管是队列,双指针,甚至通过map来做,都可以。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("我们演示一个"),n("strong",[t._v("双指针")]),t._v("的做法:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("lengthOfLongestSubstring")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Set")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Character")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" set "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashSet")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//charAt:返回指定位置处的字符")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("set"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("contains")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n set"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n set"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("remove")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(672),alt:"img"}}),t._v(" "),n("p",[t._v("通过观察,我们能看出来。如果是最坏情况的话,我们每一个字符都可能会访问两次,left一次,right一次,时间复杂度达到了O(2N),这是不可饶恕的。不理解的话看下图:")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("假设我们的字符串为“abcdc”,对于abc我们都访问了2次。")]),t._v(" "),n("img",{attrs:{src:a(673),alt:"img"}}),t._v(" "),n("p",[t._v("那如何来进一步优化呢?")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("其实我们可以定义"),n("strong",[t._v("字符到索引的映射")]),t._v(",而不是简单通过一个集合来判断字符是否存在。这样的话,当我们"),n("strong",[t._v("找到重复的字符时,我们可以立即跳过该窗口")]),t._v(",而不需要对之前的元素进行再次访问。")]),t._v(" "),n("img",{attrs:{src:a(674),alt:"img"}}),t._v(" "),n("p",[t._v("优化代码如下:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("lengthOfLongestSubstring")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Character")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" map "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("map"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("containsKey")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("map"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n map"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("put")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(675),alt:"img"}}),t._v(" "),n("p",[t._v("修改之后,我们发现虽然时间复杂度有了一定提高,但是还是比较慢!如何更进一步的优化呢?我们可以使用一个256位的数组来替代hashmap,以进行优化。(因为ASCII码表里的"),n("strong",[t._v("字符")]),t._v("总共有128个。ASCII码的长度是一个字节,8位,理论上可以表示256个字符,但是许多时候只谈128个。具体原因可以下去自行学习~)")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("进一步优化代码:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("lengthOfLongestSubstring")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" charIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("256")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("charIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n charIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(676),alt:"img"}}),t._v(" "),n("p",[t._v("我们发现优化后时间复杂度有了极大的改善!这里简单说一下原因,对于数组和hashmap访问时,两个谁快谁慢不是一定的,需要思考hashmap的底层实现,以及数据量大小。但是在这里,因为已知了待访问数据的下标,可以"),n("strong",[t._v("直接寻址")]),t._v(",所以极大的缩短了查询时间。")]),t._v(" "),n("br"),t._v(" "),n("h2",{attrs:{id:"_04、总结"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、总结"}},[t._v("#")]),t._v(" 04、总结")]),t._v(" "),n("p",[t._v("本题基本就到这里。最后要说的,一般建议如果要分析一道题,我们要压缩压缩再压缩,抽茧剥丝一样走到最后,尽可能的完成对题目的优化。不一定非要自己想到最优解,但绝对不要局限于单纯的完成题目,那样将毫无意义!")])])}),[],!1,null,null,null);s.default=r.exports},669:function(t,s){t.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAVcAAAB8CAMAAADq8wNrAAAAolBMVEX////8/Pzw8PD5+fnu7u7o6Ojo38PfyYbYu2LWtlaqqqpPT08UFBQAAADn05jdwGzv25/77MD/8sxnZ2crKyudnZ3m5ublzIFYWFilnop5eXlLRTIkJCQTEg0KCgrY2NgvLy+CgoLEup1HR0fs7OzExMSCe2gvLSbYza329vaZmZmknIOkpKTs4L1HQzn26cVnYlLZzq7Z2dl1dXXi4uK6urrParC6AAAEb0lEQVR42u2ca3eiMBCGo3V7T1VQ272qBby01L11//9f2wMWWxHIeEh0HN584niekwyPySQRolKq1VJZaWcX758VXYEzctzikcKpVuvsrJWVTnbx/lnRFTgjB6+OvDIbP1I4bvFI4bjFI4XjFo8Ujls8Ujhu8UjhuMUjheMWjxSOWzxSONVudzrtrHxqt88vLq+qyuXFecpd39zqqnJ7c91Ibl06ed933V7fqyr9XvdOtZU/GI5UVRkNB34DuU1/3fZ6d++Zy/1d239Q5vLgN44r8XreJWj1vO7nAaEZpQZfGsZdl3i96JG89r4OSe0MvzWMuynxetknee1/H5HaGf1oGHdb4vWKpNXzNKkZpRrLwasbDl7dcLnnW/Bakyt5vgWv1rwiD7jgkF/dcPDqhrPjdTyZHuX+bLdLrc/MwSu8wiu8mrw+Jj+FPxK8jidaB6H5/sJA68nYyEVJuxHh/qy2S63PzBn2W48zz/Nm84XRa9JGGOw0VOBrqtTyaWngoqQ/TAke7LZLra+c22e/tZg/G72mCnaHR/7+wsDP31qxh3WtsdGr3Xap9ZVze+y3FnM9o+XXpZ+PfqcfFoztMq/jiZ4aONvtUuszc4b8+rJKnzWSveYHRv7+CoZ2IZdkQ63pXi21S63PzFV7/flLzxfey+rQXpd+MseEgVSvi/ks7bREr7tZLH9/8T7jkezVcrvm+sycyetzutYye02/uEjnJ5r8/ZUt/Hbqi7M53MDZbpdWn5kz5YHVC23e0v5SjSe+af2kYtJ6Jx1gpHnLbrvU+swcYd5a/abkgbhomimY55P1tHlfkMxbwR9KHrDaLrU+M4ffCd1weL5ll8PzLddekQdccMivbjh4dcPBqxsO7xNa5creJ8T7r/W4svdf8b52Pa7sfW2cL6jJlXnFeZia3MYrzm8d5PxW5pv7eT7uHLd4pHDc4pHCcYtHCsctHikct3ikcNzikcJxi0cKh//Rc/Q/eszikcJxGz9SOG7xSOG4xSOF4xaPFI5bPFI4bvFI4bjFI4XjFo8UDvsCR/uCrc81tRw9bu7cdj/WhHdmthj245FHft31GgZFZxPgtbbXv/m38uG1lte3I3+bsjkCBq81vW4dJYvg1aLXOEkC6WkqeLXkVamp1n746vthuD5vD682vMbrY19ZP30/swivJK/b+4IPzrYnrlx/Pfq6mztX5TVJsFl3hdc9vZbm18Rr9NZb4wj5dc88UOU1Wu8JoskYXi16fXoIkz9GSRZb8GrRa6TUaxikUxa8WvT6z08P2UfIr9b7a1bg1aLXivXr0ePmzqG/HtprWYFXktet81tkr5tzSp2qqw/nmZrGob866q/wCq8nxGGddXivH55wx/AKrxw4eIXXU+KqnsNUeD36cw7uHLw68oo84CYPwCu8nhAHr/B6Shy8Ht4rfndx4xX9tYZX7Avc7AtwfsuNV2bjRwrHLR4pHLd4pHDc4pHCcYtHCsctHikct3ikcNzikcLh/zIc7QuYxSOF+w+ayUq4zfeUvAAAAABJRU5ErkJggg=="},670:function(t,s){t.exports="data:image/jpeg;base64,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"},671:function(t,s){t.exports="data:image/jpeg;base64,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"},672:function(t,s){t.exports="data:image/jpeg;base64,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"},673:function(t,s){t.exports="data:image/jpeg;base64,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"},674:function(t,s,a){t.exports=a.p+"assets/img/6.cc528cb2.jpg"},675:function(t,s,a){t.exports=a.p+"assets/img/7.0e0f6f14.jpg"},676:function(t,s){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/25.643fe370.js b/learning/.vuepress/dist/assets/js/25.643fe370.js deleted file mode 100644 index b7d7acb4..00000000 --- a/learning/.vuepress/dist/assets/js/25.643fe370.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{1111:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天为大家分享一道关于"),n("strong",[t._v("螺旋矩阵")]),t._v("的问题。话不多说,直接看题目吧。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第54题:螺旋矩阵")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:\n[\n [ 1, 2, 3 ],\n [ 4, 5, 6 ],\n [ 7, 8, 9 ]\n]\n输出: [1,2,3,6,9,8,7,4,5]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:\n[\n [1, 2, 3, 4],\n [5, 6, 7, 8],\n [9,10,11,12]\n]\n输出: [1,2,3,4,8,12,11,10,9,5,6,7]\n\n\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])]),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("p",[t._v("本题的思路,在于"),n("strong",[t._v("模拟螺旋的移动轨迹")]),t._v("。")]),t._v(" "),n("p",[t._v("问题的难点,在于"),n("strong",[t._v("想明白模拟过程中会遇到什么问题")]),t._v("。")]),t._v(" "),n("p",[t._v("那模拟的过程中会遇到什么样的问题?"),n("strong",[t._v("边界处理")]),t._v("。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("因为只有我们能找到边界(边界包括:1、数组的边界 2、已经访问过的元素),才可以通过“"),n("strong",[t._v("右,下,左,上")]),t._v("”的方向来进行移动。同时,每一次"),n("strong",[t._v("碰壁")]),t._v(",就可以调整到下一个方向。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("思路明确了,我们看一下整个过程。假如我们的数组为:")]),t._v(" "),n("p",[t._v("[")]),t._v(" "),n("p",[t._v("[1, 2, 3, 4],")]),t._v(" "),n("p",[t._v("[5, 6, 7, 8],")]),t._v(" "),n("p",[t._v("[9,10,11,12]")]),t._v(" "),n("p",[t._v("]")]),t._v(" "),n("p",[t._v("数组如下图所示:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(770),alt:"PNG"}}),t._v(" "),n("p",[t._v("我们首先对其设置好四个边界:")]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("up := 0\ndown := len(matrix) - 1\nleft := 0\nright := len(matrix[0]) - 1\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br")])]),n("p",[t._v("如下图所示:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(771),alt:"PNG"}}),t._v(" "),n("p",[t._v("同时,我们定义x和y,来代表行和列。")]),t._v(" "),n("p",[t._v("如x=2,y=1,则 arr[2][1]=10(第3行第2列)")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(772),alt:"PNG"}}),t._v(" "),n("p",[t._v("然后我们从第一个元素开始行军(y=left),完成第一行的遍历,直到碰壁。(y<=right)")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(773),alt:"PNG"}}),t._v(" "),n("p",[t._v("下面关键的一步来了,"),n("strong",[t._v("因为第一行已经走过了,我们将上界下调")]),t._v("**(up++)**,同时转弯向下走。")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(774),alt:"PNG"}}),t._v(" "),n("p",[t._v("直到碰到底部时(x<=down),我们将"),n("strong",[t._v("右界左调(right--)")]),t._v(",转弯向左走。")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(775),alt:"PNG"}}),t._v(" "),n("p",[t._v("后面向左和向上,分别完成"),n("strong",[t._v("下界上调(down--)"),n("strong",[t._v("和")]),t._v("左界右调(left++)")]),t._v("。")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(776),alt:"PNG"}}),t._v(" "),n("p",[t._v("最后,对剩下的矩阵重复整个过程,直到上下、左右的壁与壁碰在一起**(up <= down && left <= right,这是避免碰壁的条件)**。")]),t._v(" "),n("h2",{attrs:{id:"_03、go语言示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[t._v("#")]),t._v(" 03、Go语言示例")]),t._v(" "),n("p",[t._v("所以这道题很简单,只要会碰壁,就可以顺利得到代码(很漂亮,不是吗?),代码如下:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("spiralOrder")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("matrix "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tleft"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" up"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" down "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" up "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" down "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" y "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" y "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("avoid")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" up"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" down"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" y"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\ty"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("\n\t\tup"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" up"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" down "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("avoid")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" up"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" down"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\tx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("\n\t\tright"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" y "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" y "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("avoid")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" up"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" down"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" y"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\ty"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n\t\tdown"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" down"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" up "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("avoid")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" up"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" down"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" x"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("y"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\tx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n\t\tleft"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("avoid")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" up"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" down "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" up "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" down "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" right\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"150%"},attrs:{src:a(777),alt:"PNG"}})])}),[],!1,null,null,null);s.default=r.exports},770:function(t,s,a){t.exports=a.p+"assets/img/1.58ab1a31.png"},771:function(t,s,a){t.exports=a.p+"assets/img/2.cb821808.png"},772:function(t,s,a){t.exports=a.p+"assets/img/3.b6b0c2c7.png"},773:function(t,s,a){t.exports=a.p+"assets/img/4.6650b341.jpeg"},774:function(t,s,a){t.exports=a.p+"assets/img/5.d8077a39.png"},775:function(t,s,a){t.exports=a.p+"assets/img/6.73d7c7f6.jpg"},776:function(t,s,a){t.exports=a.p+"assets/img/7.abae2919.jpg"},777:function(t,s){t.exports="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/26.39de823a.js b/learning/.vuepress/dist/assets/js/26.39de823a.js deleted file mode 100644 index 34fd6056..00000000 --- a/learning/.vuepress/dist/assets/js/26.39de823a.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{1137:function(s,t,n){"use strict";n.r(t);var a=n(3),r=Object(a.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("img",{staticStyle:{zoom:"80%"},attrs:{src:n(927),alt:"PNG"}}),s._v(" "),a("blockquote",[a("p",[s._v("数独相信在座的各位都玩过,那我们如何使用程序去验证一个 9×9 的数独是有效的呢?一起看下!")])]),s._v(" "),a("h2",{attrs:{id:"_01、题目示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),a("blockquote",[a("p",[s._v("数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据 9×9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。")])]),s._v(" "),a("br"),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("题目:有效的数独")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。")])])])]),s._v(" "),a("br"),s._v(" "),a("ul",[a("li",[s._v("数字 1-9 在每一行只能出现一次。")]),s._v(" "),a("li",[s._v("数字 1-9 在每一列只能出现一次。")]),s._v(" "),a("li",[s._v("数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。")])]),s._v(" "),a("br"),s._v(" "),a("p",[a("strong",[s._v("示例:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('输入:\n[\n\n ["5","3",".",".","7",".",".",".","."],\n\n ["6",".",".","1","9","5",".",".","."],\n\n [".","9","8",".",".",".",".","6","."],\n\n ["8",".",".",".","6",".",".",".","3"],\n\n ["4",".",".","8",".","3",".",".","1"],\n\n ["7",".",".",".","2",".",".",".","6"],\n\n [".","6",".",".",".",".","2","8","."],\n\n [".",".",".","4","1","9",".",".","5"],\n\n [".",".",".",".","8",".",".","7","9"]\n\n]\n\n输出: true\n\n解释:\n\n数独部分空格内已填入了数字,空白格用 \'.\' 表示。\n\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])]),a("p",[a("strong",[s._v("说明:")])]),s._v(" "),a("p",[a("strong",[s._v("一个有效的数独(部分已被填充)不一定是可解的。")])]),s._v(" "),a("p",[s._v("只需要根据以上规则,验证已经填入的数字是否有效即可。")]),s._v(" "),a("p",[s._v("给定数独序列只包含数字 1-9 和字符 '.' 。")]),s._v(" "),a("p",[s._v("给定数独永远是 9x9 形式的。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("画出来就是下面这样:")]),s._v(" "),a("img",{staticStyle:{zoom:"80%"},attrs:{src:n(928),alt:"PNG"}}),s._v(" "),a("h2",{attrs:{id:"_02、题解分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[s._v("#")]),s._v(" 02、题解分析")]),s._v(" "),a("blockquote",[a("p",[s._v("聊聊数独,很早之前其实研究过一阵子,还是非常有趣的。解法有很多,包括什么余数法,摒除法等等。那我们如何去评定一个数独的难度呢?一般情况下,给定的数字个数越多,数独相对越简单。")])]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("解题的关键题目中其实已经说了:")]),s._v(" "),a("br"),s._v(" "),a("ul",[a("li",[s._v("数字 1-9 在每一行只能出现一次。")]),s._v(" "),a("li",[s._v("数字 1-9 在每一列只能出现一次。")]),s._v(" "),a("li",[s._v("数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。")])]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("我们要做的就是"),a("strong",[s._v("用程序来完成这个验证的过程")]),s._v(",如何验证?那其实就两步:")]),s._v(" "),a("br"),s._v(" "),a("ul",[a("li",[s._v("第一步:遍历数独中的每一个元素")]),s._v(" "),a("li",[s._v("第二步:验证该元素是否满足上述条件")])]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("遍历这个没什么好说的,"),a("strong",[s._v("从左到右,从上到下进行遍历即可")]),s._v("。就一个两层循环。因为题目本身就是常数级的规模,所以时间复杂度就是 O(1)。")]),s._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(929),alt:"PNG"}}),s._v(" "),a("p",[s._v("问题来了:如何验证元素在 行 / 列 / 子数独中没有重复项?")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("其实很简单,我们建立三个数组分别记录每行,每列,每个子数独(子数独就是上面各种颜色的小框框)中出现的数字。")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" rows "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" col "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sbox "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("p",[s._v("当然,刚开始的时候他们都是空的。然后"),a("strong",[s._v("每遍历到一个元素,我们就看看这个元素在里边存不存在,不存在就放进去,存在那说明数独不合法")]),s._v("。")]),s._v(" "),a("img",{staticStyle:{zoom:"80%"},attrs:{src:n(930),alt:"PNG"}}),s._v(" "),a("p",[s._v("举个栗子,比如这个数独。第6行5列为2,那我们就对 rows 和 col 进行设置:(1表示元素存在)")]),s._v(" "),a("br"),s._v(" "),a("blockquote",[a("center",[s._v("rows[当前行][当前元素值] = rows[5][2] = 1")]),s._v(" "),a("center",[s._v("col[当前列][当前元素值] = col[4][2] = 1")])],1),s._v(" "),a("br"),s._v(" "),a("p",[s._v("但是这里有个问题,如果元素值是 9,那就越界了!所以我们对当前元素值减个一处理一下:")]),s._v(" "),a("blockquote",[a("center",[s._v("rows[当前行][当前元素值] = rows[5][2-1] = 1")]),s._v(" "),a("center",[s._v("col[当前列][当前元素值] = col[4][2-1] = 1")])],1),s._v(" "),a("br"),s._v(" "),a("p",[s._v("现在的题是,对于 sbox 该如何设置呢?我们用下面的公式来计算得到:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("boxIndex = (row / 3) * 3 + columns / 3\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("其实很容易理解:我们把上面的第6行5列代入到这个公式里,(5 / 3) * 3 + 4 / 3 = 3 + 1 = 4。这个 4 也就代表最终落到 4 的这个小区域中。")]),s._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(931),alt:"PNG"}}),s._v(" "),a("p",[s._v("我猜有人不能理解这个算式(是的,连公式都称不上),所以我再解释一下它是怎么来的。比如上面的第 6 行,row 为 5,5/3=1 可以理解为 "),a("strong",[s._v("此时在第1大行上")]),s._v(",然后 (5/3)*3,是计算出当前第一大行处的 boxIndex 值。最后再加上的 4/3,意思是向右偏移几个大列。")]),s._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(932),alt:"PNG"}}),s._v(" "),a("p",[s._v("根据分析,给出代码:")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isValidSudoku")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" board"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" rows "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" col "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sbox "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" board"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" board"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("board"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'.'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" num "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" board"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'1'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" boxIndex "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("rows"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("num"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n rows"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("num"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("col"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("num"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n col"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("num"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("sbox"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("boxIndex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("num"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n sbox"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("boxIndex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("num"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("p",[s._v("执行结果:")]),s._v(" "),a("img",{staticStyle:{zoom:"80%"},attrs:{src:n(933),alt:"PNG"}}),s._v(" "),a("h2",{attrs:{id:"_03、总结"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、总结"}},[s._v("#")]),s._v(" 03、总结")]),s._v(" "),a("p",[s._v("最后,我在这里分享给大家一个很难很难的数独,欢迎大家来挑战!!挑战成功的,评论区留下你的答案!")]),s._v(" "),a("img",{attrs:{src:n(934),alt:"PNG"}}),s._v(" "),a("p",[s._v("好了,今天的题目就讲完了,我觉得讲的还是挺好的。大家要是认为ok的话,给我来个转发吧~感谢!")])])}),[],!1,null,null,null);t.default=r.exports},927:function(s,t,n){s.exports=n.p+"assets/img/1.2c7f8b37.gif"},928:function(s,t,n){s.exports=n.p+"assets/img/2.a554b385.jpg"},929:function(s,t,n){s.exports=n.p+"assets/img/3.cd940b06.jpg"},930:function(s,t,n){s.exports=n.p+"assets/img/4.319ecb17.jpg"},931:function(s,t,n){s.exports=n.p+"assets/img/5.96253984.jpg"},932:function(s,t,n){s.exports=n.p+"assets/img/6.b657cbf9.jpg"},933:function(s,t){s.exports="data:image/jpeg;base64,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"},934:function(s,t){s.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/27.66093a0e.js b/learning/.vuepress/dist/assets/js/27.66093a0e.js deleted file mode 100644 index 07a75835..00000000 --- a/learning/.vuepress/dist/assets/js/27.66093a0e.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{1073:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天是小浩算法 “365刷题计划” 第103天。分享的这道题虽然很简单,但是在笔试或者面试当中,出现的频率却非常高。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("经典常考类算法题目。")])]),s._v(" "),n("br"),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第796题:旋转字符串")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定两个字符串, A 和 B。A 的旋转操作就是将 A 最左边的字符移动到最右边。例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' 。如果在若干次旋转操作之后,A 能变成B,那么返回True。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: A = 'abcde', B = 'cdeab'\n输出: true\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: A = 'abcde', B = 'abced'\n输出: false\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("br"),s._v(" "),n("p",[s._v("**注意:**A 和 B 长度不超过 100。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("题意还是很容易理解的,说白了就是每次把前面的元素放到最后面:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(559),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[s._v("#")]),s._v(" 02、题解分析")]),s._v(" "),n("blockquote",[n("p",[s._v("这道题目看起来简单,但其实很容易出错。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("这道题目最容易想到的解法,其实就是跟着题意来。每次将旋转后的A和目标串对比:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(560),alt:"PNG"}}),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("rotateString")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("equals")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("equals")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" first "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("substring")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" last "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("substring")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" last "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" first"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("equals")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br")])]),n("p",[s._v("但是代码其实并不优雅,我们继续观察一下这个字符串:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(561),alt:"PNG"}}),s._v(" "),n("p",[s._v("无论它怎样旋转,最终的 A + A包含了所有可以通过旋转操作从 A 得到的字符串:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(562),alt:"PNG"}}),s._v(" "),n("p",[s._v("那我们是不是只需要判断 B 是否为 A + A 的子串就可以了:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("rotateString")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("contains")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(563),alt:"PNG"}}),s._v(" "),n("p",[s._v("一般面试写的话,基本就是到这个程度。但是大概率面试官这时还会问你一个问题:如何继续进行优化?")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(564),alt:"PNG"}}),s._v(" "),n("p",[s._v("注意我们上面问题,其实已经转化为了:"),n("strong",[s._v("判断 B 是否为 A + A 的子串")]),s._v("。那我们就可以引申答出 KMP,SUNDAY,BF 等字符串匹配策略。(当然,这里其实 SUNDAY 并不是特别适合)")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("然后就是用相应的匹配策略,来实现转化后的问题。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("这里附上一份 KMP 解题代码:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("rotateString")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("N")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("N")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("N")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//Compute shift table")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" shifts "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("N")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("fill")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("shifts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("N")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v(" shifts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n shifts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" left"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//Find match of B in A+A")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" matchLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),s._v(" c"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("A")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("toCharArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("matchLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("B")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("matchLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n matchLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v(" shifts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("matchLen"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("matchLen "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("N")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br")])]),n("p",[s._v("这个有兴趣可以看看,代码是 leetcode 官方的。")]),s._v(" "),n("br"),s._v(" "),n("h2",{attrs:{id:"_03、算法小知识"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、算法小知识"}},[s._v("#")]),s._v(" 03、算法小知识")]),s._v(" "),n("blockquote",[n("p",[s._v("KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。")])]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(565),alt:"PNG"}}),s._v(" "),n("p",[s._v("大家有兴趣可以看我之前写的一篇KMP教程:")]),s._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.3.字符串系列/1.3.字符串系列/306.html"}},[s._v("KMP(上篇)")])],1)])}),[],!1,null,null,null);t.default=e.exports},559:function(s,t){s.exports="data:image/jpeg;base64,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"},560:function(s,t,a){s.exports=a.p+"assets/img/2.a079fe2e.jpg"},561:function(s,t,a){s.exports=a.p+"assets/img/3.7af03277.jpg"},562:function(s,t,a){s.exports=a.p+"assets/img/4.8b0cf254.jpg"},563:function(s,t){s.exports="data:image/jpeg;base64,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"},564:function(s,t,a){s.exports=a.p+"assets/img/6.791fc1f7.gif"},565:function(s,t,a){s.exports=a.p+"assets/img/7.f1547150.gif"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/28.6437e3e0.js b/learning/.vuepress/dist/assets/js/28.6437e3e0.js deleted file mode 100644 index 92773d1a..00000000 --- a/learning/.vuepress/dist/assets/js/28.6437e3e0.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{1082:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("在之前的系列中。我们学习了DFS、BFS,也熟悉了平衡二叉树,满二叉树,完全二叉树,BST(二叉搜索树)等概念。在本节中,我们将学习一种二叉树中常用的操作 —"),n("strong",[t._v("剪枝")]),t._v("。这里额外说一点,就本人而言,对这个操作以及其衍化形式的使用会比较频繁。因为我是做规则引擎的,在规则引擎中,我们会有一个概念叫做"),n("strong",[t._v("决策树")]),t._v(",那"),n("strong",[t._v("如果一颗决策树完全生长,就会带来比较大的过拟合问题")]),t._v("。因为完全生长的决策树,每个节点只会包含一个样本。所以我们就"),n("strong",[t._v("需要对决策树进行剪枝操作,来提升整个决策模型的泛化能力")]),t._v("(ML概念)... 听不懂也没关系,简单点讲,就是我觉得这个很重要,或者每道算法题都很重要。如果你在工作中没有用到,不是说明算法不重要,而可能是你还不够重要。")])]),t._v(" "),n("h2",{attrs:{id:"_01、剪枝概述"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、剪枝概述"}},[t._v("#")]),t._v(" 01、剪枝概述")]),t._v(" "),n("p",[t._v("假设有一棵树,最上层的是root节点,而"),n("strong",[t._v("父节点会依赖子节点")]),t._v("。如果现在有一些节点已经标记为无效,我们要删除这些无效节点。"),n("strong",[t._v("如果无效节点的依赖的节点还有效,那么不应该删除")]),t._v(",如果无效节点和它的子节点都无效,则可以删除。剪掉这些节点的过程,称为剪枝,目的是"),n("strong",[t._v("用来处理二叉树模型中的依赖问题")]),t._v("。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("我们还是通过一道题目来进行具体学习。")]),t._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第814题:二叉树的剪枝")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [1,null,0,0,1]\n输出: [1,null,0,null,1]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(648),alt:"img"}}),t._v(" "),n("p",[t._v("**解释: **")]),t._v(" "),n("ul",[n("li",[t._v("只有红色节点满足条件“所有不包含 1 的子树”。")]),t._v(" "),n("li",[t._v("右图为返回的答案。")])]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [1,0,1,0,0,0,1]\n输出: [1,null,1,null,1]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(649),alt:"img"}}),t._v(" "),n("p",[n("strong",[t._v("示例3:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [1,1,0,1,1,0,1,0]\n输出: [1,1,0,1,1,null,1]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(650),alt:"img"}}),t._v(" "),n("p",[n("strong",[t._v("说明:")])]),t._v(" "),n("ul",[n("li",[t._v("给定的二叉树最多有 100 个节点。")]),t._v(" "),n("li",[t._v("每个节点的值只会为 0 或 1 。")])]),t._v(" "),n("h2",{attrs:{id:"_03、递归求解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、递归求解"}},[t._v("#")]),t._v(" 03、递归求解")]),t._v(" "),n("p",[t._v("二叉树的问题,大多都可以通过递归进行求解。我们直接进行分析。假设我们有二叉树如下:[0,1,0,1,0,0,0,0,1,1,0,1,0]")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("就是下面这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(651),alt:"img"}}),t._v(" "),n("p",[t._v("剪枝之后是这样:")]),t._v(" "),n("img",{attrs:{src:a(652),alt:"img"}}),t._v(" "),n("p",[t._v("剪什么大家应该都能理解。那关键是怎么剪?过程也很简单,"),n("strong",[t._v("在递归的过程中,如果当前结点的左右节点皆为空,且当前结点为0,我们就将当前节点剪掉即可。")])]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(653),alt:"img"}}),t._v(" "),n("p",[t._v("根据分析,很自然得出代码:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("pruneTree")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deal")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deal")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" node "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tnode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deal")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tnode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deal")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" node\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])]),n("p",[t._v("运行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(654),alt:"img"}}),t._v(" "),n("br"),t._v(" "),n("blockquote",[n("p",[t._v("我一度认为算法题的意义绝不简简单单只是为了面试,一度想把这种观念传递给认识我的朋友们。至少在工作中,对于栈,优先队列,红黑树,图等知识或多或少都是有机会能用到。不记得是不是李开复说的了,"),n("strong",[t._v("算法是提高智商少数为之可行的手段")]),t._v("。真心希望大家可以在这个过程中为之成长,我们大家一起努力啊。")])])])}),[],!1,null,null,null);s.default=e.exports},648:function(t,s,a){t.exports=a.p+"assets/img/1.1ad4dbe0.jpg"},649:function(t,s,a){t.exports=a.p+"assets/img/2.aff43165.jpg"},650:function(t,s,a){t.exports=a.p+"assets/img/3.83332a28.jpg"},651:function(t,s,a){t.exports=a.p+"assets/img/4.1a533a6e.jpg"},652:function(t,s,a){t.exports=a.p+"assets/img/5.9f7794ab.jpg"},653:function(t,s,a){t.exports=a.p+"assets/img/6.b0b8a3f6.jpg"},654:function(t,s){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/29.fc8a7331.js b/learning/.vuepress/dist/assets/js/29.fc8a7331.js deleted file mode 100644 index d4258241..00000000 --- a/learning/.vuepress/dist/assets/js/29.fc8a7331.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{1097:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("在本系列中,将为大家讲解"),n("strong",[t._v("排序算法")]),t._v("相关内容。同时,由于网上排序相关的教程太多了,我会尽可能的讲解一些不一样的内容。而不是按照 排序讲解 标准Titile,什么“十大排序算法”,“经典排序算法”,“排序算法必知必会” 之类的一个一个来进行讲解。所以,如果内容引起不适,概不负责...")])]),t._v(" "),n("h2",{attrs:{id:"_01、排序的重要性"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、排序的重要性"}},[t._v("#")]),t._v(" 01、排序的重要性")]),t._v(" "),n("p",[t._v("在leetcode中,直接搜索"),n("strong",[t._v("排序标签")]),t._v("出现的题目有80余道,这是与排序直接相关的题目,不包括其他一些用到排序思想的题目。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(704),alt:"PNG"}}),t._v(" "),n("p",[t._v("同时,各个公司在面试的过程中,或多或少都直接或间接问到过排序相关的内容(毕竟面试官不知道问什么时,都会用排序算法来救救场。不要问我是怎么知道的...),尤其是 "),n("strong",[t._v("快排、堆排序、全排列")]),t._v(" 等 Topic,在面试中屡试不爽。")]),t._v(" "),n("br"),t._v(" "),n("center",[n("b",[t._v(" 百度:堆排序 ")])]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(705),alt:"PNG"}}),t._v(" "),n("center",[n("b",[t._v(" 滴滴:全排列 ")])]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(706),alt:"PNG"}}),t._v(" "),n("p",[t._v("综上,得出结论**:为了offer~排序很重要,我们需要进行掌握。**")]),t._v(" "),n("h2",{attrs:{id:"_02、从-插入排序-说起"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、从-插入排序-说起"}},[t._v("#")]),t._v(" 02、从“插入排序”说起")]),t._v(" "),n("p",[t._v("为什么要先讲"),n("strong",[t._v("插入排序")]),t._v("的原因,是因为我觉得插入排序是最容易理解的一个,而且插入这个词有一定的神秘感(好吧,反正我不觉得冒泡最容易理解,谁没事一天去观察吐泡泡?)")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("插入排序:就是炸金花的时候,你"),n("strong",[t._v("接一个同花顺")]),t._v("的过程。(标准定义:在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的)")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(707),alt:"PNG"}}),t._v(" "),n("p",[t._v("代码示例:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert_sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert_sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n fmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])]),n("p",[t._v("输入:")]),t._v(" "),n("img",{attrs:{src:a(708),alt:"PNG"}}),t._v(" "),n("p",[t._v("讲解完了插入排序,我们根据其思想,完成下面这道题目吧")]),t._v(" "),n("h2",{attrs:{id:"_03、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、题目分析"}},[t._v("#")]),t._v(" 03、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第905题:按奇偶排序数组")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:[3,1,2,4]\n输出:[2,4,3,1]\n输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("br"),t._v(" "),n("p",[n("strong",[t._v("提示:")])]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",[n("code",[t._v("1 <= A.length <= 5000\n0 <= A[i] <= 5000\n")])])]),n("h2",{attrs:{id:"_04、题目图解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、题目图解"}},[t._v("#")]),t._v(" 04、题目图解")]),t._v(" "),n("p",[t._v("这道题,按照插入排序的思想,很容易可以想到题解。我们只需要遍历数组,当我们"),n("strong",[t._v("遇到偶数时")]),t._v(",**将其插入到数组前最近的一个为奇数的位置,**"),n("strong",[t._v("与该位置的奇数元素交换")]),t._v("。为了达成该目的,我们引入一个指针 j,来维持这样一个奇数的位置。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("假设我们的数组为:[3,1,2,4]")]),t._v(" "),n("img",{attrs:{src:a(709),alt:"PNG"}}),t._v(" "),n("p",[t._v("根据以上分析,得到代码:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("sortArrayByParity")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("A "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tj "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" A "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" A"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tA"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" A"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" A"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" A"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\tj"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" A\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(710),alt:"PNG"}})],1)}),[],!1,null,null,null);s.default=r.exports},704:function(t,s,a){t.exports=a.p+"assets/img/1.057d45eb.jpg"},705:function(t,s,a){t.exports=a.p+"assets/img/2.b43303bc.jpg"},706:function(t,s,a){t.exports=a.p+"assets/img/3.f59824c9.jpg"},707:function(t,s,a){t.exports=a.p+"assets/img/4.e93db3df.gif"},708:function(t,s){t.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAd0AAABOCAMAAABSZjwFAAAAbFBMVEUnKCKCrszMzMzMv5thKCInKH+szMyshCLBml4nhKzMrn9hmsEnY5vBzMzMzMGcYyInKF6cv8yszMGsrsGcv8GsmpvBzMGCrsHMzKyCKCKsrqyszKzBzKxhhKzMv6ysv8yshF6crszBv5vBrn+vtzurAAADDUlEQVR42u2dW5OaQBBGGVwv42DETWI0u7n///+Y4iJ0N2Dtg6k07Dkv64hatXUcGaa/arIMAAAAAP4dIc9XTw/6rPUmz7f/+x8CQdi1D2K+759NeS5FFQf9HajGSmP4cKz/lifseuJmd/38UdrdDV/YHy4/HbPY+qzfu/l8xq5HbnbDPt23Kw/XRnuPX44Fdl3S2o2X63271pu0m2XY9Uljt7KSzHlXztU4WHsFNcauTxq7lVnz01ue9DhermKU1Ai7TqntlqdqjZyLhdLIifZZHE36pdh1SndFZG0WBy0qiZ9iKxe7Thm1W81lKTDm6rxb7VrIJ1I38bHri7B7wId0YNcX2F0y7DMDAAAAAMD7hSuiJXOrANoaQnGwW49iTPJmJvR7VarEV56+Srsvqt5H8mYu9HaLV6Ewrb5N281I3syE8QpgcT7Gt9ulAuiV1u56o867YZdFc941JV2SN3Ogn7tiNlZmo1lKR6WX5M0sEBXA/mGogzh6WUzyZoaIVdVZGYt3QpAkb2ZCY3fkxCrtRh2AJXkzF8hmLBnsLhn2mQEAAAAA4P3CFdGSuXVW0DuRwdYQsiDHydYYSN74pN1nfrlOFfUa4vcf0q7e4CJ545XJGpGq+K03P0/TdkneeOVtFcCwL+/YpQLolc6u6oJSJWCFp+L1qu2aljjYdUpnN5ilc3na9Q+3A2+6JQ52fdL1mrvY2GOfkazC6bm9ckrY9U9rdyhXR1oH3nRLHOz6pLHbzM5uNtb9q+wv8TaTh+XVMckbr5DNWDLYXTLsMwMAAAAAwPuFK6Ilc9vNKA6qKqCb2ti7TZmWOPU+Zv12djN80dpNq1+yvGua2mT6blO2JU7x+6l7HrueaKsIf7S9YY1IV/x0SxzseqWv3t+3q7yZljjY9cqkXZXVMHebMi1xqvNuUx/Gri+m7CZbzhet6MZa4jSvx64vJuwO+p7IBOxYS5ymUx12fTFudyhX3W1q2BKnDdFh1xd9zxuRvLFNbeIgM6fsVsmb5kuCXV+QzVgy2F0y7DMDAAA8nr+uwSW2rXcY9wAAAABJRU5ErkJggg=="},709:function(t,s,a){t.exports=a.p+"assets/img/6.9b45e80f.jpg"},710:function(t,s,a){t.exports=a.p+"assets/img/7.dd25f1d8.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/3.405cb1d3.js b/learning/.vuepress/dist/assets/js/3.405cb1d3.js deleted file mode 100644 index bdf4193d..00000000 --- a/learning/.vuepress/dist/assets/js/3.405cb1d3.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{1074:function(t,s,n){"use strict";n.r(s);var a=n(3),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("blockquote",[a("p",[t._v("今天打算为大家讲解一下KMP。")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("KMP 其实已经念念叨叨挺长时间了,一直没写的原因是我觉得自己可能写不好。"),a("strong",[t._v("与其误人子弟,宁可错失良机")]),t._v("。毕竟自己懂是一码事,能讲清楚是另一码事。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("所以为了写好这篇文章,我又去参考了很多别的资料。嗯。。"),a("strong",[t._v("我发现网上讲解 KMP 的文章实在是太多了,但大多数看完后还是云里雾里(纵然我已经会了,读对方的文章还是懵逼)")]),t._v("。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("我希望我的这篇文章能达到的目的是:"),a("strong",[t._v("让小白也能学会KMP")]),t._v("。如果届时达到了目的,请帮我进行一次转发。否则,你只需要叉掉即可。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("话不多说,我们直接开始。")]),t._v(" "),a("h2",{attrs:{id:"_01、图解分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、图解分析"}},[t._v("#")]),t._v(" 01、图解分析")]),t._v(" "),a("blockquote",[a("p",[t._v("KMP 算法常被称为“看毛片算法”,由一个姓K的,一个姓M的,一个姓P 一起提出。"),a("strong",[t._v("是一种由暴力匹配改进的字符串匹配算法")]),t._v("。")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("我看了下网上的 KMP 讲解基本都是由 "),a("strong",[t._v("next匹配表")]),t._v(" 开始讲起。但是说实话,如果是我第一次看这玩意,你给我讲 next匹配表,我肯定一脸懵逼。所以我打算换一种讲法。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("上面说了,"),a("strong",[t._v("KMP 是由暴力匹配改进的字符串匹配算法")]),t._v("。那什么是暴力匹配?假若我们的目标串和模式串如下图。(之前在 Sunday 匹配中讲过,"),a("strong",[t._v("所有的字符串匹配算法第一步都是对齐")]),t._v("。不管是 暴力匹配,KMP,Sunday,BM 都是一样)")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(566),alt:"PNG"}}),t._v(" "),a("p",[t._v("暴力匹配,就是目标串和模式串一个一个的对比。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(567),alt:"PNG"}}),t._v(" "),a("p",[t._v("当A匹配成功,继续开始比对,直到我们遇见一个不匹配的字符。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(568),alt:"PNG"}}),t._v(" "),a("p",[t._v("然后我们调整模式串,"),a("strong",[t._v("从目标串的下一个字符开始匹配(注意,这里是核心)")]),t._v("。很遗憾,还是没有匹配成功(A和B)")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(569),alt:"PNG"}}),t._v(" "),a("p",[t._v("继续这个步骤:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(570),alt:"PNG"}}),t._v(" "),a("p",[t._v("直到我们完成整个匹配过程:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(571),alt:"PNG"}}),t._v(" "),a("p",[t._v("假若我们目标串长度为m,模式串长度为n。模式串与目标串至少比较m次,又因其自身长度为n,所以理论的时间复杂度为**O(m*n)。**但我们可以看到,"),a("strong",[t._v("因为途中遇到不能匹配的字符时,就可以停止,并不需要完全对比(比如上图第2行)")]),t._v("。所以虽然理论时间复杂度为 "),a("strong",[t._v("O(m*n)")]),t._v(" ,但其实大部分情况效率高很多。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("暴力匹配又称为BF算法,暴风算法。代码比较简单:")]),t._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//GO ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("BFSearch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("haystack "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" needle "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n l1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("haystack"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n l2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("needle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" l1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" l2 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" haystack"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" needle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n i"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" \n j"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-=")]),t._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" l2 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" j\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])]),a("p",[t._v("接下来我们开始说KMP。假如还是上面的这个串。最开始其实还是一样,我们依次对比A-A,B-B,C-C,直到遇见第一个无法匹配的字符A-E。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(572),alt:"PNG"}}),t._v(" "),a("p",[t._v("现在开始不一样了,如果按照上面的暴力匹配。此时目标串我们应该回到 B 这个位置,模式串应直接回到头。但是按照 KMP 的思路,"),a("strong",[t._v("在我们在第一次匹配后,因为 BC 匹配成功了,所以我们知道了 BC 不等于 A(注意这个逻辑关系)")]),t._v(":")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(573),alt:"PNG"}}),t._v(" "),a("p",[t._v("那既然已知了 BC 不等于 A,我们就没必要用 A 和 BC 进行匹配了。那我们直接用 A 越过前面不需要匹配的 BC:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(574),alt:"PNG"}}),t._v(" "),a("p",[t._v("继续向下适配,我们发现在 D-C 处,匹配不上了。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(575),alt:"PNG"}}),t._v(" "),a("p",[t._v("那我们因为前面的 B 又匹配成功了,那我们就知道 B 不等于 A,所以我们又可以直接略过前面的 B:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(576),alt:"PNG"}}),t._v(" "),a("p",[t._v("也就是说,我们可以直接从 D 处开始比较:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(577),alt:"PNG"}}),t._v(" "),a("p",[t._v("继续向下比较:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(578),alt:"PNG"}}),t._v(" "),a("p",[t._v("到现在为止,你已经掌握了 KMP 的前百分之五十:"),a("strong",[t._v("在KMP中,如果模式串和目标串没有匹配成功,目标串不回溯")]),t._v("。现在我们需要换一个新串,来掌握接下来的百分之五十:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(579),alt:"PNG"}}),t._v(" "),a("p",[t._v("我们还是从头开始匹配,直到遇到第一个不匹配的字符:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(580),alt:"PNG"}}),t._v(" "),a("p",[t._v("到这里和上面的例子还是一样,"),a("strong",[t._v("因为我们的 BC 匹配成功了,所以我们知道 BC 不等于 A,所以我们可以跳过 BC(注意这个逻辑)")]),t._v(":")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(581),alt:"PNG"}}),t._v(" "),a("p",[t._v("所以我们从 A 处开始比较:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(582),alt:"PNG"}}),t._v(" "),a("p",[t._v("直到我们再次匹配失败:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(583),alt:"PNG"}}),t._v(" "),a("p",[t._v("我想到现在你已经知道怎么做了,来和我一起说。**因为前面的 B 匹配成功了,所以我们知道 B 不等于 A,所以我们可以跳过 B。**当然,跳过之后下一次的匹配直接失败了(A-D)。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(584),alt:"PNG"}}),t._v(" "),a("p",[t._v("重点来了!!!然后我们继续匹配下一位。我们发现这一次,我们的匹配基本就要匹配成功了,但是卡在了最后一步的比较(D-B)。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(585),alt:"PNG"}}),t._v(" "),a("p",[t._v("现在怎么办?假若我们把两个串修改一下(把里边的AB修改成XY),那么显而易见,你当然知道从哪里开始:")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(586),alt:"PNG"}}),t._v(" "),a("p",[t._v("但是现在的问题是,在模式串中 AB 重复出现了,那我们是不是可以在下次比较的时候直接把 AB 给让出来?")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(587),alt:"PNG"}}),t._v(" "),a("p",[t._v("所以我们把这个AB让出来,让出来之后,我们相当于在 模式串 上又跳过了 2个字符。(也就是说模式串下一次匹配从C开始)")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(588),alt:"PNG"}}),t._v(" "),a("p",[t._v("其实到这里 KMP 就基本完事了。我们可以稍微总结下:")]),t._v(" "),a("br"),t._v(" "),a("ul",[a("li",[a("p",[t._v("如果模式串和目标串匹配成功,长串短串都加一")])]),t._v(" "),a("li",[a("p",[t._v("如果模式串和目标串没有匹配成功:")])]),t._v(" "),a("li",[a("ul",[a("li",[t._v("目标串不回溯("),a("strong",[t._v("在上面的分割线之前,我都是给你讲这个")]),t._v(")")]),t._v(" "),a("li",[t._v("模式串回溯到匹配未成功的字符前的子串的相同的真前缀和真后缀的最大长度**(在上面的分割线之后,我重点是给你讲这个)**")])])])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("好了,我知道上面匹配成功后的第二种情况有点拗口。所以我又单独拎出来和你说。这句话是啥意思呢?")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("假若我们有个串 abbaab:")]),t._v(" "),a("ul",[a("li",[t._v("a, ab, abb, abba, abbaa,就是它的真前缀。")]),t._v(" "),a("li",[t._v("b, ab, aab, baab, bbaab, 就是它的真后缀。")]),t._v(" "),a("li",[t._v("“真”字,"),a("strong",[t._v("说白了就是不包含自己")]),t._v("。")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("在我们上面的示例中,未成功的字符前的子串是 ABCEAB,它相同的最长的真前缀和真后缀就是 AB,最大长度就是2。所以我们就把模式串回溯到第2个位置处。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(589),alt:"PNG"}}),t._v(" "),a("p",[t._v("我猜有人要说话了,“不是说模式串是回溯到真前缀和真后缀的最大长度位置处吗?那为什么上面的第一个例子,是回到了起始位置呢?”")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(590),alt:"PNG"}}),t._v(" "),a("p",[t._v("其实,不是我们没有回溯模式串,而是此时的最大长度(指的是相同真前缀和真后缀的最大长度,后面都省略)其实就是 0。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("那我们怎么获取最大长度呢?就可以很自然的引入 next表 了。"),a("strong",[t._v("不管你是把next表 理解成描述最大长度的东东,还是把 next表 理解成用来回溯模式串的东东,其实都是可以的!!!这也是为什么你在网上看到很多人文章对next表理解不一致的原因。")])]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(591),alt:"PNG"}}),t._v(" "),a("p",[t._v("我们拿上面标黄色那个解释一下,ABCEAB 不包含自己,那就是 ABCEA,ABCEA的 真前缀 和 真后缀 为:")]),t._v(" "),a("br"),t._v(" "),a("ul",[a("li",[t._v("A,AB,ABC,ABCE")]),t._v(" "),a("li",[t._v("A,EA,CEA,BCEA")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("所以最大长度就是 1。那这个 1 干啥用呢?我们可以在下次比的时候就直接把这个 A 让过去,直接从 B 开始比。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(592),alt:"PNG"}}),t._v(" "),a("p",[t._v("这里注意,如果我们模式串稍微修改成下面这样,此时 F 的最大长度就是 0,并不是 2。初学者很容易把 AB 误认为是最长相同的真前缀和真后缀。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(593),alt:"PNG"}}),t._v(" "),a("p",[t._v("到这里为止,其实 KMP 的思路已经快说完了。但是大神说话了,大神认为这个匹配表,还得再改改,不然会出问题。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(594),alt:"PNG"}}),t._v(" "),a("p",[t._v("为什么会出问题呢,我们说了,对 KMP 而言,**如果没有匹配成功,**"),a("strong",[t._v("目标串是不回溯的")]),t._v("。那如果目标串不回溯,如果模式串一直都是 0,是不是意味着这个算法就没办法继续进行下去?所以大神把这个 next匹配表 改了一下,把 0 位置处的 next表 值改为了 -1。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(595),alt:"PNG"}}),t._v(" "),a("p",[t._v("那这个 -1 是干嘛用的呢?"),a("strong",[t._v("其实只是一个代码技巧")]),t._v("!大家注意一下第 7 行代码,假若没有 j == -1,此时如果 next[j] 等于 0,是不是就进死循环了。而加上这一句,相当于说无论什么情况下,模式串的第一个字符都可以匹配(对 j 而言,此时 -1++,是不是还是0。但是此时模式串却向前走了。不就不会因为死循环而卡死了吗?"),a("strong",[t._v("请大家自行脑补没有 j==-1 这行代码时,死循环卡死在11行的过程")]),t._v(")")]),t._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//GO ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("KmpSearch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("haystack "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" needle "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" next "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n l1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("haystack"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n l2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("needle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" l1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" l2 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" haystack"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" needle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n i"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n j"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" next"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" l2 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" j\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br")])]),a("p",[t._v("到这里为止,其实 KMP 就讲的差不太多了,代码还是比较简单的。但是麻烦的是?一般我们并没有现成的 next表 直接使用。那 next表 又该如何生成呢?")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("其实 next表 的生成,我们也可以看作是字符串匹配的过程:"),a("strong",[t._v("即原模式串和原模式串自身前缀进行匹配的过程。")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("我们用下面这个字符串来讲一下:XXYXXYXXX。")]),t._v(" "),a("img",{staticStyle:{zoom:"80%"},attrs:{src:n(596),alt:"PNG"}}),t._v(" "),a("p",[t._v("对于该字符串:")]),t._v(" "),a("br"),t._v(" "),a("ul",[a("li",[t._v("真前缀为 X,XX,XXY,XXYX,XXYXX.....")]),t._v(" "),a("li",[t._v("真后缀为 X,XX,XXX,YXXX,XYXXX.....")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("为了方便大家理解,我画了两种图(左图是真实的填表过程,右图是脑补过程):")]),t._v(" "),a("br"),t._v(" "),a("ul",[a("li",[a("p",[t._v("首先 index[0] 肯定是填写 0")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(597),alt:"PNG"}})]),t._v(" "),a("li",[a("p",[t._v("然后填写 index[1]。"),a("strong",[t._v("如果匹配上,我们把 i 和 j 都加一")]),t._v("。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(598),alt:"PNG"}})]),t._v(" "),a("li",[a("p",[t._v("然后填写 index[2],"),a("strong",[t._v("如果没有匹配上,就把 j 回溯到 j 当前指向的前一个位置的 index 处。在这里,也就是 0 。")])]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(599),alt:"PNG"}})]),t._v(" "),a("li",[a("p",[t._v("注意,是回溯完成后才开始填表,此时 index[2] 为 0")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(600),alt:"PNG"}})]),t._v(" "),a("li",[a("p",[t._v("然后我们移动 i,发现下一位匹配成功。同时给 i 和 j 加一,并填表。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(601),alt:"PNG"}})]),t._v(" "),a("li",[a("p",[t._v("填完表后,我们发现下一位仍然匹配。继续移动 i 和 j。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(602),alt:"PNG"}}),t._v(" "),a("center",[t._v("(填表)")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(603),alt:"PNG"}}),t._v(" "),a("center",[t._v("(仍然匹配,继续移动 i 和 j)")])],1),t._v(" "),a("li",[a("p",[t._v("仍然匹配成功,继续重复上面的操作。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(604),alt:"PNG"}}),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(605),alt:"PNG"}}),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(606),alt:"PNG"}})]),t._v(" "),a("li",[a("p",[t._v("注意,"),a("strong",[t._v("到这里开始匹配失败了")]),t._v("。上面说了,如果没有匹配成功,"),a("strong",[t._v("把 j 回溯到 j 当前指向的前一个位置的 index 处")]),t._v("。在这里,也就是 2 。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(607),alt:"PNG"}}),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(608),alt:"PNG"}}),t._v(" "),a("center",[t._v("(j 的前一个位置的 index)")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(609),alt:"PNG"}}),t._v(" "),a("center",[t._v("(回溯完成后,我们发现仍然不匹配)")])],1),t._v(" "),a("li",[a("p",[t._v("继续这个回溯的过程。。。(这一步是整个 next表 构建的核心)")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(610),alt:"PNG"}}),t._v(" "),a("center",[t._v("(这个蓝色的小标是下次的回溯位置)")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(611),alt:"PNG"}}),t._v(" "),a("center",[t._v("(回溯后,我们发现匹配成功了)")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(612),alt:"PNG"}})],1)]),t._v(" "),a("center",[t._v("(然后我们可以填表了)")]),t._v(" "),a("ul",[a("li",[t._v("注意!这里为什么是填2,其实就是填写上次回溯到的那个匹配成功的位置的index值加1。")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("细心的读者,估计到这里发现一点问题。我们把填完后的表拿出来:")]),t._v(" "),a("img",{staticStyle:{zoom:"80%"},attrs:{src:n(613),alt:"PNG"}}),t._v(" "),a("p",[t._v("我们发现这个表和我们最上面说的不太一样,我们最上面说的 next表 的首位是 -1,并且要记录哪一个 index 位置的 next 值,是去看该元素前面所有子串的真前缀和真后缀的最大长度。这句话有点拗口,我们还是看到下面这个。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(614),alt:"PNG"}}),t._v(" "),a("p",[t._v("比如 index 为 5 时,此时next的值是看 ABCEA 的最大长度(真后缀A,真前缀A,所以为1)。"),a("strong",[t._v("但是在我们下面这个表中,我们发现我们是记录的当前索引位置处的最大长度")]),t._v("。其实我这里要说一下,下面这个表,其实我们一般称为"),a("strong",[t._v("部分匹配表")]),t._v(",或者pmt。")]),t._v(" "),a("img",{staticStyle:{zoom:"80%"},attrs:{src:n(615),alt:"PNG"}}),t._v(" "),a("p",[t._v("那这个表和我们的 next 表有什么关系吗,我们发现把这个表往后串一位,就得到了我们最终的 next 表。")]),t._v(" "),a("img",{staticStyle:{zoom:"80%"},attrs:{src:n(616),alt:"PNG"}}),t._v(" "),a("p",[t._v("但是但是但是!!!并不是所有讲解 KMP 的地方都会给你提一提部分匹配表的概念,有的地方干脆就直接把这个 pmt 等同于 next 表使用。**这种属于错误讲解吗?其实不是的!**因为我上面也说了,next表 在最初始位置补 -1,或者甚至干脆把 pmt 的第一位补一个 -1 当作 next表,这都统统是可以的。"),a("strong",[t._v("因为最关键的还是说你到时候怎么去使用!毕竟 next表 的定义也是人们给它赋予的!")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("举个例子,假如你 next表 的首位不补 -1,我们其实就可以在前面 KMP 的算法中,去掉 -1 的逻辑。而单独加一个 if 判断来解决上面说的死循环的问题。")]),t._v(" "),a("h2",{attrs:{id:"_02、总结"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、总结"}},[t._v("#")]),t._v(" 02、总结")]),t._v(" "),a("p",[t._v("KMP上篇到这里就结束了! KMP系列打算分上下两篇来讲,第一讲就是讲明白 KMP 是干嘛的,next 表是干嘛的,pmt 又是干嘛的。第二讲会给大家讲讲关于 next表 的计算,以及 next表 的优化。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("总之,我个人认为本篇内容放在全网讲解KMP的文章里,质量都还是可以的。如果是小白,学习本篇文章其实就够了。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("今天的题目到这里就结束了,你学会了吗?快来评论区留下你的想法吧!")])],1)}),[],!1,null,null,null);s.default=e.exports},566:function(t,s,n){t.exports=n.p+"assets/img/1.7628e6d5.jpg"},567:function(t,s,n){t.exports=n.p+"assets/img/2.b40d95e1.jpg"},568:function(t,s,n){t.exports=n.p+"assets/img/3.349f556b.jpg"},569:function(t,s,n){t.exports=n.p+"assets/img/4.8d02ff74.jpg"},570:function(t,s,n){t.exports=n.p+"assets/img/5.bd4d699f.jpg"},571:function(t,s,n){t.exports=n.p+"assets/img/6.f292572e.jpg"},572:function(t,s,n){t.exports=n.p+"assets/img/7.addb94af.jpg"},573:function(t,s,n){t.exports=n.p+"assets/img/8.3632bf0c.jpg"},574:function(t,s,n){t.exports=n.p+"assets/img/9.09f2ebf9.jpg"},575:function(t,s,n){t.exports=n.p+"assets/img/10.f6fd1f71.jpg"},576:function(t,s,n){t.exports=n.p+"assets/img/11.764c6ff1.jpg"},577:function(t,s,n){t.exports=n.p+"assets/img/12.35e54239.jpg"},578:function(t,s,n){t.exports=n.p+"assets/img/13.4a93ccb0.jpg"},579:function(t,s,n){t.exports=n.p+"assets/img/14.18d289c2.jpg"},580:function(t,s,n){t.exports=n.p+"assets/img/15.9c3af63a.jpg"},581:function(t,s,n){t.exports=n.p+"assets/img/16.e723d28e.jpg"},582:function(t,s,n){t.exports=n.p+"assets/img/17.6750d734.jpg"},583:function(t,s,n){t.exports=n.p+"assets/img/18.955ef13b.jpg"},584:function(t,s,n){t.exports=n.p+"assets/img/19.99629451.jpg"},585:function(t,s,n){t.exports=n.p+"assets/img/20.21270649.jpg"},586:function(t,s,n){t.exports=n.p+"assets/img/21.c71ff2d5.jpg"},587:function(t,s,n){t.exports=n.p+"assets/img/22.0dfbaa1c.jpg"},588:function(t,s,n){t.exports=n.p+"assets/img/23.e483057b.jpg"},589:function(t,s,n){t.exports=n.p+"assets/img/24.faeadf2e.jpg"},590:function(t,s,n){t.exports=n.p+"assets/img/25.6750d734.jpg"},591:function(t,s,n){t.exports=n.p+"assets/img/26.120ba786.jpg"},592:function(t,s,n){t.exports=n.p+"assets/img/27.af418b95.jpg"},593:function(t,s,n){t.exports=n.p+"assets/img/28.0129bd8c.jpg"},594:function(t,s,n){t.exports=n.p+"assets/img/29.3fdbe3a3.jpg"},595:function(t,s,n){t.exports=n.p+"assets/img/30.fdddeb32.jpg"},596:function(t,s){t.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAj8AAABsCAMAAACy9yN1AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAllBMVEX////5+fnw8PD8/Pz09PTt7e339/c1NTUrKysqKioMDAwREREpKSlOTk43NzdTU1NgYGAPDw86Ojo2NjZRUVHnplIAAAAAgsZSpuf//8aEAAAAAFKl4///x4SEx///46VSAAAAVaXn/////+elVQDn/+cAAITG///GggBSUlLGx4QtLS0NDQ1aWlpeXl5fX18iIiIkJCTIZVULAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA3RJREFUeNrt3G1T2kAYheEABaWtFWhJBVRA0dJaa/v//1xnAkPZD7s0S8Keh9zPjIOZzGUO5JjwMiTLdtPKnGk7S+7KTiewEtkgaScpUlHaSYpUlHaSIhWlnaRIRWknKVJR2kmKVJRZazfvWs50nSV3Za8XWIlskLTTdKSitJMUqSjtJEUqSjtJkYrSTlKkorSTFKko7SRFKko7SZGK0k5SpKK0kxSpKO0kRSpKO0mRitJOUqSitJMUqSiz9m66bWcuLven7y71Aysv339AnpP8eLXfC7cm/mJ9uh5EzhB5VnJ0HTj+BPqTRc4QeVaS/iDpDzKVpD9I+oNMJekPkv4gU0n6g6Q/yFSS/iDpDzKVpD/I2vrj/db8Z1P3EVmfHH2JuX4Cxx/kZjh/IekPMpWkP0j6g0wl6Q+S/iBTSfqDpD/IVJL+IHX6M86/bm9vSiaNlpPp7Lb45W77F06wzaak/Q9Z8fFnnN8XD45vc/6mR8v5YvlQ7Jni5jTbbEraw7Li/jyuZrfZZOr73wokjZebezfe/mOfZptNSXtQBvvT2U2v44z/8/f5Yvm0ev5WPukRcj27zeaLmwhJ2mPl6Pt+L9yaxPQnG+d5ccwrnTReTqbLp5X3fFDPNpuS9pAM9ufflHj9tfafLA8804+Wd3nuPx/UtM2mpD0gK3/9Pl/kgcNdKGm8jH90SHukrLo/j6vnH7n/6VYgabwMPh2taZtNSXtIVt2fdX5f/JRPGi/j9whpj5UV96d4dTqZ+o94w+pl/B4h7dGy2v5s3x3b3pRJGi+z6D1C2uNlpf3ZFXVc9t35eLlRMXuEtBVIPj9F6nx+qnkfkfVJ+oOkP8hUkv4g6Q8yleT6CUiun4BMJTl/IekPMpWkP0j6g0wl6Q+S/iBTSfqDpD/IVJL+IOkPMpWkP0j6g0wl6Q+ytv60d9NtO3PxEjs/+8hzki9X+71wa+Iv1utgf345S29vgZWD33+Q5yRfB4Hjj//AFFjpXLcD2WBpJylSUdpJilSUdpIiFaWdpEhFaScpUlHaSYpUlHaSIhWlnaRIRWknKVJR2kmKVJR2kiIVpf/6Cd2W/1vzvV5gJbJB0k7TkYrSTlKkorSTFKko7SRFKko7SZGK0k5SpKK0kxSpKO0kRSpKO0mRitJOUqSitJMUqSjtJEUqSjtJkYryL0z9Vclt1SugAAAAAElFTkSuQmCC"},597:function(t,s,n){t.exports=n.p+"assets/img/32.55284143.jpg"},598:function(t,s,n){t.exports=n.p+"assets/img/33.2f9c6307.jpg"},599:function(t,s,n){t.exports=n.p+"assets/img/34.088e44cf.jpg"},600:function(t,s,n){t.exports=n.p+"assets/img/35.c4d9475c.jpg"},601:function(t,s,n){t.exports=n.p+"assets/img/36.16e8c10d.jpg"},602:function(t,s,n){t.exports=n.p+"assets/img/37.a96ce0dc.jpg"},603:function(t,s,n){t.exports=n.p+"assets/img/38.8d2e09fd.jpg"},604:function(t,s,n){t.exports=n.p+"assets/img/39.5bb938d3.jpg"},605:function(t,s,n){t.exports=n.p+"assets/img/40.02513dd2.jpg"},606:function(t,s,n){t.exports=n.p+"assets/img/41.278a834a.jpg"},607:function(t,s,n){t.exports=n.p+"assets/img/42.f0b0ff81.jpg"},608:function(t,s,n){t.exports=n.p+"assets/img/43.af5389d7.jpg"},609:function(t,s,n){t.exports=n.p+"assets/img/44.daadc38e.jpg"},610:function(t,s,n){t.exports=n.p+"assets/img/45.1509be0f.jpg"},611:function(t,s,n){t.exports=n.p+"assets/img/46.71cd5e77.jpg"},612:function(t,s,n){t.exports=n.p+"assets/img/47.cd5c0b80.jpg"},613:function(t,s){t.exports="data:image/jpeg;base64,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"},614:function(t,s,n){t.exports=n.p+"assets/img/49.b7bb9267.jpg"},615:function(t,s){t.exports="data:image/jpeg;base64,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"},616:function(t,s,n){t.exports=n.p+"assets/img/51.8438f2b4.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/30.019b90f7.js b/learning/.vuepress/dist/assets/js/30.019b90f7.js deleted file mode 100644 index 4bdb97ed..00000000 --- a/learning/.vuepress/dist/assets/js/30.019b90f7.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{1107:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天继续为大家讲解二分查找,分享一道知乎面试题。话不多说,直接看题。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题目有两个版本,一道简单,一道困难。我们从简单的开始讲起。")])]),t._v(" "),n("br"),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第153题:旋转排序数组最小值Ⅰ")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [3,4,5,1,2]\n输出: 1\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [4,5,6,7,0,1,2]\n输出: 0\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[t._v("#")]),t._v(" 02、题解分析")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题目的关键点取决于是否可以想到二分,难点:无。但是如果把题中的条件,换成数组中元素可重复,本题的难度就会大幅上升。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("当然,本题可以直接暴力搜索,但是这就就会被面试官撵出去。为了不被他撵出去,我们还是使用二分更为稳妥!"),n("strong",[t._v("在****二分搜索中,我们找到区间的中间点并根据某些条件决定去区间左半部分还是右半部分搜索")]),t._v("。但是麻烦的是,我们的数组被旋转了,因此肯定不能直接使用二分。那我们需要先观察一下,假若我们的原始数组如下:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(752),alt:"PNG"}}),t._v(" "),n("p",[t._v("无论怎么旋转,我们都可以得到一个结论,首元素 > 尾元素,像是下面这样。虽然不知道这个结论有什么用,但是我们先记下来。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(753),alt:"PNG"}}),t._v(" "),n("p",[t._v("继续进行观察,上面其实是两种极端情况,那如果普通的情况旋转,大概是下面这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(754),alt:"PNG"}}),t._v(" "),n("p",[t._v("问题似乎变得简单了,旋转将原数组一分为二,并且我们已知了首元素值总是大于尾元素,那我们只要找到将其一分为二的那个点(该点左侧的元素都大于首元素,该点右侧的元素都小于首元素),是不是就可以对应找到数组中的最小值。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(755),alt:"PNG"}}),t._v(" "),n("p",[t._v("然后我们通过二分来进行查找,先找到中间节点mid,如果中间元素大于首元素,我们就把mid向右移动。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(756),alt:"PNG"}}),t._v(" "),n("p",[t._v("如果中间元素小于首元素,我们就把mid向左移动。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(757),alt:"PNG"}}),t._v(" "),n("p",[t._v("根据分析,完成题解:")]),t._v(" "),n("p",[t._v("java版本")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findMin")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br")])]),n("p",[t._v("python版本")]),t._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("//")]),t._v("python \n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" findMin"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("self"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" List"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" \n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" \n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" \n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br")])]),n("p",[t._v("c版本")]),t._v(" "),n("div",{staticClass:"language-c line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-c"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//c ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findMin")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" numsSize"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("numsSize"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" mid"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n left"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n right"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(758),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、课后思考"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、课后思考"}},[t._v("#")]),t._v(" 03、课后思考")]),t._v(" "),n("blockquote",[n("p",[t._v("本题有多种变形,是一道练习二分法的绝佳题目。比如“把元素中不可重复的条件去掉”,又或者是“编写一个函数来判断目标值是否在数组中”等等,不同的改动,都会对题目解题方式有略微的影响,但是万变不离其宗,统统都是二分法。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("其他的就不啰嗦了,明天将为大家答疑分析,解决“元素可重复”的版本。所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);s.default=r.exports},752:function(t,s){t.exports="data:image/jpeg;base64,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"},753:function(t,s,a){t.exports=a.p+"assets/img/2.ace2c641.jpg"},754:function(t,s,a){t.exports=a.p+"assets/img/3.305e9fcd.jpg"},755:function(t,s,a){t.exports=a.p+"assets/img/4.517a72a2.jpg"},756:function(t,s,a){t.exports=a.p+"assets/img/5.1ce72971.jpg"},757:function(t,s,a){t.exports=a.p+"assets/img/6.64d30411.jpg"},758:function(t,s,a){t.exports=a.p+"assets/img/7.7ff53810.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/31.252cb005.js b/learning/.vuepress/dist/assets/js/31.252cb005.js deleted file mode 100644 index 53aa210f..00000000 --- a/learning/.vuepress/dist/assets/js/31.252cb005.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{1112:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天为大家分享一道关于**“复制” + “粘贴”**的题目。话不多说,直接看题吧。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第650题:只有两个键的键盘")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("最初在一个记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) : 你可以粘贴你上一次复制的字符。")])])])]),t._v(" "),n("p",[t._v("给定一个数字 n 。你需要使用"),n("strong",[t._v("最少的操作次数")]),t._v(",在记事本中打印出恰好 n 个 'A'。输出能够打印出 n 个 'A' 的最少操作次数。")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: 3\n输出: 3\n解释:\n最初, 我们只有一个字符 'A'。\n第 1 步, 我们使用 Copy All 操作。\n第 2 步, 我们使用 Paste 操作来获得 'AA'。\n第 3 步, 我们使用 Paste 操作来获得 'AAA'。\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br")])]),n("br"),t._v(" "),n("p",[n("strong",[t._v("说明:")])]),t._v(" "),n("p",[t._v("n 的取值范围是 [1, 1000] 。")]),t._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("p",[t._v("本题的思路,在于"),n("strong",[t._v("想明白复制和粘贴过程中的规律,找到如何组成N个A的最小操作数。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("我们从最简单的开始分析,假如我们给定数字为1,那啥也不用做,因为面板上本来就有一个A。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(778),alt:"PNG"}}),t._v(" "),n("p",[t._v("假如我们给定数字为2,那我们需要做C-P,共计2次操作来得到。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(779),alt:"PNG"}}),t._v(" "),n("p",[t._v("假如我们给定数字为3,那我们需要做C-P-P,共计3次操作来得到。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(780),alt:"PNG"}}),t._v(" "),n("p",[t._v("假如我们给定数字为4,我们发现好像变得不一样了。因为我们有两种方法都可以得到目标。(C-P-C-P)")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(781),alt:"PNG"}}),t._v(" "),n("p",[t._v("或者(C-P-P-P)")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(782),alt:"PNG"}}),t._v(" "),n("p",[t._v("但是需要的步骤还是一样。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("好了,到这里为止,STOP!通过上面的分析,我们至少可以观察出:"),n("strong",[t._v("如果 i 为质数,那么 i 是多少,就需要粘贴多少次")]),t._v("。即:素数次数为本身的结论。如 两个A = 2,三个A = 3,五个A = 5。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("那对于合数又该如何分析呢?(自然数中除能被1和本身整除外,还能被其他的数整除的数)这里我们直接给出答案:合数的次数为**将其分解质因数的操作次数的和。**解释一下,这是个啥意思?举个例子:")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("比如30,可以分解为:3"),n("em",[t._v("2")]),t._v("5。什么意思呢?我们演示一遍:首先复制1,进行2次粘贴得到3。然后复制3,进行1次粘贴得到6。然后复制6,进行4次粘贴得到30。总共需要(CPPCPCPPPP)")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(783),alt:"PNG"}}),t._v(" "),n("blockquote",[n("p",[t._v("注意:这里由于每一次都需要进行一次复制,"),n("strong",[t._v("所以直接就等于分解质因数的操作次数的和")]),t._v("。并且分解的顺序,不会影响到结果。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("综合上面的分析,我们得出分析结果:")]),t._v(" "),n("p",[t._v("1、质数次数为其本身。")]),t._v(" "),n("p",[t._v("2、合数次数为将其分解到"),n("strong",[t._v("所有不能再分解的质数的操作次数的和")]),t._v("。")]),t._v(" "),n("br"),t._v(" "),n("h2",{attrs:{id:"_03、go语言示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[t._v("#")]),t._v(" 03、Go语言示例")]),t._v(" "),n("p",[t._v("分析完毕,代码如下所示:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("minSteps")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tres "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tres "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" i\n\t\t\tn "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/=")]),t._v(" i\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(784),alt:"PNG"}})])}),[],!1,null,null,null);s.default=r.exports},778:function(t,s){t.exports="data:image/jpeg;base64,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"},779:function(t,s,a){t.exports=a.p+"assets/img/2.b719d6e1.jpg"},780:function(t,s,a){t.exports=a.p+"assets/img/3.005b13e9.jpg"},781:function(t,s,a){t.exports=a.p+"assets/img/4.4b4e0373.png"},782:function(t,s,a){t.exports=a.p+"assets/img/5.bedc1917.jpg"},783:function(t,s,a){t.exports=a.p+"assets/img/6.c11a0ca7.jpg"},784:function(t,s,a){t.exports=a.p+"assets/img/7.a6e070a6.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/32.09b2a156.js b/learning/.vuepress/dist/assets/js/32.09b2a156.js deleted file mode 100644 index 7a3c4c8c..00000000 --- a/learning/.vuepress/dist/assets/js/32.09b2a156.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{1122:function(t,a,s){"use strict";s.r(a);var n=s(3),o=Object(n.a)({},(function(){var t=this,a=t.$createElement,n=t._self._c||a;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天为大家分享一道BAT常考题目,不同路径。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("p",[t._v("该题很容易出现在各大厂的面试中,一般会要求手写,所以需要完整掌握。")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("不同路径")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("一个机器人位于一个 m x n 网格的左上角,起始点在下图中标记为“Start”。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,在下图中标记为“Finish”。 问:总共有多少条不同的路径?")])])])]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:s(821),alt:"PNG"}}),t._v(" "),n("p",[t._v("例如,上图是一个7 x 3 的网格。有多少可能的路径?")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("**说明:**m 和 n 的值均不超过 100。")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: m = 3, n = 2\n输出: 3\n\n解释:\n从左上角开始,总共有 3 条路径可以到达右下角。\n\\1. 向右 -> 向右 -> 向下\n\\2. 向右 -> 向下 -> 向右\n\\3. 向下 -> 向右 -> 向右\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: m = 7, n = 3\n输出: 28\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题属于相当标准的动态规划,虽然还有一些公式法等其他解法,但是如果面试官问到,基本就是想考察你的动态规划。")])]),t._v(" "),n("p",[t._v("拿到题目,首先定义状态。因为有横纵坐标,明显属于二维DP。我们定义"),n("strong",[t._v("DP[i][j]表示到达i行j列的最多路径")]),t._v("。同时,因为第0行和第0列都只有一条路径,所以需要初始化为1。")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:s(822),alt:"PNG"}}),t._v(" "),n("p",[t._v("状态转移方程一目了然,dp[i][j] = dp[i-1][j] dp[i][j-1]。(想象你站在一个十字路口,到达这个十字路口可能的所有路径,就是从东南西北四个方向过来可能出现的所有路径和。放在这道题里,其实就是砍掉东南。)")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:s(823),alt:"PNG"}}),t._v(" "),n("p",[t._v("根据分析,完成代码:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//go ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("uniquePaths")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("m "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n dp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("m"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:s(824),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、代码优化"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、代码优化"}},[t._v("#")]),t._v(" 03、代码优化")]),t._v(" "),n("blockquote",[n("p",[t._v("上面的答案,如果在面试时给出,可以给到7分,后面3分怎么拿,我们真的需要用一个二维数组来存储吗?一起看下!")])]),t._v(" "),n("p",[t._v("在上文中,我们使用"),n("strong",[t._v("二维数组")]),t._v("记录状态。但是这里观察一下,每一个格子可能的路径,"),n("strong",[t._v("都是由左边的格子和上面的格子的总路径计算而来, 对于之前更早的数据,其实已经用不到了")]),t._v("。如下图,计算第三行时,已经用不到第一行的数据了。")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:s(825),alt:"PNG"}}),t._v(" "),n("p",[t._v("那我们只要能定义一个状态,同时可以表示左边的格子和上面的格子,是不是就可以解决问题?所以我们定义状态dp[j],用来表示"),n("strong",[t._v("当前行到达第j列的最多路径")]),t._v("。这个“当前行”三个字很重要,比如我们要计算dp[3],因为还没有计算出,所以这时dp[3]保存的其实是4(上一行的数据),而dp[2]由于已经计算出了,所以保存的是6(当前行的数据)。理解了这个,就理解如何压缩状态。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:s(826),alt:"PNG"}}),t._v(" "),n("p",[t._v("最后,根据分析得出代码:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//go ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("uniquePaths")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("m "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n dp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//注意,这里dp[j-1]已经是新一行的数据了,而dp[j]仍然是上一行的数据")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:s(827),alt:"PNG"}})])}),[],!1,null,null,null);a.default=o.exports},821:function(t,a,s){t.exports=s.p+"assets/img/1.dccce91b.jpg"},822:function(t,a){t.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA74AAAG0CAMAAAAipAt8AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABuVBMVEX////w8PD8/Pz69PTs5ub38fH16uro3d316Oi4VFC4U1D05eTo29vn2Nfpsa7ipKHipKDio6Htubf4zsznrqzturfnrqvturjuu7jnravvvLry5eXx4uHIcy4AAAAARYThzsz4tIRQAAD4zrKYOwCwWC74zr+4Yi74xKuYThroqoRoLQAAEzVALQD4wbKwb0IgAAAAHU+YrsbBaQA3WITQwcwAHUKImbnBb0KAjaXoy8zy4eHrtLLyw8HaoqCvUEzgrKrpv73SnpynTEjXqabSnpvXqafIl5SfSEXOop/etrTIlpTks7Hp2tns1NTPwsHhycnEt7bor63Il5W/v7+lpaWkpKSNjY2hoaHOo6HV1dW+vr68vLzW1tbX19fa2tq1tbXY2Njy4+PrtbTyxsTGmpgGAwPMycnt7e2xsbHGxsavr6/Hx8eWlpb29vbS0tKjo6Pl5eXLy8vJycmbm5uSkpLHlZS7u7uKioqJiYlkZGSfn5+3t7e0tLT3zMr6+vqsrKzrz83gxMLpzcvLs7GplZOhjYuuo6Kenp6Dg4N7e3uZmZmdnZ2ampqFhYVeXl5YWFhvb2+CgoKanOxpAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAFHJJREFUeNrt3edzJFcZRvGVFgwiw5KNr8M6Z3udCQssYckZTDbJ5JzBBJNlMn8x5dWHK4QsvXe7Z57To/N83d6qU6r6VXdPzdQ9dep/tnXq6G1vr/wCG2yw4TIaFpJpgw02LDbTBhtsWGymDTbYsNhMG2ywYbGZNthgw2IzbbDBhsVm2mCDDYvNtMEGGxabaYMNNiw20wYbbFhspg022LDYTBtssGGxmTbYYMNiM22wwYbFZtpggw2LzbTBBhsO2enTzzp99J797FVfcMUVz7niChtssOHAnnX69NF8n7uT3/PSAZAG5w7u+YfckvftBek+CB1Cg3MH98Ktg/PuC21w7uCef/zD84vCe7ENl/YSGzANLwU0vKjG92Vnsnv5zs7OK2w488qdnZ1X2XCp4dXhhtcAGl4r3yU1UOgQGtJ05FsegQ6hgUKH0JCmI9/yCHQIDRQ6hIY0HfmWR6BDaKDQITSk6ci3PAIdQgOFDqEhTUe+5RHoEBoodAgNaTryLY9Ah9BAoUNoSNORb3kEOoQGCh1CQ5qOfMsj0CE0UOgQGtJ05FsegQ6hgUKH0JCmI9/yCHQIDRQ6hIY0HfmWR6BDaKDQITSk6ci3PAIdQgOFDqEhTUe+5RHoEBoodAgNaTryLY9Ah9BAoUNoSNORb3kEOoQGCh1CQ5qOfMsj0CE0UOgQGtJ05FsegQ6hgUKH0JCmI9/yCHQIDRQ6hIY0HfmWR6BDaKDQITSk6ci3PAIdQgOFDqEhTUe+5RHoEBoodAgNaTryLY9Ah9BAoUNoSNORb3kEOoQGCh1CQ5qOfMsj0CE0UOgQGtJ05FsegQ6hgUKH0JCmI9/yCHQIDRQ6hIY0HfmWR6BDaKDQITSk6YD5bu/blfLFNFDoEBrSdCh8X7d9cPKFNlDoEBrSdMB8fXhmNlDoEBrSdCh8ffddTAOFDqEhTUe+5RHoEBoodAgNaTryLY9Ah9BAoUNoSNORb3kEOoQGCh1CQ5qOfMsj0CE0UOgQGtJ05FsegQ6hgUKH0JCmI9/yCHQIDRQ6hIY0HfmWR6BDaKDQITSk6ci3PAIdQgOFDqEhTUe+5RHoEBoodAgNaTryLY9Ah9BAoUNoSNORb3kEOoQGCh1CQ5qOfMsj0CE0UOgQGtJ05FsegQ6hgUKH0JCmI9/yCHQIDRQ6hIY0HfmWR6BDaKDQITSk6ci3PAIdQgOFDqEhTUe+5RHoEBoodAgNaTryLY9Ah9BAoUNoSNM5SXyvaldfM+G/z0JnAxpmobMhDZPpTGyYhe/EhjXxvfa6PJ1NaJiDzqY0TKUztWEOvlMb1sP37PUtTmcjGmagszENE+lMbpiB7+SGtfA9e0OL09mMhul0NqdhGp3pDdP5Tm9YB98bb2pxOhvSMJnOBjVMojNDw2S+MzSsge/Nt7Q4nU1pmEpnkxqm0JmjYSrfORpWz/fW21q7/Y4snY1pmEhnoxom0JmlYSLfWRpWzffOu+5u7Z57zyXpbFDDJDob1nDZdGZqmMR3poZV8z3XWrvv/jNROhvUMInOhjVcNp2ZGibxnalh9XwfeHCvNklnYxom0tmohgl0ZmmYyHeWhlXzfejhR86k6WxQwyQ6G9Zw2XRmapjEd6aGNR3PHaWzQQ1zfONpUxqmfuMpynemhjUdz70JdAgNFDqEhjQdMN+ZvzS5EXQIDRQ6hIY0HQrfNfxkYRPoEBoodAgNaTryLY9Ah9BAoUNoSNORb3kEOoQGCh1CQ5qOfMsj0CE0UOgQGtJ05FsegQ6hgUKH0JCmI9/yCHQIDRQ6hIY0HfmWR6BDaKDQITSk6ci3PAIdQgOFDqEhTUe+5RHoEBoodAgNaTryLY9Ah9BAoUNoSNORb3kEOoQGCh1CQ5qOfMsj0CE0UOgQGtJ05FsegQ6hgUKH0JCmI9/yCHQIDRQ6hIY0HfmWR6BDaKDQITSk6ZwgvlNHON2P0EA53Y/QkD7d7ySdMDhxBDqEBgodQkOajnzLI9AhNFDoEBrSdORbHoEOoYFCh9CQpiPf8gh0CA0UOoSGNB35lkegQ2ig0CE0pOnItzwCHUIDhQ6hIU1HvuUR6BAaKHQIDWk68i2PQIfQQKFDaEjTkW95BDqEBgodQkOajnzLI9AhNFDoEBrSdORbHoEOoYFCh9CQpiPf8gh0CA0UOoSGNB35lkegQ2ig0CE0pOnItzwCHUIDhQ6hIU0HzHfu832njkCH0EChQ2hI06HwXcPx3FNHoENooNAhNKTpgPn68MxsoNAhNKTpUPj67ruYBgodQkOajnzLI9AhNFDoEBrSdORbHoEOoYFCh9CQpiPf8gh0CA0UOoSGNB35lkegQ2ig0CE0pOnItzwCHUIDhQ6hIU1HvuUR6BAaKHQIDWk68i2PQIfQQKFDaEjTkW95BDqEBgodQkOajnzLI9AhNFDoEBrSdORbHoEOoYFCh9CQpiPf8gh0CA0UOoSGNB35lkegQ2ig0CE0pOnItzwCHUIDhQ6hIU1HvuUR6BAaKHQIDWk68i2PQIfQQKFDaEjTkW95BDqEBgodQkOajnzLI9AhNFDoEBrSdORbHoEOoYFCh9CQpiPf8gh0CA0UOoSGNB35lkegQ2ig0CE0pOnItzwCHUIDhQ6hIU1HvuUR6BAaKHQIDWk68i2PQIfQQKFDaEjTkW95BDqEBgodQkOajnzLI9AhNFDoEBrSdORbHoEOoYFCh9CQpiPf8gh0CA0UOoSGNB35lkegQ2ig0CE0pOkshO/rd3Z23vDG7N50/vz5N78lu7deuHDhbeGGt1+4cOEdNrzlnRcvXnzXu7N7z9MN4b/De8+fP/++o/m+fye/i805d9g+8P9kt/btg2m78nXuGfehrYPz7uvcQvaB4x+ePxzeR1prHw3vY4CGj9twaZ8ANHy0tfYooOEYvoRPnj/ZWvvUqew+DWj4TGvtszacerS19rlww+dba48BGr5w9CXy3Zt8OQ3y7Q3yLU2+nAb59gb5liZfToN8e4N8S5Mvp0G+vUG+pcmX0yDf3iDf0uTLaZBvb5BvafLlNMi3N8i3NPlyGuTbG+Rbmnw5DfLtDfItTb6cBvn2BvmWJl9Og3x7g3xLky+nQb69Qb6lyZfTIN/eIN/S5MtpkG9vkG9p8uU0yLc3yLc0+XIa5Nsb5FuafDkN8u0N8i1NvpwG+fYG+ZYmX06DfHuDfEuTL6dBvr1BvqXJl9Mg394g39Lky2mQb2+Qb2ny5TTItzfItzT5chrk2xvkW5p8OQ3y7Q3yLU2+nAb59gb5liZfToN8e4N8S5Mvp0G+veEQvtv7dqV8L02+nAb59oZPbR+cfA+ZfDkN8u0Nh/DdPx+e9yZfToN8e4PvvqXJl9Mg394g39Lky2mQb2+Qb2ny5TTItzfItzT5chrk2xvkW5p8OQ3y7Q3yLU2+nAb59gb5liZfToN8e4N8S5Mvp0G+vUG+pcmX0yDf3iDf0uTLaZBvb5BvafLlNMi3N8i3NPlyGuTbG+Rbmnw5DfLtDfItTb6cBvn2BvmWJl9Og3x7g3xLky+nQb69Qb6lyZfTIN/eIN/S5MtpkG9vkG9p8uU0yLc3rIPvVe3qa+Q7eQQ6hAb59oY18L32OvnOMQIdQoN8e8Pq+Z69vsl3jhHoEBrk2xtWzvfsDU2+s4xAh9Ag396war433tTkO88IdAgN8u0NK+Z78y1NvjONQIfQIN/esFq+t97W2u13yHeWEegQGuTbG1bJ98677m7tnnvPyXeWEegQGuTbG1bJ91xr7b77z8h3nhHoEBrk2xtWy/eBB/cUy3eGEegQGuTbG1bJ96GHHzkj39lGoENokG9vWMPx3PKdZwQ6hAb59oY1HM8t33lGoENokG9vWMPx3PKdZwQ6hAb59oY1/GRBvvOMQIfQIN/eIN/S5MtpkG9vkG9p8uU0yLc3yLc0+XIa5Nsb5FuafDkN8u0N8i1NvpwG+fYG+ZYmX06DfHuDfEuTL6dBvr1BvqXJl9Mg394g39Lky2mQb2+Qb2ny5TTItzfItzT5chrk2xvkW5p8OQ3y7Q3yLU2+nAb59gb5liZfToN8e4MnDJYmX06DfHuDfEuTL6dBvr1BvqXJl9Mg394g39Lky2mQb2+Qb2ny5TTItzfItzT5chrk2xvkW5p8OQ3y7Q3yLU2+nAb59gb5liZfToN8e4N8S5Mvp0G+vUG+pcmX0yDf3iDf0uTLaZBvb5BvafLlNMi3N8i3NPlyGuTbG+Rbmnw5DfLtDWs4nlu+84xAh9Ag396whuO55TvPCHQIDfLtDWs4nlu+84xAh9Ag397gu29p8uU0yLc3yLc0+XIa5Nsb5FuafDkN8u0N8i1NvpwG+fYG+ZYmX06DfHuDfEuTL6dBvr1BvqXJl9Mg394g39Lky2mQb2+Qb2ny5TTItzfItzT5chrk2xvkW5p8OQ3y7Q3yLU2+nAb59gb5liZfToN8e4N8S5Mvp0G+vUG+pcmX0yDf3iDf0uTLaZBvb5BvafLlNMi3N8i3NPlyGuTbG+Rbmnw5DfLtDfItTb6cBvn2BvmWJl9Og3x7g3xLky+nQb69Qb6lyZfTIN/eIN/S5MtpkG9vkG9p8uU0yLc3yLc0+XIa5Nsb5FuafDkN8u0N8i1NvpwG+fYG+ZYmX06DfHvDMXy/uLOz86UvZ/eVxx9//Ktfy+7rrbVvhBu+2Vr7lg1f+/bTfL+T3Xdba9/7fnY/aK398Gi+79/J72Jzzh22H/0/2a19+2Darnyde8b9eOvgvPs6t5D96PiH59eE95PW2k/De9QGTMPPWms/D+8XgL/DT4/n6yfPe/OTZ1ZD+pPnXwIanv7k+YmjL5Hv3uTLakjTka98B0ehQ2hI05GvfAdHoUNoSNORr3wHR6FDaEjTka98B0ehQ2hI05GvfAdHoUNoSNORr3wHR6FDaEjTka98B0ehQ2hI05GvfAdHoUNoSNORr3wHR6FDaEjTka98B0ehQ2hI05GvfAdHoUNoSNORr3wHR6FDaEjTka98B0ehQ2hI05GvfAdHoUNoSNORr3wHR6FDaEjTka98B0ehQ2hI05GvfAdHoUNoSNORr3wHR6FDaEjTka98B0ehQ2hI05GvfAdHoUNoSNORr3wHR6FDaEjTka98B0ehQ2hI05GvfAdHoUNoSNORr3wHR6FDaEjTka98B0ehQ2hI05GvfAdHoUNoSNORr3wHR6FDaEjTAfPd3rcr5Xtp8mU1pOlQ+P5q++Dke8jky2pI0wHz3T8fnvcmX1ZDmg6Fr+++pcmX1ZCmI1/5Do5Ch9CQpiNf+Q6OQofQkKYjX/kOjkKH0JCmI1/5Do5Ch9CQpiNf+Q6OQofQkKYjX/kOjkKH0JCmI1/5Do5Ch9CQpiNf+Q6OQofQkKYjX/kOjkKH0JCmI1/5Do5Ch9CQpiNf+Q6OQofQkKYjX/kOjkKH0JCmI1/5Do5Ch9CQpiNf+Q6OQofQkKYjX/kOjkKH0JCmI1/5Do5Ch9CQpiNf+Q6OQofQkKYjX/kOjkKH0JCmc5L4XtWuvka+k0ehQ2hI0zlBfK+9Tr5zjEKH0JCmc3L4nr2+yXeOUegQGtJ0Tgzfszc0+c4yCh1CQ5rOSeF7401NvvOMQofQkKZzQvjefEuT70yj0CE0pOmcDL633tba7XfId5ZR6BAa0nROAt8777q7tXvuPSffWUahQ2hI0zkJfM+11u67/4x85xmFDqEhTedk8H3gwT3F8p1hFDqEhjSdk8D3oYcfOSPf2UahQ2hI0wHznft8X/nOMwodQkOaDoXvGo7nlu88o9AhNKTpgPnu3xzfeZbvPKPQITSk6VD4ruEnC/KdZxQ6hIY0HfnKd3AUOoSGNB35yndwFDqEhjQd+cp3cBQ6hIY0HfnKd3AUOoSGNB35yndwFDqEhjQd+cp3cBQ6hIY0HfnKd3AUOoSGNB35yndwFDqEhjQd+cp3cBQ6hIY0HfnKd3AUOoSGNB35yndwFDqEhjQd+cp3cBQ6hIY0HfnKd3AUOoSGNB35yndwFDqEhjSdE8R36uS7NwodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5oOmO/c5/vKd55R6BAa0nQofNdwPLd85xmFDqEhTQfMd/98eN6bfFkNaToUvr77liZfVkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDmo585Ts4Ch1CQ5qOfOU7OAodQkOajnzlOzgKHUJDms6S+P46u0t8f5PdpwENl+jYcKnhc+GGXwIainzTu9icc4ftEL5b+/aCtF35OveM++3WwXn3dW4hO+7h+cnfPXn0fv/7VV/whz/+6Y9/fuKoPfbYE0+s9oK/7D61+9dww992n9r9uw2Ihn/881///PfuUfvPf3Z3V3zB7lO7x/A9dWrrmH/f3l75BTbYYMNlNCwk0wYbbFhspg022LDYTBtssGGxmTbYYMNiM22wwYbFZtpggw2LzbTBBhsWm2mDDTYsNtMGG2xYbKYNNtiw2EwbbLBhsZk22GDDYjNtsMGGxWbaYIMNi820wQYbFptpgw02LDbTBhts2Nt/AejTFXaCFftZAAAAAElFTkSuQmCC"},823:function(t,a){t.exports="data:image/jpeg;base64,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"},824:function(t,a){t.exports="data:image/jpeg;base64,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"},825:function(t,a,s){t.exports=s.p+"assets/img/5.2c119423.jpg"},826:function(t,a,s){t.exports=s.p+"assets/img/6.48bc0047.jpg"},827:function(t,a){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/33.de06b422.js b/learning/.vuepress/dist/assets/js/33.de06b422.js deleted file mode 100644 index 70b108a8..00000000 --- a/learning/.vuepress/dist/assets/js/33.de06b422.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{1060:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天为大家带来,"),n("strong",[s._v("链表检测成环")]),s._v("的经典题目。如果你觉得你会了,请你不妨耐心些认真看下去,我相信会有一些不一样的收获!还是先从一道题目开始哟,准备好了吗? Let' s go !")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第141题:环形链表")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入:head = [3,2,0,-4], pos = 1\n输出:true\n解释:链表中有一个环,其尾部连接到第二个节点。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(504),alt:"PNG"}}),s._v(" "),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入:head = [1,2], pos = 0\n输出:true\n解释:链表中有一个环,其尾部连接到第一个节点。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(505),alt:"PNG"}}),s._v(" "),n("p",[n("strong",[s._v("示例 3:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入:head = [1], pos = -1\n输出:false\n解释:链表中没有环。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("img",{attrs:{src:a(506),alt:"PNG"}}),s._v(" "),n("blockquote",[n("p",[n("strong",[s._v("题目可能你会觉得过于简单!但是不妨耐心看完!")])]),s._v(" "),n("p",[n("strong",[s._v("则一定会有收获!")])])]),s._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("p",[n("strong",[s._v("题解一:哈希表判定")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("思路:"),n("strong",[s._v("通过hash表来检测节点之前是否被访问过")]),s._v(",来判断链表是否成环。这是最容易想到的一种题解了。过于简单,直接上代码:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("hasCycle")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("head "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("ListNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("bool")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n m "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("ListNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" head "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("exist "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("exist "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),s._v("\n head "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" false12\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("br"),s._v(" "),n("p",[n("strong",[s._v("题解二:JS特殊解法")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("相信对于 JS 中的 JSON.stringify() 方法大家都用过,主要用于"),n("strong",[s._v("将 JS 对象 转换为 JSON 字符串")]),s._v("。基本使用如下:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" car "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'小喵'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" \n age"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" \n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" str "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" JSON"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("stringify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\nconsole"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("str"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" \n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('//=> {"name":"小喵","age":20}')]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br")])]),n("p",[s._v("大家想一下,如果是自己实现这样的一个函数,我们需要处理什么样的特殊情况?对,就是"),n("strong",[s._v("循环引用")]),s._v("。因为对于循环引用,我们很难通过 JSON 的结构将其进行展示!比如下面:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" a \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" b\n console"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("JSON"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("stringify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//=> TypeError: Converting circular structure to JSON")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br")])]),n("p",[s._v("那我们思考,对于环形链表,是不是就是一个循环结构呢?当然是!因为只要是环形链表,它一定存在类似以下代码:")]),s._v(" "),n("blockquote",[n("center",[s._v("a.Next = b")]),s._v(" "),n("center",[s._v("b.Next = a")])],1),s._v(" "),n("p",[s._v("所以我们可以通过 JSON.stringify() 的特性进行求解:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" hasCycle "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("function")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n try"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n JSON"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("stringify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("catch")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])]),n("p",[s._v("当然,这种解法并不是建议的标准题解!在此列出是为了拓宽思维!(大家如有兴趣,可以自己去看下JSON.stringify 内部的实现,是如何检测循环引用的。)")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("题解三:双指针解法")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("本题标准解法!常识内容,"),n("strong",[s._v("必须掌握")]),s._v("!")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("思路来源:先想象一下,"),n("strong",[s._v("两名运动员以不同速度在跑道上进行跑步")]),s._v("会怎么样?"),n("strong",[s._v("相遇")]),s._v("!好了,这道题你会了。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("解题方法:通过"),n("strong",[s._v("使用具有 不同速度 的快、慢两个指针遍历链表")]),s._v(",空间复杂度可以被降低至 O(1)。"),n("strong",[s._v("慢指针每次移动一步,而快指针每次移动两步")]),s._v("。")]),s._v(" "),n("p",[s._v("假设链表为 "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(507),alt:"PNG"}}),s._v(", 其步骤如下:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(508),alt:"PNG"}}),s._v(" "),n("p",[s._v("分析完毕,直接上代码:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("hasCycle")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("head "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("ListNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("bool")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" head "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n fast "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 快指针,每次走两步")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" fast "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" head "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" fast"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" fast "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" head "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 快慢指针相遇,表示有环")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n fast "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" fast"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next \n head "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" head"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 慢指针,每次走一步")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])]),n("p",[s._v("这里我们要特别说明一下,为什么慢指针的步长设置为 1 ,而快指针步长设置为 2 。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("首先,慢指针步长为 1,很容易理解,因为我们需要让"),n("strong",[s._v("慢指针步行至每一个元素")]),s._v("。而快指针步长为 2 ,通俗点可以理解为他们的"),n("strong",[s._v("相对速度只差 1")]),s._v(",快的只能一个一个格子的去追慢的,必然在一个格子相遇。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("如果没看懂,我们来分析:在快的快追上慢的时,他们之间一定是只差 1 个或者 2 个格子。如果落后 1 个,那么下一次就追上了。如果落后 2 个,那么下一次就落后 1 个,再下一次就能追上!如下图:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(509),alt:"PNG"}}),s._v(" "),n("p",[s._v("所以我们的快指针的步长可以设置为 2 。")]),s._v(" "),n("h2",{attrs:{id:"_03、特别说明"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、特别说明"}},[s._v("#")]),s._v(" 03、特别说明")]),s._v(" "),n("p",[s._v("我们常会遇到一些所谓的“简单题目“,然后用着前人留下来的那些”经典题解“迅速作答。在解题的过程中,追求公式化、模板化。当然,这个过程是好的,因为社会、工作、学业要求我们如此!但是,我希望我们也可以留下一些自己的思考,纵然不是最优解,但是是我们自己想到的、创造的!真正在算法题中去收获快乐~")])])}),[],!1,null,null,null);t.default=e.exports},504:function(s,t,a){s.exports=a.p+"assets/img/1.277dc868.jpg"},505:function(s,t){s.exports="data:image/jpeg;base64,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"},506:function(s,t){s.exports="data:image/jpeg;base64,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"},507:function(s,t){s.exports="data:image/jpeg;base64,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"},508:function(s,t,a){s.exports=a.p+"assets/img/5.a7be87ed.jpg"},509:function(s,t,a){s.exports=a.p+"assets/img/6.d54032f0.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/34.2477a1e5.js b/learning/.vuepress/dist/assets/js/34.2477a1e5.js deleted file mode 100644 index 7c95a17a..00000000 --- a/learning/.vuepress/dist/assets/js/34.2477a1e5.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{1063:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("前几天写了一篇“小白为了面试如何刷题”的文章大受好评。随之而来的是好多小伙伴私下跑来问我“"),n("strong",[t._v("浩哥,你说前200道题很好,但是前两百道题的难度很大,我不会怎么办")]),t._v("”这问题我想了一两天。。。好吧,既然你们说难不会。那我干脆就把前两百道题都给你们配上图解,全部安排,这样总可以了吧?牛气冲天有木有,哪个公号主敢这么干的!奥利给,搞起。今儿为大家分享经典面试题目 - 两数相加。做过的朋友,也不要急着叉掉,不妨借机复习一番。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("各数据结构中的“加减乘除”都是很爱考察的内容。")])]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第2题:两数相加")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。")])])])]),t._v(" "),n("p",[t._v("给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("您可以假设除了数字 0 之外,这两个数都不会以 0 开头。")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)\n输出:7 -> 0 -> 8\n原因:342 + 465 = 807\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("h2",{attrs:{id:"_02、算法图解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、算法图解"}},[t._v("#")]),t._v(" 02、算法图解")]),t._v(" "),n("blockquote",[n("p",[t._v("烧饼(哨兵)节点:烧饼节点就是说有一个节点长的像烧饼,站在最前面。往往第一个节点小子都会来啃一口,因为是牛肉拔丝烧饼,扯不掉就连起来了。。。好了,我实在编不下去了~囧....")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("不了解哨兵节点的可以看下:")]),t._v(" "),n("br"),t._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.1.链表系列/1.0.数组系列/101.html"}},[t._v("删除链表倒数第N个节点(19)")])],1),t._v(" "),n("br"),t._v(" "),n("p",[t._v("好了,了解了哨兵节点,其实这道题和哨兵节点**并没有什么毛线关系,**我只是让你复习一下(会不会想打我)。现在开始正式分析题目。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("老样子,我们还是先画图,假若我们的链表是 (2 -> 4 -> 3) + (5 -> 6 -> 4) ,大概就是这样(注意,这里我们其实是要完成 342 + 465):")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(514),alt:"PNG"}}),t._v(" "),n("p",[t._v("加法肯定是从最低位到最高位进行相加,也就是这里的"),n("strong",[t._v("链表头到链表尾进行相加,所以需要遍历链表")]),t._v("。我们令 l1 和 l2 指向两个链表的头,用一个 tmp 值来存储同一位相加的结果,以及一个新的链表来存储 tmp 的值。(为什么不直接用新链表存储结果,而是用 tmp 先存储结果,再用新链表存储 tmp 的值呢?请继续往下看)")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(515),alt:"PNG"}}),t._v(" "),n("p",[t._v("记住:"),n("strong",[t._v("所有模拟运算的题目,都需要考虑进位")]),t._v("。这里因为个位不涉及进位,开始计算十位。我们同时遍历 l1,l2,以及新链表到下一位。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(516),alt:"PNG"}}),t._v(" "),n("p",[t._v("重复上面的操作,可以看到十位与个位不同,发生了进位。这时,刚才的 tmp 就有了用武之地。"),n("strong",[t._v("我们使用 tmp 携带进位的值到下一位的运算")]),t._v("。自然,这里的链表也不能直接存储 tmp 的值了,而是要存储 tmp%10 的值。重复这个步骤,"),n("strong",[t._v("直到两个链表都遍历完成,并且 tmp 没有进位值")]),t._v(":")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(517),alt:"PNG"}}),t._v(" "),n("p",[t._v("现在只需要返回我们的新链表就可以了。问题来了,"),n("strong",[t._v("因为我们没有构造哨兵节点,所以此时不太容易直接返回新链表")]),t._v("。所以在整个流程的第一步,我们还需要用一个哨兵节点指向我们的新链表。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(518),alt:"PNG"}}),t._v(" "),n("p",[t._v("分析完毕,直接上代码(好久没翻Go的牌子了):")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//go")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("addTwoNumbers")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("ListNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" l2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("ListNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("ListNode "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tlist "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("ListNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//这里用一个result,只是为了后面返回节点方便,并无他用")]),t._v("\n\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" list\n\ttmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" l1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" l2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" l1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\ttmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" l1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val\n\t\t\tl1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" l1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" l2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\ttmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" l2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val\n\t\t\tl2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" l2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\tlist"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("ListNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\ttmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v("\n\t\tlist "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(519),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、总结"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、总结"}},[t._v("#")]),t._v(" 03、总结")]),t._v(" "),n("blockquote",[n("p",[t._v("1950年6月19日,毛泽东写信给当时的教育部部长马叙伦:“要各校注意健康第一,学习第二。营养不足,宜酌增经费。”1951年9月底,毛泽东接见安徽参加国庆的代表团,代表团成员中有渡江小英雄马三姐。毛泽东关切地问她念书情况,还送她一本精美的笔记本,并且在扉页上题词:"),n("strong",[t._v("好好学习,天天向上")]),t._v("。这8个字的题词迅速在全国传播开来。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("今天的题目到这里就结束了。你学会了吗?快来评论区留下你的想法吧!")])])}),[],!1,null,null,null);s.default=r.exports},514:function(t,s,a){t.exports=a.p+"assets/img/1.77d1279c.jpg"},515:function(t,s,a){t.exports=a.p+"assets/img/2.aecc2d80.jpg"},516:function(t,s,a){t.exports=a.p+"assets/img/3.282d3108.jpg"},517:function(t,s,a){t.exports=a.p+"assets/img/4.4d0bf2ce.jpg"},518:function(t,s,a){t.exports=a.p+"assets/img/5.acd9a171.jpg"},519:function(t,s,a){t.exports=a.p+"assets/img/6.11546c06.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/35.b8a6b459.js b/learning/.vuepress/dist/assets/js/35.b8a6b459.js deleted file mode 100644 index 29ea28a8..00000000 --- a/learning/.vuepress/dist/assets/js/35.b8a6b459.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{1066:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("在上一篇中,我们通过分析,顺利完成了“"),n("strong",[t._v("三角形最小路径和")]),t._v("”的动态规划题解。在本节中,我们继续看一道相似题型,以求能完全掌握这种“路径和”的问题。话不多说,先看题目:")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第64题:最小路径和")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。")])])])]),t._v(" "),n("p",[t._v("说明:每次只能向下或者向右移动一步。")]),t._v(" "),n("p",[n("strong",[t._v("示例:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:\n[\n [1,3,1],\n [1,5,1],\n [4,2,1]\n]\n输出: 7\n解释: 因为路径 1→3→1→1→1 的总和最小。\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br")])]),n("br"),t._v(" "),n("blockquote",[n("p",[n("strong",[t._v("这道题有一定难度哦!如果没有思路请回顾上一篇的学习内容!")])]),t._v(" "),n("p",[n("strong",[t._v("不建议直接看题解!")])])]),t._v(" "),n("h2",{attrs:{id:"_02、题目图解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[t._v("#")]),t._v(" 02、题目图解")]),t._v(" "),n("p",[t._v("首先我们分析题目,要找的是 **最小路径和,**这是个啥意思呢?假设我们有一个 m * n 的矩形 :[[1,3,1],[1,5,1],[4,2,1]]")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(531),alt:"PNG"}}),t._v(" "),n("p",[t._v("那从"),n("strong",[t._v("左上角到右下角")]),t._v("的最小路径和,我们可以很容易看出就是 1-3-1-1-1 ,这一条路径,结果等于 7 。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("题目明确了,我们继续进行分析。该题与上一道求三角形最小路径和一样,题目明显符合可以"),n("strong",[t._v("从子问题的最优解进行构建")]),t._v(",所以我们考虑使用动态规划进行求解。首先,我们定义状态:")]),t._v(" "),n("blockquote",[n("center",[n("b",[t._v(" dp[i][j] : 表示包含第i行j列元素的最小路径和 ")])])],1),t._v(" "),n("p",[t._v("同样,因为任何一条到达右下角的路径,都会经过 [0,0] 这个元素。所以我们需要对 dp[0][0] 进行初始化。")]),t._v(" "),n("blockquote",[n("center",[n("b",[t._v(" dp[0][0] = [0][0]位置所在的元素值 ")])])],1),t._v(" "),n("p",[t._v("继续分析,根据题目给的条件,如果我们要求 dp[i][j] ,那么它一定是从自己的上方或者左边移动而来。如下图所示:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(532),alt:"PNG"}}),t._v(" "),n("blockquote",[n("center",[t._v("5,只能从3或者1移动而来")]),t._v(" "),n("center",[t._v("2,只能从5或者4移动而来")]),t._v(" "),n("center",[t._v("4,从1移动而来")]),t._v(" "),n("center",[t._v("3,从1移动而来")]),t._v(" "),n("center",[n("b",[t._v(" (红色位置必须从蓝色位置移动而来) ")])])],1),t._v(" "),n("p",[t._v("进而我们得到状态转移方程:")]),t._v(" "),n("blockquote",[n("center",[n("b",[t._v(" dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + grid[i][j] ")])])],1),t._v(" "),n("p",[t._v("同样我们需要考虑两种特殊情况:")]),t._v(" "),n("ul",[n("li",[t._v("最上面一行,只能由左边移动而来(1-3-1)")]),t._v(" "),n("li",[t._v("最左边一列,只能由上面移动而来(1-1-4)")])]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(533),alt:"PNG"}}),t._v(" "),n("p",[t._v("最后,因为我们的目标是"),n("strong",[t._v("从左上角走到右下角")]),t._v(","),n("strong",[t._v("整个网格的最小路径和其实就是包含右下角元素的最小路径和")]),t._v("。即:")]),t._v(" "),n("blockquote",[n("center",[n("b",[t._v(" 设:dp的长度为l ")])]),t._v(" "),n("center",[n("b",[t._v(" 最终结果就是:dp[l-1][len(dp[l-1])-1] ")])])],1),t._v(" "),n("p",[t._v("综上我们就分析完了,我们总共进行了 4 步:")]),t._v(" "),n("ol",[n("li",[t._v("定义状态")]),t._v(" "),n("li",[t._v("总结状态转移方程")]),t._v(" "),n("li",[t._v("分析状态转移方程不能满足的特殊情况。")]),t._v(" "),n("li",[t._v("得到最终解")])]),t._v(" "),n("h2",{attrs:{id:"_03、go语言示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[t._v("#")]),t._v(" 03、GO语言示例")]),t._v(" "),n("p",[t._v("根据以上分析,可以得到代码如下:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("minPathSum")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("grid "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tl "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tdp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" grid "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" b\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" a\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br")])]),n("p",[t._v("运行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(534),alt:"PNG"}}),t._v(" "),n("p",[t._v("同样,运行上面的代码,我们发现使用的内存过大。有没有什么办法可以压缩内存呢?通过观察我们发现,"),n("strong",[t._v("在我们自左上角到右下角计算各个节点的最小路径和的过程中,我们只需要使用到之前已经累积计算完毕的数据,并且不会再次访问之前的元素数据")]),t._v("。绘制成图如下:(大家看这个过程像不像扫雷,其实如果大家研究扫雷外挂的话,就会发现在扫雷的核心算法中,就有一处颇为类似这种分析方法,这里就不深究了)")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(535),alt:"PNG"}}),t._v(" "),n("p",[t._v("优化后的代码如下:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("minPathSum")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("grid "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tl "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tgrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tgrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tgrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" b\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" a\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br")])]),n("p",[t._v("运行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(536),alt:"PNG"}}),t._v(" "),n("br"),t._v(" "),n("blockquote",[n("p",[n("strong",[t._v("课后思考:路径和类问题和之前的子序列类问题有何区别?")])])])])}),[],!1,null,null,null);s.default=r.exports},531:function(t,s,a){t.exports=a.p+"assets/img/1.5d3b351e.jpg"},532:function(t,s,a){t.exports=a.p+"assets/img/2.e2bb3392.jpg"},533:function(t,s,a){t.exports=a.p+"assets/img/3.1996c071.jpg"},534:function(t,s,a){t.exports=a.p+"assets/img/4.af1e2af1.jpg"},535:function(t,s,a){t.exports=a.p+"assets/img/5.ba54b600.jpg"},536:function(t,s,a){t.exports=a.p+"assets/img/6.1f77b9c7.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/36.a576e173.js b/learning/.vuepress/dist/assets/js/36.a576e173.js deleted file mode 100644 index 3d69366c..00000000 --- a/learning/.vuepress/dist/assets/js/36.a576e173.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{1077:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("在两节中,我们了解了BST(二叉搜索树)的概念,并且知道了如何在BST中查找一个元素。那我们又如何在BST中去删除一个元素呢?我们将通过本节的例题进行学习!")]),t._v(" "),n("p",[t._v("下面我们仍然通过例题进行讲解。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第450题:删除二叉搜索树中的节点")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。")])])])]),t._v(" "),n("p",[t._v("一般来说,删除节点可分为两个步骤:")]),t._v(" "),n("br"),t._v(" "),n("ul",[n("li",[t._v("首先找到需要删除的节点;")]),t._v(" "),n("li",[t._v("如果找到了,删除它。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("说明: 要求算法时间复杂度为 O(h),h 为树的高度。")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("root = [5,3,6,2,4,null,7]\nkey = 3\n\n 5\n / \\\n 3 6\n / \\ \\\n2 4 7\n\n给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。\n\n一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。\n 5\n / \\\n 4 6\n / \\\n2 7\n\n另一个正确答案是 [5,2,6,null,4,null,7]。\n 5\n / \\\n 2 6\n \\ \\\n 4 7\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br")])]),n("blockquote",[n("p",[n("strong",[t._v("强烈建议先学习之前两节内容!")])]),t._v(" "),n("p",[n("strong",[t._v("以达到最好的学习效果!")])])]),t._v(" "),n("h2",{attrs:{id:"_02、复习巩固"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、复习巩固"}},[t._v("#")]),t._v(" 02、复习巩固")]),t._v(" "),n("p",[t._v("先复习一下,"),n("strong",[t._v("二叉搜索树")]),t._v("(BST)的特性:")]),t._v(" "),n("br"),t._v(" "),n("ul",[n("li",[t._v("若它的左子树不为空,则所有左子树上的值均小于其根节点的值")]),t._v(" "),n("li",[t._v("若它的右子树不为空,则所有右子树上的值均大于其根节点得值")]),t._v(" "),n("li",[t._v("它的左右子树也分别为二叉搜索树")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("如下图就是一棵典型的BST:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(624),alt:"img"}}),t._v(" "),n("h2",{attrs:{id:"_03、图解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、图解分析"}},[t._v("#")]),t._v(" 03、图解分析")]),t._v(" "),n("p",[t._v("明确了概念,我们进行分析。我们要删除BST的一个节点,首先需要"),n("strong",[t._v("找到该节点")]),t._v("。而找到之后,会出现三种情况。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("1、待删除的节点左子树为空,让待删除节点的右子树替代自己。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(625),alt:"img"}}),t._v(" "),n("p",[t._v("2、待删除的节点右子树为空,让待删除节点的左子树替代自己。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(626),alt:"img"}}),t._v(" "),n("p",[t._v("3、如果待删除的节点的左右子树都不为空。我们需要找到"),n("strong",[t._v("比当前节点小的最大节点(前驱)")]),t._v(",来替换自己")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(627),alt:"img"}}),t._v(" "),n("p",[t._v("或者"),n("strong",[t._v("比当前节点大的最小节点(后继)")]),t._v(",来替换自己。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(628),alt:"img"}}),t._v(" "),n("p",[t._v("分析完毕,我们一起看代码怎么实现吧。")]),t._v(" "),n("h2",{attrs:{id:"_04、go语言示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、go语言示例"}},[t._v("#")]),t._v(" 04、GO语言示例")]),t._v(" "),n("p",[t._v("这里我们给出通过"),n("strong",[t._v("后继节点")]),t._v("来替代自己的方案(请后面自行动手实现另一种方案):")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deleteNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" root "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" key "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deleteNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" root\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" key "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deleteNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" root\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//到这里意味已经查找到目标")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//右子树为空")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//左子树为空")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n minNode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" minNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//查找后继")]),t._v("\n minNode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" minNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" minNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val\n root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deleteMinNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" root\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deleteMinNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" root "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n pRight "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right\n root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" pRight\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deleteMinNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" root\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(629),alt:"img"}})])}),[],!1,null,null,null);s.default=r.exports},624:function(t,s,a){t.exports=a.p+"assets/img/1.03e01a60.jpg"},625:function(t,s,a){t.exports=a.p+"assets/img/2.c2d40091.jpg"},626:function(t,s,a){t.exports=a.p+"assets/img/3.7d36e53c.jpg"},627:function(t,s,a){t.exports=a.p+"assets/img/4.a8f0713b.jpg"},628:function(t,s,a){t.exports=a.p+"assets/img/5.15a64ae0.jpg"},629:function(t,s){t.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAq0AAAB5CAAAAAA2B0dnAAAifUlEQVR42u19fXQT17XvT7aRGaNgWWCDEWDLGGJwCBHIIQGTQHFIA3JIU5KXFUhJ2gqc1H32ve/luVldt+X2vrcS36y+4FWvXBP1pnykvQmG3CZSSkIEAWJTDAriw8YGC6vBCH+BPArCYwvJen/MSJoZzejDIfUVb37/WJqZc+Z8/M7e++x9rC3zQoKEJEHKeDdAgoS4IbFVQvJAYquE5IHEVgnJA4mtEpIHElslJA8ktkpIHkhslZA8kNgqIXkgsVVC8kBiq4TkgcRWCckDia0SkgcSWyUkDyS2SkgepI13AyQkBUZvpihk492I8WKrd//RACq0wa+OOgqlm8Z/NO4GkAds7pScFY/Iw5duvDWAop+xLsDWEP6sqlECwOi5T7t9GfPKZ9JXhw8dI1NmP1XETMpf9+j1492z8WLrwI5u9tdAEwXFSomsdwCBpr1eYLS38YsteaGLpweQuloevaBn1zkAQ2fOfX9dGgDX293A6N/qnyqTAYDnSHbpeHdtvNjas53kfL96BiieMd5DcVfA+r6P/nDdWD2VuUYeAzRzo5cbauikP4weSFsrg9/UrX5x1u3mDz8p1ABAy9UNyvHu2nixdXgExG1f6GvgiAfpK1LHeyjuBlzd60PWxmKv5YBv4E8VjDg91Q9ZKcF/VGdgfzvcCdmypyd173QGPl+gQe/5zK3TIF91y9SsAUAeydGNd9cQl0/AZvwOXju3anL4y9UzQJHmO+uibas5zifJ196kvrNm/F1w6htk/sPClInr1srQ5WR6dQyYtTBGz1sA3fMK2eyXp4BqBq7dnJcDAAsnOSkATQNrMse7a+CwlXqTnirzaxw1Te7tIhOuNViX2EufqM4Kfwsc8yBtxXcn5K1EccQ18rWtzCJ0VG+tdjBXHa75RGJ1AwCM4p21hermvNwodFG4FttWW/wt8V4BFuYAkC3LAnWNvvjVAGQPKaIXvHoD8hVpALJLACeFPkyXAUBmOjkCDHw5WytalHyNIYw5vpaav4X0i0USyogaJVnrCn7XGbgbSgBgbe7jQ14e+5vzDFB479i7EANkl3o6p0f1drrJdK9U25TUCHNLiNfxwlEXJBtRFdYTVmpf5RgWQHCEdQZYVcHazCb+Y1xlDsDvBbJkADBR5cIgAMB9LIDsJTFeeNsPxTQAQD5AjnCbHDh2c0OGaNFGqkoJAGSzLkSDKAyh2u25Y/YuRLK1h/PtkLNKCeXrQi+n6pUGAHDUBSnAmah4EWj5RnDH2v3vwxN/IjNd8KbNWl8kow6cGgxk6sqZcRz96nOnD4rch5dMFK85SCBXdfiazsCa5HJ62AgiRLU3wk+Wh8eU+qKlfzRFpS2LutNgZsRsYV0zoK13LDYOUaUByFqA7CoIvpTrQqLq7cjlF0uRAb0BGYBhF0Drr9Y+4JFYWyTtDu73aeinh47KTUd/y9xFIuWoejvwBqCqUTpcLisAFFYSQgwJ9ayyvrl0rDu2GLLVbImXfzoDb6LiRX+L8I7VR1LEJ+d9gM9Rt3LuH28BcB86/XIeALiNnQDg6ex8//uPibpmNNsBOOrUsaWbZjsAqt5VIziMZ3cNZetSPF2fT4xXKLCUUWgBRAhCBkYr8yG4qMrZb3G4nhV7g4BoSM/vxKX+aQBOD4KYAQCeIwFkLxaoIWD/xO6VF/5wJvdqKzBpAmbc03VjChCwUWoiYLlVJu7+KqwkAHMzKAtDUNEnw9qnBgj7eRNBkK1mE4BqYvNeF1OZzsCQlTQa4q+1K9SiatHp4eG4W2jHCgCgGEMo8MUXzJVBY/VUwLurM/iIt3VVdEdiG1VGADB2xRybDnu54COndk77x5kARk8Mi81BNcqLEdR+BCKVEcDhsIthqM4AGAzMTRVnVTnqNmsAWBE2CliwNTAyjIclTZS7/qV8r+VAAAVqADjfDSyZItAa2+kA4L1wifGoMrCeAPInYYb22B9eyBmxHFaU4urp4vmxp/GQK7ZY41iMxq7YlfIRZKteT9WjkoCWnleyFgAcX21TosnuiN8sLdgO0CssXnNt4AQg/8vuQLa+JNI/IXvgmSmeD48HANz3XLbnw+OBgc+el+FrO2TLnlb4rn1qy4hiUQEA2VxYxL9mtQIgqrJ4T+5VCTrA+xo1r2QAQMoyodua7TCSlQQckZaAzUrrQfNPg2NBM4ysLTAAYAY5evO7VDXKkEYNwWjlSuAQ8h8zBfrpahVPygEMfRFAqs3iU65eyVvVo/Qf35+VJezO+jB5JSD7QU/nrwCkfT/P//nt78XeAjssZX8Hh6xAO1TpoZn4NeCwlCe4h+KB2uGszBO/3UQCI/1A/7vWlyKIt+DHciie95wFCn6SAcXz3lO4dHMy7CPIKlcgbfaWtutzor+9kdog6GmMNFoaXYyGAldLHR/Wc9rl+ujcUFrehoKYHbc1qEglgLbW3ySu84Kj4yIGlRhxccoLWwEAANnqdkbtpDyZDwBnrwD+PoDcf/IVFffZnJfyfc0fen0fzw3VPrTHjdQfzgSQ8d+PHCLT8jYUoOvMAzEiCwDQRtBLfcSliv3wmBHTJ7BPvZqzwyusJBBSetbI5+vLEiL3wInQx3OH1/GDrw/LAaQ90upHaQaAtBVnve4bk+EH5HQwIdYe3tFWHEVBmUzhPtmsLIaam0PP3GrTcIjZ/nt/ydy/nfjtiyX82liWAADYGhjlrS+t3TaG3ScADLc/Rg8xZz/V6CoU01z+RjvzafTjmXNo0cqg+8MXOZM9eetMyFfJ9wQGuoJmre+DTqCEjgPI16yhr32esioVro9Oe+WL14szUb+J0SS8wbDiTiKCrRTXu3rIXkEwG0aWZSWw46PVK3qdliLuSBLVUV6PMySgfnEWdfiAD83LecqZoGOHk+QUvWNAFuEFgPxUf9/n6yYiJqh9KItyu1wf0sqOXSLPkGQ+W4W63yeqp+LBst/ty88OXx2pL1PyLAGzqRw2LT1u5c11YnQNbz3CrovCyuClYSz5igQGKTV3XDaImVlnTwSg3jzL17Kf8uz+x0zYrwJZG4t9LfsptHaH2xDyASzIcgWuBdlqswJz/xuXEvaOpfm4/LYH8J5ofSWKJrNaac+UkkA0n8C3Aqdpn3xVZtrCvI5ezY64d/mMetVsbuhIQLiOnAVyKlXIWAcT3M6sGI8zEnVO4cXAwYNAWvaDq6Kax4fsRGhvUwP+fpsF8h3cd03wjtenRJBVhZXEhf4fTQWgWrPrUpit9m1VGmxnvtCOJqO1oqi+vYgA0ORyvWp8Q8QnrQkW4++yAABKA6VyakEiTkvCe9SHgp9nQL5i4k5f34WHYfVDUZEP+YoJu/2UQ2DFTFSFvReX3/dh8nNcc8x7MP1RmXv3reVPKj0fHn+/KiLKYK8GABVggEkdY+a5XtgxmAwhtpK1Lsx/vYeqAysi7KjLSjQUWVTIF67RQN0ASlQAZNojN/234yxF/Oh3vQDg6/no4Ibl4me3bKYZg8z+XMAnMBjuGlmLbU2tYbOVM5LDAKAo8XrbAFyeNBsAMCPDsTw4RlRh5chrLlaJwspDXbVKbKg7pAfI5sLVMGCvZky2K6HsAZxErGXMYMCJ1CcyAGDxyXOBcw8N3wDm5QHAguxeDEUv7NrpQdqzXIcWOjpWq3Ghb8Fzciieu3HxUoQvLOjBAjaRsfp4x3wCxrYtn2A1cvXFdW2hNUi+U6xrSLBCoiwh4QpgFgBg0oQEikz9pfXIwBAAUHunie4ByL06nZCCZ4wWIKRfG1WVBITt1qyMPn8qkL2R3sJTEyYBADLTGa7b9m5rJIMuKyPJyEe9HoCmrLlUiSbXswRA23R2RtkHPVgFABx1ZWyBz19Wuc1kentBnEwfHIKCDtyl5p3DN8MAoJYBwARFrLK+j/ohW8s7vEJ9piiVoT2wRA5Avqija7F4BcSGOmNllBfwNER8/k0u0kJlmdFvw5w3dAY6pNVUYBAK/TqJaINXdN/f4WSIfNkyAN6m/b6Rs6JsbVJt6oi8OuIq1wNmC3v0oozcPequa7PCX1Nv31ICwK3bjLjTMkvTUbc5YpGubjdW9lrCAclEPFjB1hVbHEpnNOObjdv+MY9o4LMWYN73eIqq1bF2GuAHbR5kMcFcEWjK1AQdxBZkiHPMbQuBv8ui2tU/7a0zlwIwik4iFYzPCO34iJ8n8Pp0lQtOLQDc9CI1EfEKAPJVnaejDKDwaXfaANDrYYxLv6Y+csHyQniU8k9eUQPAlVvcjQ/DLns1O/5MGGrrXcQzwUf4MQPhGAKD4NxOV1smqosQH1STbnl6cwDA/zUwhYAyGIkd+QZgWaRGK+6vSAVw2wOkAsDFzwLI/hHPhvMcVD2cwHywYtUCDOnhntcYC/hs7bCXE5rtoFSgSFCCBijVTuvMO7HjIzR2nF2pAAInPbhnWpylhvdM0csB4PYQM9YJgGQ22BTJ068uYbt1vq7Ft4kAMDoKYNHhT+ZOBVwHcxZwq7USWSHhyYKdqBqDvarVwkLVVb0OgJhvQkW8G4Hsqbf8BwszAJy+ANl8YIGVicS2DSCdpSLmWNHpKARwvg/yAgDX3xsB8eJUXn1nr26YAiCVMXmdiLm+B6lcEYZQpHIsB9w44LGVsgQDOqTbtVy49hFXOH7Ami1r2NUY8mMgZnRgSRN15e3n1dThw8D9UxEXfP9hhW3tffcE3B9fhCwiKviu439EI4iTOdTUYa/g3hC2W5G2UXbijGYKPJe801MwZf3u/10y92+nRl/hHvh0tFGNEarIbMJjjrox+VrJLh3eqVECKLbEb1llPLon0Fn/vPp2y34fZi0EirIH3PUb5/la9gdQyJqFhZ+R1O83Fo+2NAagmQ0M7RyA7DG+f8p9kD6EPf/k2aVpwFBb6ry4miHIkN647Rlx8Nj6nr1CCQDE/OYenpMvRMEmQRpzAkS84EsU5D9mClz+FwBAzhNx/mdW22mgfyfzpZB/POjWtXnRTg5TzJaF3FsYp36Vby79/FInFAtK56cBJbn7TxyLcJRT+4iqd4xcutoaoDMAjjpiDKGsJqosq9ZYScBRl5W1S8kmvKNN3IRZeukEmOFUPKcApqzf6et/i/7+pJw+M1WuB7I37PQN0gdQFOsJ4GInEPj4Y7qS0LI92fdCJgAsmHbuT08ryA+68gpjtZuk1CIMscRtz4iDzVYlYbYGw6yr2xt0vF2Dw1UAAGQzL55OUgDxKoKGotkEQBUy1mJEB2SP+z6lI9b5W+N1wC2q2fN1MEST/2N+uJZ0F7NZTwZ9S7Se1+kYkSoUkg2CaufIBlkhe5JmVvGfJjFitFdoamqrJ4aOjwRpAWi2k7WuqCd8mJAaEx1QAYDNVK7Blrr3DLYGnYGqD8pn+mAmsUWU/WkbJx6lhyZrSwEA6Ib30jmmpm7hKLjQ9ayXRRXfjaPMIezMH73d3AxEOGPB9rfSDbSoNMIMcbRt/taGQIittgYQGxyWkPecpl8ILAo6KJYlZmsAwKV1gv/Jm7a+5C9tQ2mzvn9//D/EMfMXvc1t173ImL0qstS1NI7m5W9ljHRrHW2bhRU0c1g77pF11FGocNgrtFC+7qhj5q6iwVUeHkDl67BtFT2SFooPMO3roqO2ekBTpnrTXqEF8arxDbo0b1YEIH9u+SeXhlJySlfQoT7ZioUHbO6UnLKl3EMtshXF5lZ3+DkhnB9dy7Bzzi9FI68hfyuzkqqUwgy5E6IVsrsuu9t7wz9J9v/1DrlgQ/5bshZjPhlzF+HuY6uEuxfS72BJSB5IbJWQPJDYKiF5ILFVQvJAYquE5IHEVgnJA4mtEpIHElslJA8ktkpIHkhslZA8kNgqIXkgsVVC8kBiq4TkgcRWCckDia0SkgcSWyUkDyS2SkgeSGyVkDyQ2CoheSCxVULyQGKrhOSBxFYJyQOJrRKSBxJbJSQPJLZKSB5IbJWQPJDYKiF5ILFVQvJAYquE5IHEVgljAEWOy29Txs6O/J3Bv6sFimpW6gYY2TliOL/OS9XbsWgLq7HnGvxElYaTeTIj/4czISECN94aQNHP5JyU87xUa2ZT+DOT6IM8YHOn5Kx4hPmR4i7TJZ9iaTnzI8yeOuofpsT5+juJcWTrtTbggQT41eEIZ8byH4/MDDV0oePxtfL46/v/BacHkLo6wXEJ2HZTwGhv49EKNYCA5c8+wHPoEpOH+2z3D8eDrONoCQSOeECUiv+MdURmoZEToXzQuNYpVGT0wB9949af/6ogjwGaOHK2c2D9d0Zl9f/bdQBff4ryuobfzO3+sx8A3AenPTgufRk/2Xr1DFA0m3+V1v+dvxuJzCyE1uvBRMCBIx7WdVqneU/tvwVbaaLzctfjVD9kpaE0CiqxH4Tn5Gu+8ZEPWRuLvZYDvoGPN6eiybNmnQzTXnrrQq8awMm+ZzLjePOdx52TrdSbxkQeDxzxIH2lcGq2wIkRZEeylTwT/HS9NbKQfPkrBEbaY77YvNUW8xkajuqEevRfE+QxYNbCBAudHgDx04UpE9c9AVzoBeUkFssATCm4eQ3AjaOzlo5PZyLYaouYTP6k2d4MbWyMr5GCI/Ta1q3Cd8JwngMKC4TvuS8B9wrIgFPBLNBnBCvXzAX6YnWYaldFJnNxVG81B7sfbnkbpYtVm2DnzaL3jG8KZGqzCS0f21bhWoyxxpWPrwYgeyhmSmIuvBeAuRoAsqVK3LyGEZLJ0JWDPgDHrn9PvEIz03DytTfjyUpH/rMjgYbFYQnwJo2y2H9To3TsDmWZoerLQttLOg2NKnb+kcDRb5C6UsT2bx9AutDqvWq/HwAwdEqwWGo8W4leZzGncWSti87MSnsXCrcT1AjTFyFex4vwLpuVTJPsch1KLD8TjaCvpEJLdgXTfdIjzUGFQO5y97EAspck+D6/F8hLBQDFVDJCAPT9dc4DokUdFh3dw6ZwPrKIprKGxHHtnQSS1URla3DI2VnfdYZXHXU1FdTgtmBGyPfsKOqtowBYUVhJwFG3PPb7+88Cc/kZlAy008p7MoDpaoFC/uPFqQBgvyo6yFGyvtqYblhZfrJyPctiY2abIIJPgpX5lUWFawcvuCHPXamLtjqYFUvVs64pa2rbV48lx1lhJUG33+F6lrnES53lqKMEM5u39gGPJJq7iJ+WK13Z51YCCDgxDYEmzyaxPtga6OEt11PtTGLiCm2InrZdNGWMLPWgrWhoin8Bh9gaXgANoRFicgvy16ymane6dkEtkyDPaC3XQ7M9lII2LgSa3EgtFZntvitASWTWu5RAoOOKRsR9BQCOToGsr6yB2UHnTYvdSu0OAGStqlJoVnwffpGimY8e597ceEWvLbzcXcHMjEKCkOMSZTIUEpw0sVYRcW9riEyIDACeIwFkL2ZfGTxgc6fkrC3hm4CBM592+zLu5yVwu94LZIFQd53PA9B/+Z4ZcJ4oipKnrUJLZ7LvwHaC23M+Qs51pqPlcZCWJVvpabQ1VGjZMoFsjsyHqvk1oNyyo0cDwNEmMu5Rcf0kMLNY5KbVA4XAgMxx91NN+TLgWidk953n3/Zd+BMVez9hJcro3lXGknFNrmcFybqnZdkzBADqE6EdqtkEmExEVTgjdyHD/giEZzL4oUIbSp1oa+DOnrm5hjYlakKPsmC0ikz2+W5gCds1Ovivo8Bo77vWl3ji4IAfwNCJsy+ytfzQBx7ckw+sPPvZpOUTune6l00PfDGyJrbFRe5dHlOHcJZXfInYIywBJ0+hNFEb3mOpzgpt0GLV0JKeTvxIS2YrM4hfmfgygY8mEvD8k0cwGeNQO1AwI7JM5pxP0Xo9G4EjHmQvYLE1vH4Vz8XYTzjaiiOaZTIBUNXwn7QIZy1uOVm+VgYAxAah23o9WbtcD7RFWgJMzk4zQryiGcbIh2hyKNQoF53neDOHq2StS2S0h74IINVm8SlXB7cIAcZnfe6DF7hTz6gras894UzagQOdgHYGMPPZne+/D2BWearjq6KYqYmBRpTGfihxRLC1h5ug2WEp1hiCutNoLSyC5VpNhTY0tDX0qBOv0pYAnQO4+NesGoQyvg+cAHAD8PLWMkBbpbLFQvanrslDnnkM11uBxYJZpFM2zkFUUPuIZyIuluuZ7KrcJyl7OJ1yWAwMHZ35KDuiEej4qNuXsXj95JgjbbRCC4Bqt/fEbzHxGtUMkiJAcjfbYlYAgLNXAH8fQO4/yUShIH96edrf/tCPU0vu5z4794Uc6rODo56PfxYSndbDQMEPZABKcvdf8mWWrpno/wxPxN6Zk13M1sU5xp6KgP9miucgsSCUVZ6qt+sMgOGZ2gadgaWLyNrw48rXAUddbqy3NoXeQu1VZ3PvBc76kSUo1mbMteHU8owzJBS660IPjP7xnujBgQ57eZQdR1C26QzAITuLAaxtQXfPk2zx7TcfmPKk4szxi9VTeZWxLQEAMFrpASNetTWQMc0QYVwbWtEDABz1R+4VNfmGvghF/7o/fDENAGRPrQIKKn/r9p9cyIkjTjdkIuOp0YP42hkU05ff90GxgbYYgpnDOy88MBujp8wDyNaXiDrrla9Tv9OzpH1w4b/BGZLEwWdrr5PaxtIqZmvY11BH0aOi/NXvdfG40hgIZHwnTwNpT5TJu3c5caOFN9TXW4EFgpxKXX7ed9VeeAqYO4PNVpoGo927nJ5dEazhvHevKpqCqtCG8gHbTCLPOP2cpXjh4NIX0rD8zLv7DCxt4NhdxfMJUPXOqmaNEgBseyt21YvRlXW8xBT8GObi4IzithECTq76Q+FqkcbarwJZG4t9LfsptHZrwvnEc+adwuBwuA3BvOeyxV9SIXk19J8epD3H1Va+w+lrUn17TgDof/fCC+JStvcy7ZmiF5a4TyAx8N5H7SN+sacuRFeHhXWHCkpT4ucio2yNx9MK4OsByNatBfJefusGLnu5RvslEvIHhY8P3FvY4T/uvyocA0vJq/q/vQNf/iDKextdqtChrWqIb8zh2KVSCd8Zkk8K9bdc729W6NMALFzQdSMn9Iyp/X8RwfmnnUFkLbYNtuXqAVAWSrmt9jci4xQsFrHLAgDotI7AoBI9qvQ4BhmA1Q9FRT7kKybs9lMOlqyTTRcpkUWE5JDvg05gGS8+0t62TI2jLVnPL0hp+2PLvOURFQT1k6aqzhhDg9irkSh4bD1kr5heWR+kK/lOcW6Yrzru1HL2BHo9zKY4fEM0ugPIfAgAshd8CS/XHeU9CeTOEi4nf+hioKPbD41wDCyzdB/a1kwSfa3ZOmOY3hUK+QRY1qCjTl35npU1mCzV5fcCwKyHMHgRuNUzIxMAUvPO9TNsNZtQrudumMpXGwsMUJZZijVAh71cg5raxrHZrlkyEhSpjM+QoG4A8/IAYEF2L4biKhPGwRZg7g+4YsNrmVQmG2pJ3bgQWPh8w/HFEQ0JerCg2dwQIxLyrX0CRmuFFkRlfV3VdABoVG06xGycAMDKvIOW6Dy7lWJF6L8yIYrgAgBMpVsaKWG+dgD3Z4iUmp/dT1GQPSTiQpkK3BwRZavDUo5mgeu0T4BlDVL7ig2cwWSprlm3r98LYNEi2C4Co94MuinT/beZR1FbG3RZ0d4BAHgVAFa3WwygLKpSBFWySSD6Yrawt/dkbQGH1ukqq7bXWYa4oZYBwIQEQ68ALh8KIPtF3kSc7Vydg4HruQUAkJ89cDPKstHqTOooDOCtOdq1FAtstpK1rgotAKKy/p0qADAAoZFlOf+tlIDh0TE04/I/VzkawPcJJIjWESgWid1ULv4UEDrwEsKIWyV2y1KsF4i9D1IVWsDYxbIG+aEcNnInnyxhrRXZEG3HDMqZeTWAHhtzc4SuJzbUmfWH7BXh6wl4sBjtT8xvJtuIsQeE48b1P3iQ9jRvE0AdUa2UYXQ0PQUAJijct6JV8QyYvfKIqyCS1SOuRCNsXLaStapf0bUShtpG8SIUKRRQsT7WnDGxtmZHPD4BNeAaJgAEBgE5xwYlTwOzp4mW1DV5gMVi/bwOpIsfZRPWvbQBYADVHpc1mL3o+NmS0LeMadfc2QD8lzJ4i4Rml8nE1niazQ091rA9xY8ZCMcQaIwE5UOxxdwWR2AbYHY4vQEZgJFvgAzA1oDM/5kDACQgC+/oqXo7HtsAALdu09d9ewcgW8sXjacv6xM4hM0KbQaD3SyfwOBYjgyx2KoMixTl65z4NhfMuRCuJHBcK29WbqoP+xPYZ134UGe6By8sB9B/HpjNUetXbkD2oHisZMZcGxRi3bx+NGRhxI9gNGTExYu+2AXtVtnj7buHVqQA8AGQL/uD+YU04PyFpVwxRHYVEELRRGvhpgTbB1pgu1z1lTsATFd/qYrb8b7Aikv90wC0DSB9FpBzz033yXUyoO8ckB9enESuHacfzQYCJ25ici4Q+OwcoHuct9f1HJm2AkBKysgoAAy75JNitaCHyAIcLkaJsH0CJL6dbI0XJJUL8OxWat+STICo/CS02RxxWekHBKIDU4paAu8PrZB373Jjcgn7jv+4H5lR3HGpa9KRJ/zfMb7LHwxAtixi8/Sv8zeJ/4MC0KOmm9xE8QLBwnYrpv787T99XDgRTqdsAqC98Ff7I4pzrRredqTJ5dLxFytVbyfKTfVj8rU6XM9a3jMAIObb4y9VlD3grt84z9eyP4DCPGB6oQ0HUJbevdPNXfNLT47c+LcXZ41YDgPFUwDrXwLIforPjZarGzIBZE/t7S4CcNE9Nz7COSFwRMmqnh5XYQ7E2Bpha4TtDCsRGeDvcJWCH40UtwdSn+wa8O7bBwCyVTNpTUQvvxtdwH3RXKYFAu4AlpRfUMK/2Te0KBpZyS5apDosxXFag9N+aT3S6ktRrVoxHUh7oegvfx5VruedfXRYdLqGCm6FRisqtFhtro7bdRIGZSlcpmrI1QNm032Xua6hJiGrkMaU9Tt9/W8BABRPyoHUDVcHfPTWTva9PNpUVtUogcLHTQHn/wEAZK9LBXXEBwz8kqklqCDIIzOXAkDG0sadG4tHWxtHH4p1YIAiVekgm4VOFLdtHsOqFWKro44CVOwQpdEKEMxOlOziOacHKcD5rDLkAMoiegA4grJKIDqAqS839AMA5Ou5nu2zbqRqo7ErOu79ccT4OQmOO8yxi2kn3apy0M0UDMkGwaj1IOTLloW/pCzlH8QdpOCoI55RVjRkDbOHlPiFBgD0etvWqO4S5qRd0GFQAADvOasIbblJrTVaK7SOuqB8Zo7kihsXuuG99H9ST92Sxxn3tKfK2KMse9z36SgAYNYrorvUpoHNtGvh0Ssn6gHIHi6JfIhrH3bYywk0ubgBRIoEYFFHOcglihBbWRthtjeBdlcbWOJgkGIdZzabAKhKwbbPlMtNVgC6aLJK/U8tlv7RTO0TXF1CnQFmFmBsyJi96v6IWGCgcw7nFTxPCVVfpgGADmeVsFajD2vH7zIym6AqbSRqlNDuMJtoxul0DexTJ9odMDaIElbPMXVp76DRWqEBVvegmqhVQrOttpouHdPtI1ux8IDNnZJTtlQeHPdjX/aPZt73BC/cnbZ+ienSUJq6bLGoaei+uJA50pG2eYFo5DXkb6U9HDo9qHZduEtUvR0gqoixiVbI7tivGCR0vvXvhm9+u37xHahmXBF0wYb9t3Gd0r0LcefYKkHCdw3pl4UkJA8ktkpIHkhslZA8kNgqIXkgsVVC8kBiq4TkgcRWCckDia0SkgcSWyUkDyS2SkgeSGyVkDyQ2CoheSCxVULyQGKrhOSBxFYJyQOJrRKSBxJbJSQPJLZKSB5IbJWQPJDYKiF5ILFVQvJAYquE5MH/A9RGgpGRWxdYAAAAAElFTkSuQmCC"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/37.f66ba3cd.js b/learning/.vuepress/dist/assets/js/37.f66ba3cd.js deleted file mode 100644 index dd4cf0e4..00000000 --- a/learning/.vuepress/dist/assets/js/37.f66ba3cd.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{1103:function(s,a,t){"use strict";t.r(a);var n=t(3),e=Object(n.a)({},(function(){var s=this,a=s.$createElement,n=s._self._c||a;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天继续分享一道和位运算有关的题型,同样在难度上属于简单。我们还是从一道题开始吧")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("这道题,大家先想一想是用什么思路进行求解?")])]),s._v(" "),n("br"),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第191题:位1的个数")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入:00000000000000000000000000001011\n输出:3\n解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入:00000000000000000000000010000000\n输出:1\n解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[n("strong",[s._v("示例 3:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入:11111111111111111111111111111101\n输出:31\n解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[n("strong",[s._v("提示:")])]),s._v(" "),n("ul",[n("li",[s._v("请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。")]),s._v(" "),n("li",[s._v("在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。")])]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没什么意思了。")])]),s._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("blockquote",[n("p",[s._v("这道题仍然是**通过位运算来进行求解的非常典型的题目。**掩码是指使用一串二进制代码对目标字段进行位与运算,屏蔽当前的输入位。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("首先最容易想到的方法是:"),n("strong",[s._v("我们直接把目标数转化成二进制数,然后遍历每一位看看是不是1,如果是1就记录下来")]),s._v("。通过这种比较暴力的方式,来进行求解。比如Java中,int类型是32位,我们只要能计算出当前是第几位,就可以顺利进行求解。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("那如何计算当前是第几位呢,我们可以构造一个掩码来进行,说掩码可能大家听着有点懵逼,其实就是弄个1出来,1的二进制是这样:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:t(738),alt:"PNG"}}),s._v(" "),n("p",[s._v("我们只需要让这个掩码每次向左移动一位,然后与目标值求“&”,就可以判断目标值的当前位是不是1。比如目标值为21,21的二进制是这样:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:t(739),alt:"PNG"}}),s._v(" "),n("p",[s._v("然后每次移动掩码,来和当前位进行计算:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:t(740),alt:"PNG"}}),s._v(" "),n("p",[s._v("根据分析,完成代码:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("hammingWeight")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//初始化掩码为1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" mask "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("32")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v(" mask"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n result"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n mask "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mask "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:t(741),alt:"PNG"}}),s._v(" "),n("p",[s._v("注意:这里判断 n&mask 的时候,千万不要错写成 (n&mask) == 1,因为这里你对比的是十进制数。(恰好这个题我之前面试别人的时候问到过,对方就直接这么写了...)")]),s._v(" "),n("h2",{attrs:{id:"_03、继续优化"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、继续优化"}},[s._v("#")]),s._v(" 03、继续优化")]),s._v(" "),n("blockquote",[n("p",[s._v("位运算小技巧: 对于任意一个数,将 n 和 n-1 进行 & 运算,我们都可以把 n 中最低位的 1 变成 0")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("大家是否还记得昨天学会的技巧,昨天的题目我们通过计算 n & n-1 的值,来判断是否是 2 的幂。今天我们继续使用这个技巧,观察一下,"),n("strong",[s._v("对于任意一个数,将 n 和 n-1 进行 & 运算,我们都可以把 n 中最低位的 1 变成 0")]),s._v("。比如下面这两对数:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:t(742),alt:"PNG"}}),s._v(" "),n("p",[s._v("那下面就简单了,只需要不断进行这个操作就可以了。(翻CPP牌子,有没有好评的?)")]),s._v(" "),n("div",{staticClass:"language-c line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-c"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//c")]),s._v("\nclass Solution "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\npublic"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("hammingWeight")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("uint32_t n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" count "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("count"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" count"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("p",[s._v("肯定有人又是看的一脸懵逼,我们拿 11 举个例子:(注意最后一位1变成0的过程)")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:t(743),alt:"PNG"}}),s._v(" "),n("br"),s._v(" "),n("p",[s._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])])}),[],!1,null,null,null);a.default=e.exports},738:function(s,a,t){s.exports=t.p+"assets/img/1.c6534889.jpg"},739:function(s,a){s.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAhIAAABSCAMAAAA2JM3IAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABiVBMVEX////29vbo6Oj7+/uzs7PFxcW+vr7CwsKKioqYmJisrKzf39/j4+OUlJQAAADLy8vm5uacnJx0dHTDw8Pv7++ZmZnX19fz8/Pv062EYUIpGAAhOGOEps7v///316VzQRgYYa3n//////fWmloYAAAYTYzO8////+/OklIhAAAAVaXvsmsAADlrps7v+//3472ETRgxfcb3////986UTRj/98aEMAAAABhapt7/871zGACMz///77VzJBhCcaXWsnsASZze///OjjExjs7/w3u9dQBSpucAUaXnplKbm5v//86MMAAAADH/36VSAAAAAITG//8Afcbc3Nz39/f//8aEAAAAAFKl4///46UAgsbGggBCmt7/25xCAAAAGITO///GfQD//96cRQCEx////+elVQBrsu9aqufemkIYhs4AYa2cSQD/661jAAAAAEqc2//3unMAGHu99//OhjkAJGOcz+/nvoRKGABKmt6lXRg5bbX/772EQRhCltbWroRjQSkpTWuUtt5zJAAlgZplAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA6xJREFUeNrtnfdz0zAYhpWmoZCCKGGEPUKgQMseYZTRUiDsUWaZoey99+xfziXG1P6ukiMVayTv+0vs8z39NJ6zncSpGAuTYbF0xPbiB7NZyUGQvpOeNhsklABpjPS02SChBEhjpKfNBgklQBojPW02SCgB0hjpabNBQgmQxkhPmw0SSoA0Ror+RGcummmxva4uycHc9Bl5kM6RnbnuZpXoCDOzI5ZZHGmtzI7Mbnyye3qie8KzxBye00wBZGpknue1yabPEmIlupleCiBTI/N8rjYJJVqShBIgSaAESBIoAZIESoAkgRIgSaAESBIoAZIESoAkgRIgSaAESBIjSmTCzMvEMt+roWoXcipKLIjMbnyyi8Xo3gSDs4QHJC4cIEmgBEgSKAGSBEqAJIESIEmgBEgSV5VYuGgxX7J0mUaHbZCMLV+xchXTIB2sKVVCWjNNJUqry41nwNesVe2wDZKx3nXr+QaN6XGypkSJhJppKtFX7t+4iW3ewrduU+ywDZJt38G51vQ4WVOsRFLNFJXYuauyu/66Z2//PrUO2yAZG9h/4KDO9LhZU6xEUs0UlejjhwYbG0P8sFqHbZCNDOtMj5s1pfcSw3aUKB3hR8MGHBtU6bANMkhVY3ocrSlVovqflMiGKWZjOT55s0+cPPX3nHb6zNlzKh22QYZDdV580K+aCUpIaub5hcjsxid7ZCS6p6rExUuXrwRbVxWHygYZZIhfU54eR2tKlZDWVFDiX5q7cPioxCi/Lj7oV02pEtKa6d1LTDT7xs1bt/U6bI4Mcie8RPtfU6qEtGZ6StTu8rFgS3h/W3CHbOTeff5APFR+1ZQpIa+Z6juOh8HWI/5YqcM2yHCoxsRD5VfNBCUkNVP8XKLKnzQ+ga89FTlZcIhMHiq/ajqpxLPnL17WX1+VX79R67ANspFRjeu6ozUTbi+t3Euw0lv+7j0rffjIPyl22AaZPFR+1XRSCVb7HPw3rC+Tf74mGSobJPv6rQ5WvjNV0smaYiWSaqb6vETvj5/lyq/fgu/qZENlgxwY15weJ2tKvvYat6hEUvx6Tskv0tWnqhwcqnYhoQRIEigBkgQ/EwZJgp8JgyTBhQMkCZQASQIlQJJACZAkUAIkCZQASQIlQJJACZAkUAIkCZQASQIlQJJACZAklpXwaf3MdiGNrBOK1YTbJVNeTRhrjrcWqbDmuEgJhZXsQbYW6WmzQUIJkMZIT5sNEkqANEZ62myQUAKkMdLTZoNMjfwDt5iZcGPFT0QAAAAASUVORK5CYII="},740:function(s,a,t){s.exports=t.p+"assets/img/3.83aaac9c.jpg"},741:function(s,a){s.exports="data:image/jpeg;base64,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"},742:function(s,a,t){s.exports=t.p+"assets/img/5.faa33f79.jpg"},743:function(s,a,t){s.exports=t.p+"assets/img/6.983baa82.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/38.28f444ad.js b/learning/.vuepress/dist/assets/js/38.28f444ad.js deleted file mode 100644 index a949a937..00000000 --- a/learning/.vuepress/dist/assets/js/38.28f444ad.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{1108:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("p",[t._v("今天继续为大家讲解二分法系列篇 - 旋转排序数组最小值Ⅱ(进阶版)。话不多说,直接看题:")]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("昨天为大家讲解了元素不可重复的版本,那如果元素重复该如何处理呢?")])]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第154题:旋转排序数组最小值Ⅱ")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。 注意数组中可能存在重复的元素。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [1,3,5]\n输出: 1\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [2,2,2,0,1]\n输出: 0\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("说明:")])]),t._v(" "),n("ul",[n("li",[t._v("这道题是 "),n("RouterLink",{attrs:{to:"/1.9.二分法系列/1.9/904.html"}},[t._v("旋转排序数组中的最小值(153)")]),t._v(" 的延伸题目。")],1),t._v(" "),n("li",[t._v("允许重复会影响算法的时间复杂度吗?会如何影响,为什么?")])]),t._v(" "),n("h2",{attrs:{id:"_02、题目回顾"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目回顾"}},[t._v("#")]),t._v(" 02、题目回顾")]),t._v(" "),n("blockquote",[n("p",[t._v("之前我也说过,通过改变题中条件,使得题目难度上升的做法。在算法题目的设计中,是一种非常常见的手段。本题就是这样,从中等变成了困难。")])]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(759),alt:"PNG"}}),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(760),alt:"PNG"}}),t._v(" "),n("p",[t._v("在讲解本题之前,首先要对昨天的题目进行一个答疑。昨天有人问我为什么题目中讲的是与left进行比较,但是最后代码中写的时候变成了和right比较。这个确实是我讲的时候讲忘了,但是这其实是一个思维转化的问题:因为在旋转之前的原数组是一个递增序列,那一定是左边的数小,右边的数大,而我们要找的是最小值,所以比较偏向左找。那如果和left进行比较,其实也是完全ok的,那我们的思路就变成了找到偏右的最大值,进而向右再移动一位,自然也就是最小值。如果不能理解的话,可以回顾一下昨天的文章:")]),t._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.9.二分法系列/1.9/904.html"}},[t._v("旋转排序数组中的最小值(153)")])],1),t._v(" "),n("p",[t._v("并且我这里对昨天的题目,补上一个和left对比的版本,供大家参考学习(昨天没有给Go的示例,所以今天补一个Go的)")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br")])]),n("p",[t._v("上面的代码有两处需要说明,第一:mid中最后加1的目的,是为了使得mid更加靠近right,增加容错性。当然,你写到里边也是可以的,甚至更好。我怕大家看不懂,所以写在外面了。第二:最后一行代码取模,是需要考虑最大值刚好在最右边的情况。")]),t._v(" "),n("h2",{attrs:{id:"_03、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、题解分析"}},[t._v("#")]),t._v(" 03、题解分析")]),t._v(" "),n("blockquote",[n("p",[t._v("二分查找的本质,其实就是通过收敛查找空间,找到目标值的一种方式。请大家认真阅读这句话。不管是采用不同的mid定义方式,又或者是不一样的while条件,统统都是为了这个目的。在完成这个目的的基础上,我们才去考虑如何减少冗余代码,减少循环次数等等,完成进一步的优化。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("现在再来看今天的题目。相对比昨天题目而言,其实只是多了"),n("strong",[t._v("nums[mid] 等于 nums[right] 时的额外处理")]),t._v("。(当然, 如果是和left进行比较,就是nums[mid]等于nums[left])")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("对比一下下面两个图:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(761),alt:"PNG"}}),t._v(" "),n("center",[t._v("(无重复) ")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(762),alt:"PNG"}}),t._v(" "),n("center",[t._v("(有重复) ")]),t._v(" "),n("p",[t._v("其实直接就可以给出代码了:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findMin")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n right"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("p",[t._v("如果我们再对比一下代码的差异,就会非常的明显:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(763),alt:"PNG"}}),t._v(" "),n("center",[t._v("(左边是有重复,右边是无重复) ")]),t._v(" "),n("p",[t._v("可以看到在 nums[mid] 等于 nums[right] 时的情况下,我们只多了一个 right-1 的操作。这里需要额外说明的是,为什么要这样做?我看leetcode上的题解,这块很多都是长篇大论,其实没那么复杂,一句话就可以给你讲明白,看看下面这个!")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(764),alt:"PNG"}}),t._v(" "),n("p",[t._v("因为 mid 和 right 相等时,最小值既可能在左边,又可能在右边,所以此时自然二分思想作废,咱们就砍掉一个右边界。说白了,就是"),n("strong",[t._v("让子弹再飞一会儿")]),t._v("。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])],1)}),[],!1,null,null,null);s.default=e.exports},759:function(t,s,a){t.exports=a.p+"assets/img/1.f32a0445.jpg"},760:function(t,s,a){t.exports=a.p+"assets/img/2.90adfc88.jpg"},761:function(t,s,a){t.exports=a.p+"assets/img/3.aacfd3e5.jpg"},762:function(t,s,a){t.exports=a.p+"assets/img/4.6b5d3d0b.jpg"},763:function(t,s,a){t.exports=a.p+"assets/img/5.807d5b53.jpg"},764:function(t,s,a){t.exports=a.p+"assets/img/6.919e5b4b.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/39.a4ecc565.js b/learning/.vuepress/dist/assets/js/39.a4ecc565.js deleted file mode 100644 index 158c4526..00000000 --- a/learning/.vuepress/dist/assets/js/39.a4ecc565.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{1115:function(s,a,t){"use strict";t.r(a);var A=t(3),n=Object(A.a)({},(function(){var s=this,a=s.$createElement,A=s._self._c||a;return A("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[A("blockquote",[A("p",[s._v("坐汽车、火车、飞机的时候,大家不知道有没有想过这样一个问题?如果自己的票弄丢了,那么自己屁股随机这么一蹲,坐到自己位置的概率有多大?今天就为大家分析一下这个问题。")])]),s._v(" "),A("h2",{attrs:{id:"_01、题目分析"}},[A("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),A("table",[A("thead",[A("tr",[A("th",[s._v("第1227题:飞机座位分配概率")])])]),s._v(" "),A("tbody",[A("tr",[A("td",[s._v("有 n 位乘客即将登机,飞机正好有 n 个座位。第一位乘客的票丢了,他随便选了一个座位坐下。")])])])]),s._v(" "),A("p",[s._v("剩下的乘客将会:")]),s._v(" "),A("ul",[A("li",[s._v("如果他们自己的座位还空着,就坐到自己的座位上,")]),s._v(" "),A("li",[s._v("当他们自己的座位被占用时,随机选择其他座位")])]),s._v(" "),A("p",[s._v("第 n 位乘客坐在自己的座位上的概率是多少?")]),s._v(" "),A("br"),s._v(" "),A("p",[A("strong",[s._v("示例 1:")])]),s._v(" "),A("div",{staticClass:"language- line-numbers-mode"},[A("pre",{pre:!0,attrs:{class:"language-text"}},[A("code",[s._v("输入:n = 1\n输出:1.00000\n解释:第一个人只会坐在自己的位置上。\n")])]),s._v(" "),A("div",{staticClass:"line-numbers-wrapper"},[A("span",{staticClass:"line-number"},[s._v("1")]),A("br"),A("span",{staticClass:"line-number"},[s._v("2")]),A("br"),A("span",{staticClass:"line-number"},[s._v("3")]),A("br")])]),A("p",[A("strong",[s._v("示例 2:")])]),s._v(" "),A("div",{staticClass:"language- line-numbers-mode"},[A("pre",{pre:!0,attrs:{class:"language-text"}},[A("code",[s._v("输入: n = 2\n输出: 0.50000\n解释:在第一个人选好座位坐下后,第二个人坐在自己的座位上的概率是 0.5。\n")])]),s._v(" "),A("div",{staticClass:"line-numbers-wrapper"},[A("span",{staticClass:"line-number"},[s._v("1")]),A("br"),A("span",{staticClass:"line-number"},[s._v("2")]),A("br"),A("span",{staticClass:"line-number"},[s._v("3")]),A("br")])]),A("h2",{attrs:{id:"_02、题目图解"}},[A("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[s._v("#")]),s._v(" 02、题目图解")]),s._v(" "),A("p",[s._v("对于这道题,不卖关子,直接分析:")]),s._v(" "),A("p",[s._v("一个位置一个人,一屁股蹲下,概率100%,这没啥可说的。")]),s._v(" "),A("img",{staticStyle:{zoom:"67%"},attrs:{src:t(785),alt:"PNG"}}),s._v(" "),A("p",[s._v("两个位置两个人,第一个人已经坐下,要么坐对了,要么坐错了。所以第二个人坐在自己位置上的概率是50%。")]),s._v(" "),A("img",{staticStyle:{zoom:"67%"},attrs:{src:t(786),alt:"PNG"}}),s._v(" "),A("p",[s._v("重点来了,三个位置三个人,第一个一屁股坐下,有三种坐法。"),A("img",{staticStyle:{zoom:"67%"},attrs:{src:t(787),alt:"PNG"}})]),s._v(" "),A("p",[s._v("如果恰好"),A("strong",[s._v("第一个人坐到了自己的座位")]),s._v("上(1/3),那这种情况下,第二个人也就可以直接坐在自己的座位上,第三个人一样。所以此时第三人坐在自己座位上的可能性是 100%。")]),s._v(" "),A("img",{staticStyle:{zoom:"67%"},attrs:{src:t(788),alt:"PNG"}}),s._v(" "),A("p",[s._v("如果"),A("strong",[s._v("第一个人占掉了第二个人的位置")]),s._v("(1/3)**。**此时第二人上来之后,要么坐在第一人的位置上,要么坐在第三人的位置上。(1/2)所以,在这种情况下,第三人的座位被占的可能性是 1/3*1/2=1/6。")]),s._v(" "),A("img",{staticStyle:{zoom:"67%"},attrs:{src:t(789),alt:"PNG"}}),s._v(" "),A("p",[s._v("那假如第一人直接一屁股坐在第三人的座位上,此时第三人的座位被占的可能性就是第一人选择第三人座位的可能性。(1/3)")]),s._v(" "),A("img",{staticStyle:{zoom:"67%"},attrs:{src:t(790),alt:"PNG"}}),s._v(" "),A("p",[s._v("所以,如果三个座位三个人,第三个人坐到自己位置上的概率就是:1-1/6-1/3=1/2。当然,也可以通过 1/3+1/6=1/2 来正向计算。")]),s._v(" "),A("br"),s._v(" "),A("p",[s._v("而对于 n>3 的情况,我们参照 3 个座位时进行分析:")]),s._v(" "),A("ul",[A("li",[s._v("如果第 1个乘客选择第 1 个座位,那么第n个人选择到第 n 个座位的可能性就是 100%。(1/n)")]),s._v(" "),A("li",[s._v("如果第1个乘客选择了第n个座位,那么第 n 个人选择第 n 个座位的可能性就是0。(0)")]),s._v(" "),A("li",[A("strong",[s._v("而对于第 1 个乘客选择除了第一个和第 n 个座位之外的座位k (1=3 的情况,等同于 n=2,全部的概率都为 1/2")]),s._v("。")]),s._v(" "),A("br"),s._v(" "),A("p",[s._v("如果还是不能理解的小伙伴,可以这样想。"),A("strong",[s._v("登机时座位被占的乘客 ,其实相当于和上一位坐错的乘客交换了身份")]),s._v("。直到完成终止条件(坐对位置 或者 坐到最后一个位置),否则该交换将一直进行下去。所以第n位乘客,坐到第n个位置,自然还是 1/2。")]),s._v(" "),A("h2",{attrs:{id:"_03、go语言示例"}},[A("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[s._v("#")]),s._v(" 03、Go语言示例")]),s._v(" "),A("p",[s._v("根据分析,完成代码:")]),s._v(" "),A("div",{staticClass:"language-go line-numbers-mode"},[A("pre",{pre:!0,attrs:{class:"language-go"}},[A("code",[A("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),A("span",{pre:!0,attrs:{class:"token function"}},[s._v("nthPersonGetsNthSeat")]),A("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),A("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),A("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),A("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("float64")]),s._v(" "),A("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t"),A("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" n "),A("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),A("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),A("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),A("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),A("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\t"),A("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),A("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),A("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.5")]),s._v("\n"),A("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),A("div",{staticClass:"line-numbers-wrapper"},[A("span",{staticClass:"line-number"},[s._v("1")]),A("br"),A("span",{staticClass:"line-number"},[s._v("2")]),A("br"),A("span",{staticClass:"line-number"},[s._v("3")]),A("br"),A("span",{staticClass:"line-number"},[s._v("4")]),A("br"),A("span",{staticClass:"line-number"},[s._v("5")]),A("br"),A("span",{staticClass:"line-number"},[s._v("6")]),A("br")])]),A("br"),s._v(" "),A("blockquote",[A("p",[s._v("小伙伴都看懂了吗?")]),s._v(" "),A("p",[s._v("这里留下一个疑问,假如共有200个座位,平均有多少人没有坐到自己的位置呢?")]),s._v(" "),A("p",[s._v("评论区留下你的想法吧!")])])])}),[],!1,null,null,null);a.default=n.exports},785:function(s,a){s.exports="data:image/png;base64,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"},786:function(s,a,t){s.exports=t.p+"assets/img/2.2441502e.png"},787:function(s,a,t){s.exports=t.p+"assets/img/3.49d6ed2b.jpeg"},788:function(s,a,t){s.exports=t.p+"assets/img/4.2edb2d7e.png"},789:function(s,a,t){s.exports=t.p+"assets/img/5.865aaf84.png"},790:function(s,a,t){s.exports=t.p+"assets/img/6.2aa8b15e.png"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/4.54b78bf5.js b/learning/.vuepress/dist/assets/js/4.54b78bf5.js deleted file mode 100644 index 9f7be7af..00000000 --- a/learning/.vuepress/dist/assets/js/4.54b78bf5.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{1036:function(t,e,a){"use strict";a.r(e);var n=a(412),r=a(363),o=a(361),s={mixins:[o.a],components:{NavLink:n.a,ModuleTransition:r.a},computed:{actionLink:function(){return{link:this.$frontmatter.actionLink,text:this.$frontmatter.actionText}},heroImageStyle:function(){return this.$frontmatter.heroImageStyle||{maxHeight:"200px",margin:"6rem auto 1.5rem"}}}},i=(a(447),a(3)),c=Object(i.a)(s,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"home"},[a("div",{staticClass:"hero"},[a("ModuleTransition",[t.recoShowModule&&t.$frontmatter.heroImage?a("img",{style:t.heroImageStyle||{},attrs:{src:t.$withBase(t.$frontmatter.heroImage),alt:"hero"}}):t._e()]),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.04"}},[t.recoShowModule&&null!==t.$frontmatter.heroText?a("h1",[t._v(t._s(t.$frontmatter.heroText||t.$title||"vuePress-theme-reco"))]):t._e()]),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.08"}},[t.recoShowModule&&null!==t.$frontmatter.tagline?a("p",{staticClass:"description"},[t._v("\n "+t._s(t.$frontmatter.tagline||t.$description||"Welcome to your vuePress-theme-reco site")+"\n ")]):t._e()]),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.16"}},[t.recoShowModule&&t.$frontmatter.actionText&&t.$frontmatter.actionLink?a("p",{staticClass:"action"},[a("NavLink",{staticClass:"action-button",attrs:{item:t.actionLink}})],1):t._e()])],1),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.24"}},[t.recoShowModule&&t.$frontmatter.features&&t.$frontmatter.features.length?a("div",{staticClass:"features"},t._l(t.$frontmatter.features,(function(e,n){return a("div",{key:n,staticClass:"feature"},[a("h2",[t._v(t._s(e.title))]),t._v(" "),a("p",[t._v(t._s(e.details))])])})),0):t._e()]),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.32"}},[a("Content",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"home-center",attrs:{custom:""}})],1)],1)}),[],!1,null,null,null).exports,l=(a(17),a(50),a(45)),u=a(381),h=(a(32),a(415)),f=a.n(h),g=a(362),d={data:function(){return{popupWindowStyle:{}}},computed:{dataAddColor:function(){var t=this.$themeConfig.friendLink;return t&&t.length>0?t=t.map((function(t){return Object(l.a)(Object(l.a)({},t),{},{color:Object(g.a)()})})):[]}},methods:{getMd5:function(t){return f()(t)},showDetail:function(t){var e=this,a=t.target,n=a.querySelector(".popup-window-wrapper"),r=a.querySelector(".popup-window");n.style.display="block";var o=a.clientWidth,s=r.clientWidth,i=r.clientHeight;this.popupWindowStyle={left:(o-s)/2+"px",top:-i+"px"},this.$nextTick((function(){e._adjustPosition(a.querySelector(".popup-window"))}))},hideDetail:function(t){t.target.querySelector(".popup-window-wrapper").style.display="none"},getImgUrl:function(t){var e=t.logo,a=t.email;return e&&/^http/.test(e)?e:e&&!/^http/.test(e)?this.$withBase(e):"//1.gravatar.com/avatar/".concat(this.getMd5(a||""),"?s=50&d=mm&r=x")},_adjustPosition:function(t){var e=document.body.offsetWidth,a=t.getBoundingClientRect(),n=e-(a.x+a.width);if(n<0){var r=t.offsetLeft;this.popupWindowStyle=Object(l.a)(Object(l.a)({},this.popupWindowStyle),{},{left:r+n+"px"})}}}},m=(a(449),Object(i.a)(d,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"friend-link-wrapper"},t._l(t.dataAddColor,(function(e,n){return a("div",{key:n,staticClass:"friend-link-item",attrs:{target:"_blank"},on:{mouseenter:function(e){return t.showDetail(e)},mouseleave:function(e){return t.hideDetail(e)}}},[a("span",{staticClass:"list-style",style:{backgroundColor:e.color}}),t._v("\n "+t._s(e.title)+"\n "),a("transition",{attrs:{name:"fade"}},[a("div",{staticClass:"popup-window-wrapper"},[a("div",{ref:"popupWindow",refInFor:!0,staticClass:"popup-window",style:t.popupWindowStyle},[a("div",{staticClass:"logo"},[a("img",{attrs:{src:t.getImgUrl(e)}})]),t._v(" "),a("div",{staticClass:"info"},[a("div",{staticClass:"title"},[a("h4",[t._v(t._s(e.title))]),t._v(" "),a("a",{staticClass:"btn-go",style:{backgroundColor:e.color},attrs:{href:e.link,target:"_blank"}},[t._v("GO")])]),t._v(" "),e.desc?a("p",[t._v(t._s(e.desc))]):t._e()])])])])],1)})),0)}),[],!1,null,"48a8cd70",null).exports),p=a(376),v=a(372),_=a(419),C={mixins:[v.a,o.a],components:{NoteAbstract:p.a,TagList:u.a,FriendLink:m,ModuleTransition:r.a,PersonalInfo:_.a},data:function(){return{recoShow:!1,currentPage:1,tags:[]}},computed:{homeBlogCfg:function(){return this.$recoLocals.homeBlog},actionLink:function(){var t=this.$frontmatter;return{link:t.actionLink,text:t.actionText}},heroImageStyle:function(){return this.$frontmatter.heroImageStyle||{maxHeight:"200px",margin:"6rem auto 1.5rem"}},bgImageStyle:function(){var t={height:"350px",textAlign:"center",overflow:"hidden"},e=this.$frontmatter.bgImageStyle;return e?Object(l.a)(Object(l.a)({},t),e):t},heroHeight:function(){return document.querySelector(".hero").clientHeight}},mounted:function(){this.recoShow=!0,this._setPage(this._getStoragePage())},methods:{getCurrentPage:function(t){var e=this;this._setPage(t),setTimeout((function(){window.scrollTo(0,e.heroHeight)}),100)},getPages:function(){var t=this.$site.pages;t=t.filter((function(t){var e=t.frontmatter,a=e.home,n=e.date;return!(1==a||void 0===n)})),this.pages=0==t.length?[]:t},getPagesByTags:function(t){this.$router.push({path:t.path})},_setPage:function(t){this.currentPage=t,this.$page.currentPage=t,this._setStoragePage(t)},getOneColor:g.a}},b=(a(450),Object(i.a)(C,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"home-blog"},[n("div",{staticClass:"hero",style:Object.assign({},t.bgImageStyle)},[n("div",{staticClass:"mask",style:{background:"url("http://github.com/+(t.$frontmatter.bgImage?t.$withBase(t.$frontmatter.bgImage):a(448))+") center/cover no-repeat"}}),t._v(" "),n("ModuleTransition",[t.recoShowModule&&t.$frontmatter.heroImage?n("img",{style:t.heroImageStyle||{},attrs:{src:t.$withBase(t.$frontmatter.heroImage),alt:"hero"}}):t._e()]),t._v(" "),n("ModuleTransition",{attrs:{delay:"0.04"}},[t.recoShowModule&&null!==t.$frontmatter.heroText?n("h1",[t._v("\n "+t._s(t.$frontmatter.heroText||t.$title||"vuePress-theme-reco")+"\n ")]):t._e()]),t._v(" "),n("ModuleTransition",{attrs:{delay:"0.08"}},[t.recoShowModule&&null!==t.$frontmatter.tagline?n("p",{staticClass:"description"},[t._v("\n "+t._s(t.$frontmatter.tagline||t.$description||"Welcome to your vuePress-theme-reco site")+"\n ")]):t._e()])],1),t._v(" "),n("ModuleTransition",{attrs:{delay:"0.16"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"home-blog-wrapper"},[n("div",{staticClass:"blog-list"},[n("note-abstract",{attrs:{data:t.$recoPosts,currentPage:t.currentPage}}),t._v(" "),n("pagation",{staticClass:"pagation",attrs:{total:t.$recoPosts.length,currentPage:t.currentPage},on:{getCurrentPage:t.getCurrentPage}})],1),t._v(" "),n("div",{staticClass:"info-wrapper"},[n("PersonalInfo"),t._v(" "),n("h4",[n("i",{staticClass:"iconfont reco-category"}),t._v(" "+t._s(t.homeBlogCfg.category))]),t._v(" "),n("ul",{staticClass:"category-wrapper"},t._l(this.$categories.list,(function(e,a){return n("li",{key:a,staticClass:"category-item"},[n("router-link",{attrs:{to:e.path}},[n("span",{staticClass:"category-name"},[t._v(t._s(e.name))]),t._v(" "),n("span",{staticClass:"post-num",style:{backgroundColor:t.getOneColor()}},[t._v(t._s(e.pages.length))])])],1)})),0),t._v(" "),n("hr"),t._v(" "),0!==t.$tags.list.length?n("h4",[n("i",{staticClass:"iconfont reco-tag"}),t._v(" "+t._s(t.homeBlogCfg.tag))]):t._e(),t._v(" "),n("TagList",{on:{getCurrentTag:t.getPagesByTags}}),t._v(" "),t.$themeConfig.friendLink&&0!==t.$themeConfig.friendLink.length?n("h4",[n("i",{staticClass:"iconfont reco-friend"}),t._v(" "+t._s(t.homeBlogCfg.friendLink))]):t._e(),t._v(" "),n("FriendLink")],1)])]),t._v(" "),n("ModuleTransition",{attrs:{delay:"0.24"}},[n("Content",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"home-center",attrs:{custom:""}})],1)],1)}),[],!1,null,null,null).exports),w=(a(26),a(30),a(364)),$=a(49);function y(t,e,a){var n=[];!function t(e,a){for(var n=0,r=e.length;n0||a>0||r>0?Object(n.d)(t):Object(n.d)(t,"yyyy-MM-dd")}},methods:{goTags:function(t){this.$router.push({path:"/tags/".concat(t,"/")})}}},o=(a(369),a(3)),s=Object(o.a)(r,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[t.pageInfo.frontmatter.author||t.$themeConfig.author||t.$site.title?a("i",{staticClass:"iconfont reco-account"},[a("span",[t._v(t._s(t.pageInfo.frontmatter.author||t.$themeConfig.author||t.$site.title))])]):t._e(),t._v(" "),t.pageInfo.frontmatter.date?a("i",{staticClass:"iconfont reco-date"},[a("span",[t._v(t._s(t._f("formatDateValue")(t.pageInfo.frontmatter.date)))])]):t._e(),t._v(" "),!0===t.showAccessNumber?a("i",{staticClass:"iconfont reco-eye"},[a("AccessNumber",{attrs:{idVal:t.pageInfo.path,numStyle:t.numStyle}})],1):t._e(),t._v(" "),t.pageInfo.frontmatter.tags?a("i",{staticClass:"iconfont reco-tag tags"},t._l(t.pageInfo.frontmatter.tags,(function(e,n){return a("span",{key:n,staticClass:"tag-item",class:{active:t.currentTag==e},on:{click:function(a){return t.goTags(e)}}},[t._v("\n "+t._s(e)+"\n ")])})),0):t._e()])}),[],!1,null,"484a899e",null);e.a=s.exports},366:function(t,e,a){var n=a(0),r=a(367);n({target:"Array",proto:!0,forced:r!==[].lastIndexOf},{lastIndexOf:r})},367:function(t,e,a){"use strict";var n=a(16),r=a(31),o=a(11),s=a(27),i=a(20),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,h=s("lastIndexOf"),f=i("indexOf",{ACCESSORS:!0,1:0}),g=u||!h||!f;t.exports=g?function(t){if(u)return l.apply(this,arguments)||0;var e=n(this),a=o(e.length),s=a-1;for(arguments.length>1&&(s=c(s,r(arguments[1]))),s<0&&(s=a+s);s>=0;s--)if(s in e&&e[s]===t)return s||0;return-1}:l},368:function(t,e,a){"use strict";var n=a(7),r=a(4),o=a(107),s=a(21),i=a(5),c=a(34),l=a(177),u=a(35),h=a(1),f=a(52),g=a(51).f,d=a(33).f,m=a(8).f,p=a(378).trim,v=r.Number,_=v.prototype,C="Number"==c(f(_)),b=function(t){var e,a,n,r,o,s,i,c,l=u(t,!1);if("string"==typeof l&&l.length>2)if(43===(e=(l=p(l)).charCodeAt(0))||45===e){if(88===(a=l.charCodeAt(2))||120===a)return NaN}else if(48===e){switch(l.charCodeAt(1)){case 66:case 98:n=2,r=49;break;case 79:case 111:n=8,r=55;break;default:return+l}for(s=(o=l.slice(2)).length,i=0;ir)return NaN;return parseInt(o,n)}return+l};if(o("Number",!v(" 0o1")||!v("0b1")||v("+0x1"))){for(var w,$=function(t){var e=arguments.length<1?0:t,a=this;return a instanceof $&&(C?h((function(){_.valueOf.call(a)})):"Number"!=c(a))?l(new v(b(e)),a,$):b(e)},y=n?g(v):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),S=0;y.length>S;S++)i(v,w=y[S])&&!i($,w)&&m($,w,d(v,w));$.prototype=_,_.constructor=$,s(r,"Number",$)}},369:function(t,e,a){"use strict";var n=a(357);a.n(n).a},370:function(t,e,a){"use strict";var n=a(358);a.n(n).a},371:function(t,e,a){"use strict";var n=a(359);a.n(n).a},372:function(t,e,a){"use strict";a(377);e.a={methods:{_getStoragePage:function(){var t=window.location.pathname,e=JSON.parse(sessionStorage.getItem("currentPage"));return null===e||t!==e.path?(sessionStorage.setItem("currentPage",{page:1,path:""}),1):parseInt(e.page)},_setStoragePage:function(t){var e=window.location.pathname;sessionStorage.setItem("currentPage",JSON.stringify({page:t,path:e}))}}}},374:function(t,e,a){},375:function(t,e,a){},376:function(t,e,a){"use strict";a(25);var n={components:{PageInfo:a(364).a},props:["item","currentPage","currentTag"]},r=(a(370),a(3)),o={components:{NoteAbstractItem:Object(r.a)(n,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"abstract-item"},[t.item.frontmatter.sticky?a("i",{staticClass:"iconfont reco-sticky"}):t._e(),t._v(" "),a("div",{staticClass:"title"},[t.item.frontmatter.keys?a("i",{staticClass:"iconfont reco-lock"}):t._e(),t._v(" "),a("router-link",{attrs:{to:t.item.path}},[t._v(t._s(t.item.title))])],1),t._v(" "),a("div",{staticClass:"abstract",domProps:{innerHTML:t._s(t.item.excerpt)}}),t._v(" "),a("hr",{staticClass:"hr"}),t._v(" "),a("PageInfo",{attrs:{pageInfo:t.item,currentTag:t.currentTag}})],1)}),[],!1,null,"28f76ce9",null).exports},props:["data","currentPage","currentTag"],computed:{currentPageData:function(){var t=10*this.currentPage-10,e=10*this.currentPage;return this.data.slice(t,e)}}},s=(a(371),Object(r.a)(o,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"abstract-wrapper"},t._l(t.currentPageData,(function(e){return a("NoteAbstractItem",{key:e.path,attrs:{item:e,currentPage:t.currentPage,currentTag:t.currentTag}})})),1)}),[],!1,null,"b014bc36",null));e.a=s.exports},379:function(t,e,a){"use strict";var n=a(360);a.n(n).a},381:function(t,e,a){"use strict";a(106);var n=a(22),r=a(362),o={props:{currentTag:{type:String,default:""}},computed:{tags:function(){return[{name:"全部",path:"/tag/"}].concat(Object(n.a)(this.$tags.list))}},methods:{tagClick:function(t){this.$emit("getCurrentTag",t)},getOneColor:r.a}},s=(a(379),a(3)),i=Object(s.a)(o,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"tags"},t._l(t.tags,(function(e,n){return a("span",{key:n,class:{active:e.name==t.currentTag},style:{backgroundColor:t.getOneColor()},on:{click:function(a){return t.tagClick(e)}}},[t._v(t._s(e.name))])})),0)}),[],!1,null,"36b9f66a",null);e.a=i.exports},401:function(t,e,a){},402:function(t,e,a){},403:function(t,e,a){},404:function(t,e,a){},405:function(t,e,a){},406:function(t,e,a){"use strict";var n=a(374);a.n(n).a},407:function(t,e,a){"use strict";var n=a(375);a.n(n).a},447:function(t,e,a){"use strict";var n=a(401);a.n(n).a},448:function(t,e,a){t.exports=a.p+"assets/img/home-bg.7b267d7c.jpg"},449:function(t,e,a){"use strict";var n=a(402);a.n(n).a},450:function(t,e,a){"use strict";var n=a(403);a.n(n).a},451:function(t,e,a){"use strict";var n=a(404);a.n(n).a},452:function(t){t.exports=JSON.parse('{"a":"1.4.5"}')},453:function(t,e,a){"use strict";var n=a(405);a.n(n).a}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/40.b4710b92.js b/learning/.vuepress/dist/assets/js/40.b4710b92.js deleted file mode 100644 index 9988c3a2..00000000 --- a/learning/.vuepress/dist/assets/js/40.b4710b92.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{1123:function(t,a,s){"use strict";s.r(a);var n=s(3),r=Object(n.a)({},(function(){var t=this,a=t.$createElement,n=t._self._c||a;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("p",[t._v("上一篇为大家分享了不同路径的DP解法之后,有很多小伙伴后台给我留言,说直接用公式法一步就可以得到答案。给你们点个赞!确实是这样,我没有用公式法的原因,是因为我的目的是想层层推进难度为大家分析不同路径这一类题型。后面我会单独拉出一系列,专门为大家讲解公式法一类的题目。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("如果还没有学习上一篇内容,建议先进行学习:")]),t._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.99.其他补充题目/1.99/13.html"}},[t._v("不同路径")])],1),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("多了一点障碍物之后,题目会有何不同?(这可是困难题目哦~")])]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("不同路径 - 障碍物")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("一个机器人位于一个 m x n 网格的左上角,起始点在下图中标记为“Start”。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,在下图中标记为“Finish”。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 问总共有多少条不同的路径?")])])])]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:s(828),alt:"PNG"}}),t._v(" "),n("p",[t._v("网格中的障碍物和空位置分别用 1 和 0 来表示。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("**说明:**m 和 n 的值均不超过 100。")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:\n[\n [0,0,0],\n [0,1,0],\n [0,0,0]\n]\n输出: 2\n\n解释:\n3x3 网格的正中间有一个障碍物。\n从左上角到右下角一共有 2 条不同的路径:\n\\1. 向右 -> 向右 -> 向下 -> 向下\n\\2. 向下 -> 向下 -> 向右 -> 向右\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br")])]),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("blockquote",[n("p",[t._v("因为只是多了一点障碍物,题目的本质并没什么不同,所以直接进行分析即可。")])]),t._v(" "),n("p",[t._v("首先我们还是定义状态,"),n("strong",[t._v("用****DP[i][j]表示到达i行j列的最多路径")]),t._v("。同时,因为第0行和第0列都只有一条路径,所以需要初始化为1。但有一点不一样的就是:"),n("strong",[t._v("如果在0行0列中遇到障碍物,后面的就都是0,意为此路不通")]),t._v("。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:s(829),alt:"PNG"}}),t._v(" "),n("p",[t._v("完成了初始化,下面就是状态转移方程。和没有障碍物的相比没什么特别的,仍然是dp[i][j] = dp[i-1][j] dp[i][j-1]。唯一需要处理的是:"),n("strong",[t._v("如果恰好[i][j]位置上有障碍物,则dp[i][j]为0")]),t._v("。比如下图,有dp[1][2]为0。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:s(830),alt:"PNG"}}),t._v(" "),n("p",[t._v("根据分析,得出代码:(今天翻java牌子)")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//JAVA ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("uniquePathsWithObstacles")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" dp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:s(831),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、代码优化"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、代码优化"}},[t._v("#")]),t._v(" 03、代码优化")]),t._v(" "),n("blockquote",[n("p",[t._v("不啰嗦,我们当然要继续"),n("strong",[t._v("压缩内存")]),t._v("。")])]),t._v(" "),n("p",[t._v("为了大家更好的理解代码,我们还是绘图说明。假若我们的网格如下,其中黑色表示障碍物。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:s(832),alt:"PNG"}}),t._v(" "),n("p",[t._v("因为计算每一个格子能到达的最多路径,只需要左边和上边的元素,所以我们定义状态"),n("strong",[t._v("dp[j]表示到达当前行第j位置的最多路径")]),t._v("。这里有一个需要额外说的,就是我们把dp[0]初始化为1,因为在到达第一行的第一个元素时,路径只有一个。下面的图,左边的表示当前网格,右边的是指网格中对应dp数组的值。")]),t._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:s(833),alt:"PNG"}}),t._v(" "),n("p",[t._v("根据分析,得出代码:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//JAVA ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("uniquePathsWithObstacles")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" dp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" ints "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" obstacleGrid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ints"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("br"),t._v(" "),n("p",[t._v("**思考:**上面的代码其实还可以优化内存,大家想想怎么做")])])}),[],!1,null,null,null);a.default=r.exports},828:function(t,a,s){t.exports=s.p+"assets/img/1.4a84211e.jpg"},829:function(t,a){t.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAjUAAAEBCAMAAAC3yKSMAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACvlBMVEX////u7u79/f37+/v5+fmrq6ugoKCqqqqoqKinp6dzc3Nra2uDiY97gYe7wce6wMa4vsS3vcN9gYV2en7v7++Xl5cAAAASGR8xQ1QfKzVoaGihoaFnZ2dBQUFTWmBFWGksOENCQkJvb29ycnJmZmZxcXF4f4VHWWtkdoc0P0pwcHCjo6Nubm6enp5tbW3/36VSAACEx/+RwNzm9Pv/+/fm08GRdof3162EYTkhAAAAABgpQWOMtt73////78aEOACRy+z6///17uzm6vT6/f/66tD3x4Q5AAAAGCladYyMfWtKJAA5gsb/361rOABkn9jr//////fXtZdkksHX9P/rz6b/871zGAAAGFql3///+96lXRh7vvf/9+e9ilIYGACv3/v638FkueT/8tygdofenkpKnt7/25xKAAAAYa3v///GggAAJFKMvue9ggBkdrn///vcvIdkdsXc+f////TSqIf//+etXQAAAEKc2////96cRQAAAGu17//Gikpznsbn+/9kdtDm/////+/IiYdkdqbN7v/my4f//8aEAAAAAHvG//+9dQCdnZ1ks+D1/////+zDdofD6v/12rn/46UAGITO//9aqudsbGz/9uCqdoeq3Pf13L0AVaXn///eolJSpufnplLXsYcAAFqt5/94vORkqtzw///XuZ7r0ar/67VrGABzuvf68OwAACFKaXtkdpebwtzv0619gogQFRtdYmiFipA6PUELDhI/Qkd1dXU3Oj0WHychKTI5RVEYHSI0NDQvLy8wMDAzMzNLS0txeH4fKjUtLS1GWGgsOEJlZWVAQECzusBIWmszP0myub+wt72vtrx8gIUiLjoyPko6RlIYHiM2NjZ5eXkxMTE1NTUyMjJNTU1rb3NxdXljY2M/Pz+ysrJaWlpgYGBfX19eXl49PT0iIiIrKysqKiqoPZYqAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAOxAAADsQBlSsOGwAACYxJREFUeNrt3PV3HFUDxvEhSYt7GEJb5IUXCF6cBg3S4hAo7u4v7u7eIgWKS4u7v4IWd3fpC0X/C7J70p1phj33Pmfv5t47+/3+sjnbOc8Z2M/JTjY5kyRZsyWDa2svPJV0FJ9qbys+x1i5x6I8acY8j0V50ox5HovypBnzPBblSTPmeSzKk2bM81iUJ82Y57EoT5oxz2NRnjRjnseiPGnGPI9FedKMeR6L8qQZ8zw2s2HDhw1u9jkKTw2bs/jUHLMXnppr7rncjc0z7zzzDWr+BeYrtGDxqQXmLzy10MILBfqfGe5YP41ZrXTWWiQNtUW7HLaY7/+aKBvRmS/nZ2Q6yl2LuxxbomtJdy0V7H+m07F/uBwblS5d7x1qZLpM4qx/psu6G1uua/luZ62QrujuzEYFOzai/guttxJqgn2hUYMaz2OoQY0ealCjhxrU6KEGNXqoQY0ealCjhxrU6KEGNXqoQY0ealCjhxrU6KEGNXqoQY1ec9W01RqOGrmWUbNyW76kvdYqqJFrGTWrtufL/RPvUHoto4brmlBfaNSgxvMYalCjhxrU6KEGNXqoQY0ealCjhxrU6KEGNXqoQY0ealCjF5qa1Uavbj7IVo3VmJWaNdZMkrXWXseNmnXXG9Oz/gYbGo+zeqG9jFmpsR1rXM1GG6fu1NiN2ajZpDfZdLPNky2MbGzUjB235VZbb5Nua/z/afNC+xmzUWM91rCa7bZP3amxHLNQs8OOfTt1d+88PtnFgZpdd9t9jyTZc6+evU1HWrzQnsYs1NiPNahmn33H9OznSo31mIWa/ZMDKg8H9h50cONqDkkPrTwcdvgRRxqOtHihPY1ZqLEfa1DNUenRx/zLlRrrMbOaY8cfd3zl8YQTTzq5YTWnnHra6ZXHM84862zDoeYX2teYWY0w1qCac849r//FdqTGesys5vwLLryo8njxJcmlDau57PIrrqw89l1lPDnzC+1rzKxGGCuo6ah1teXPUM7UWI+Z1UyYeM211S+uS65vWM2k0TfcOHByNxkONb/QvsbMaoSxldLJHfly/2T7k3eYam6+pfrFrcltDtTcfkf1izvTuwyH2rzQfsZs1FiPOfi8pnXU3O3yhR7iMUGNeQw1fK/Rx0qrhuuaWXN8XVNKNfwMNbjm/gyVFbOa7POavnsaVpN9kDFlquFQ5SOWoR1TPq8xjpVUzczPhu/tHbi+aURN9qHpwBt//ZSPc4d2TPls2DhWVjX33d/3QPX3UA+ajrRQ89DDA7+gecR0pMUL7WnMQo39WFnVVH7n/ajD33k/9rjDX1P7GLP7nbflWGnVPPGky7+vecrln8R4GbP6+xrbMf6Wj7/l00MNavRQgxo91KBGDzWo0UMNavRQgxo91KBGr6CGe4A2UsuoGXQPUO433Egto2bQ/YazeIfSaxk1XNeE+kKjBjWex1CDGj3UoEYPNajRQw1q9FCDGj3UoEYPNajRQw1q9FCDGj3UoEYPNajRQw1q9FCDGj3UoEZvqNQ8/cyzzznr+X//57/O+t8LL77krJfTV9yd2avBjk1LX3M3tnT6+qxWOmu90eWwN1MqU2915sv5Wa7rbXe9k77rrvcYk1vc5di76bR671Dvd33g7urhQ5fXNU4vksK9FInyugY1ZRpDDWr0UIMaPdSgRg81qNFDDWr0UIMaPdSgRg81qNFDDWr0UIMaPdSgRg81qNFDDWr0UIMaveaqyW7R9xFqSjTW3Ls5ZrcD/Rg1JRpr7p1js3iHKtMY1zWo0UMNavRQgxo91KBGDzWo0UMNavRQgxo91KBGDzWo0UMNavRQgxq9oNSssWaSrLX2OqgJfSwkNZv0JptutnmyhZENajyPBaRmhx37duru3nl8sgtqAh8LSM3+yQGVhwN7DzoYNWGPhaPm2PHHHV95POHEk05GTdhj4ag5/4ILL6o8XnxJcilqwh5rrpqOWp8Y1UyYeM211S+uS65HTdhjjtVM7siX+yfz95oJE2++pfrFrcltqAl7LJx3KNTEM4Ya1OiFpIbrmljGwlHDz1DxjIWjJvu8pu8e1IQ9Fo6amZ8N39s7cH2DmmDHAlJz3/19D1R/D/Wg6UjUeB4LSE3ld96P8jvvGMZCUvPEk/x9TRxjIamxDjWex1CDGj3UoEYPNajRQw1q9FCDGj3UoEYPNajRa64a7gFazrHm3gOU+w2Xc6y59xvO4h2qTGNc16BGDzWo0UMNavRQgxo91KBGDzWo0UMNavRQgxo91KBGDzWo0UMNavRQgxo91KBGDzWo0UMNavRQgxq9oVLz6Weff+GsL9OvvnbWNJdj36TftsLYdy7Hlk2/n9VKZ60fUqI6vdWZL+fnx3S6u/7PWInGpqfT6r1DjUyXcfdO6PRShOsavaG6rkFNmcZQgxo91KBGDzWo0UMNavRQgxo91KBGDzWo0UMNavRQgxo91KBGDzWo0UMNavRQgxo91KBGr7lqslv0DUdNicaaezfH7Hagq6CmRGPNvXNsFu9QZRrjugY1eqhBjR5qUKOHGtTooQY1eqhBjR5qUKOHGtTooQY1eqhBjR5qUKMXlJp11xvTs/4GGxqPQ43nsZDUjB235VZbb5Nua2SDGs9jAanZdbfd90iSPffq2dt0JGo8jwWk5pD00MrDYYcfcaThSNR4HgtHzSmnnnZ65fGMM88623AoajyPhaPmssuvuLLy2HdVurrhUNR4Hmuumo5aVxvVTBp9w43VL45KbzIcihrPY47VTO7Il/sn8/eaSaNvv6P6xZ3pXYZDUeN5LJx3qJqau1ET+liAavheE/xYSGq4rollLBw1/AwVz1g4arLPa6ZMNRyKGs9j4ajJPhseuL6pH2o8jwWk5qGHB34P9YjpSNR4HgtITTJ23GOP8zvvGMZCUpM8xd/XxDEWlBrbUON5DDWo0UMNavRQgxo91KBGDzWo0UMNavRQgxq95qrhHqDlHGvuPUC533A5x5p7v+Es3qHKNMZ1DWr0UIMaPdSgRg81qNFDDWr0UIMaPdSgRg81qNFDDWr0UIMaPdSgRg81qNFDDWr0UIMaPdSgRg81qNEbQjU/Oav/hQ50rP+1aYWxfjXuxgpqOmstkhLVaURnvvz3mp9nDO6XXwtPzfi7p34pPPXb738EO/YnY+LYjJ/rv93NVnimrb14VEfxqfY2xlptLMqTZszzWJQnzZjnsShPmjHPY1GeNGOex6I8acY8j0V50ox5HovypBnzPBblSTPmeSzKk2bM81iUJ82Yz7G/ABWnqbAp56aEAAAAAElFTkSuQmCC"},830:function(t,a){t.exports="data:image/jpeg;base64,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"},831:function(t,a){t.exports="data:image/jpeg;base64,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"},832:function(t,a,s){t.exports=s.p+"assets/img/5.b505cca6.jpg"},833:function(t,a,s){t.exports=s.p+"assets/img/6.3f8c796e.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/41.de5df3e2.js b/learning/.vuepress/dist/assets/js/41.de5df3e2.js deleted file mode 100644 index 9a48f86b..00000000 --- a/learning/.vuepress/dist/assets/js/41.de5df3e2.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{1125:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天给分享一道比较简单的扑克牌题目。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("拿到题目的小伙伴,可能觉得“我次奥”,这特么也能出一道题 ?不得不说《贱止offer》,嗯....不错!")])]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("扑克牌中的顺子")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: [1,2,3,4,5]\n输出: True\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: [0,0,1,2,5]\n输出: True\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("限制:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("数组长度为 5 \n数组的数取值为 [0, 13] \n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("blockquote",[n("p",[s._v("题目就是找一个顺子....啥?你不知道什么是顺子,看下面这个。")])]),s._v(" "),n("p",[s._v("顺子长这样:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(846),alt:"PNG"}}),s._v(" "),n("p",[s._v("因为此题本身属于简单到要屎系列,所以直接给题解。数组长度限制了是5,非常省事,意味着我们不需要一些额外的处理。拿到牌,第一个想法是啥?排序!我想打过牌的人,都会知道这点(想象那个插插插的过程)。"),n("strong",[s._v("因为是5连,无论接没接到大小王,最小值和最大值之间,一定小于5")]),s._v("。")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(847),alt:"PNG"}}),s._v(" "),n("p",[s._v("排序后,我们通过累积每两张牌之间的差值,来计算最小值和最大值中间的总差值。")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(848),alt:"PNG"}}),s._v(" "),n("p",[s._v("拿到了王,就相当于拿到了通行证,直接跳过。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("因为是排序的牌,如果接到对子,也就意味着不是五连,直接返回false。(怎么每次说到五连,我就想到“penta kill” )")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(849),alt:"PNG"}}),s._v(" "),n("p",[s._v("根据分析,得出代码:(翻个go的牌子吧)")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//go ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isStraight")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("bool")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n sort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ints")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" \n sub "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("continue")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n sub "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" sub "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(850),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_03、不排序咋整"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、不排序咋整"}},[s._v("#")]),s._v(" 03、不排序咋整")]),s._v(" "),n("blockquote",[n("p",[s._v("“没吃过猪肉,也见过猪跑”这句话来源于《红楼梦》第十六回,有云:“偏你又怕他不在行了。谁都是在行的?孩子们这么大了,没吃过猪肉,也见过猪跑。”")])]),s._v(" "),n("p",[s._v("没吃过猪肉还没见过猪跑么,一模一样的整法!和排序本质上没啥区别,还是"),n("strong",[s._v("通过计算最大值和最小值之间的差值,来判断是否为五连")]),s._v("。唯一的区别,是需要记录一些数据。包括:用数组或者map记录下是否有重复牌,记录下最大值和最小值用来做最终差值计算。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("直接给代码:(好奇c 有木有人看?)")]),s._v(" "),n("div",{staticClass:"language-c line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-c"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//C ")]),s._v("\nclass Solution "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n public"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" \n bool "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isStraight")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("arr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("14")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("14")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" false"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" min "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("max "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("13")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("min "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("14")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" min "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("max "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" max"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" min "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(851),alt:"PNG"}})])}),[],!1,null,null,null);t.default=r.exports},846:function(s,t,a){s.exports=a.p+"assets/img/1.048fe315.jpg"},847:function(s,t,a){s.exports=a.p+"assets/img/2.3bd5679a.jpg"},848:function(s,t,a){s.exports=a.p+"assets/img/3.f425d51a.jpg"},849:function(s,t,a){s.exports=a.p+"assets/img/4.639a8eb0.jpg"},850:function(s,t){s.exports="data:image/jpeg;base64,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"},851:function(s,t){s.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/42.9ce52f1f.js b/learning/.vuepress/dist/assets/js/42.9ce52f1f.js deleted file mode 100644 index 2b074569..00000000 --- a/learning/.vuepress/dist/assets/js/42.9ce52f1f.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{1134:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天穿插为大家讲解一道臭长臭长的经典题目。我把字体加大了,加大了,加大了。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("本题是leetcode第12题,意为整数转罗马数字,题目难度中等,代码通过九万次,建议掌握。")])]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第12题:整数转罗马数字")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("罗马数字包含以下七种字符:I, V, X,L,C,D 和 M。")])])])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("字符 数值\nI 1\nV 5\nX 10\nL 50\nC 100\nD 500\nM 1000\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])]),n("br"),s._v(" "),n("p",[s._v("例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。27 写做 XXVII, 即为 XX + V + II 。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。")]),s._v(" "),n("p",[s._v("X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。")]),s._v(" "),n("p",[s._v("C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: 3\n输出: "III"\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: 4\n输出: "IV"\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 3:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: 9\n输出: "IX"\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 4:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: 58\n输出: "LVIII"\n解释: L = 50, V = 5, III = 3.\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[n("strong",[s._v("示例 5:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: 1994\n输出: "MCMXCIV"\n解释: M = 1000, CM = 900, XC = 90, IV = 4.\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[s._v("#")]),s._v(" 02、题解分析")]),s._v(" "),n("blockquote",[n("p",[s._v("看见长长的题目,别怂。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("因为题目很长,所以读懂题意很重要。这道题说是让我们转换罗马数字,其实说白了就是让我们用特殊的规则凑数。"),n("strong",[s._v("罗马数字本身就可以理解为一种特殊的数学规则。")])]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(898),alt:"PNG"}}),s._v(" "),n("p",[s._v("那如何来凑数?自然就需要读懂题意,比如 2 就是通过 1+1 凑;3 通过 1+1+1 凑;6 通过 5+1 凑。同时,在凑的过程中,又加入了一些奇怪的规则。比如说,4 不允许 1+1+1+1 凑,而是得 5-1 凑;而 9 不能 5+1+1+1+1 凑,而是得 10-1 凑;这个分析怎么出来的?题目中说的:")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[s._v("I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。")]),s._v(" "),n("li",[s._v("X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。")]),s._v(" "),n("li",[s._v("C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("看到这里,估计熟悉的小伙伴,能找到那么点感觉。凑数,凑数,凑钱。有一道很经典的题目 “硬币找零” 不也是一样的玩法吗。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("然后,我们把题目中所有的字符列出来:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(899),alt:"PNG"}}),s._v(" "),n("p",[s._v("当然,除了这些还不够。因为上面我们还分析出了一些特殊的规则,也得列出来:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(900),alt:"PNG"}}),s._v(" "),n("p",[s._v("然后我们利用这张表格,对给出的数字进行转化(拼凑)。假设我们要找的数为2834,大概的流程如下(其实是一种类似贪心的思想):")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(901),alt:"PNG"}}),s._v(" "),n("p",[s._v("对比着代码看更为明朗:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("intToRoman")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" num"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" nums "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1000")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("900")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("500")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("400")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("90")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("50")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("40")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" romans "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"M"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CM"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"D"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CD"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"C"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"XC"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"L"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"XL"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"X"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"IX"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"V"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"IV"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"I"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" index "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("StringBuilder")]),s._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("StringBuilder")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("index "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("13")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("romans"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n index "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("toString")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(902),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_03、啰嗦一下"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、啰嗦一下"}},[s._v("#")]),s._v(" 03、啰嗦一下")]),s._v(" "),n("blockquote",[n("p",[s._v("这道题目限制了最大数为 3999,时间复杂度也就被限制成了O(1)。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("我还看到了一个西PP很骚的解法,拿出来大家瞅瞅:")]),s._v(" "),n("div",{staticClass:"language-cpp line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-cpp"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//cpp")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n string "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("intToRoman")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" num"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"I"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"II"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"III"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"IV"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"V"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"VI"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"VII"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"VIII"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"IX"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"X"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"XX"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"XXX"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"XL"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"L"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LX"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LXX"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LXXX"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"XC"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"C"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CC"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CCC"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CD"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"D"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"DC"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"DCC"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"DCCC"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CM"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"M"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MM"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MMM"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n string roman"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n roman"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1000")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n roman"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n roman"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n roman"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" roman"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br")])]),n("p",[s._v("这个解法应该没什么解释的,就是把每一位 0-10 的情况枚举出来。这道题目稍微长了点,但是分析下来并没有什么难度。有的同学一看到题目很长,直接就怂了,这种其实就很不好。唔,再放一张女神照片:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(903),alt:"PNG"}}),s._v(" "),n("br"),s._v(" "),n("p",[s._v("今天的题目到这里就结束了。你学会了吗?快来评论区留下你的想法吧!")])])}),[],!1,null,null,null);t.default=r.exports},898:function(s,t,a){s.exports=a.p+"assets/img/1.78783a70.jpg"},899:function(s,t,a){s.exports=a.p+"assets/img/2.a3352c98.jpg"},900:function(s,t,a){s.exports=a.p+"assets/img/3.c3858898.jpg"},901:function(s,t,a){s.exports=a.p+"assets/img/4.b99fbd0c.jpg"},902:function(s,t,a){s.exports=a.p+"assets/img/5.672ce4c2.jpg"},903:function(s,t,a){s.exports=a.p+"assets/img/6.7579b251.gif"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/43.cc935510.js b/learning/.vuepress/dist/assets/js/43.cc935510.js deleted file mode 100644 index 6cf5f82d..00000000 --- a/learning/.vuepress/dist/assets/js/43.cc935510.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{1136:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("69式是一种。。。咳咳,六九问题是一道很有趣的算法题。嗯,不服来辩。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("注意,num每一位上的数字都是 6 或者 9 。")])]),s._v(" "),n("br"),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("题目:1323. 6 和 9 组成的最大数字")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给你一个仅由数字 6 和 9 组成的正整数 "),n("code",[s._v("num")]),s._v("。")])])])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("大概就是这么个意思:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(921),alt:"PNG"}}),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入:num = 9669\n输出:9969\n\n解释:\n改变第一位数字可以得到 6669 。\n改变第二位数字可以得到 9969 。\n改变第三位数字可以得到 9699 。\n改变第四位数字可以得到 9666 。\n其中最大的数字是 9969 。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[s._v("#")]),s._v(" 02、题解分析")]),s._v(" "),n("blockquote",[n("p",[s._v("因为题目太简单了,所以。。。。我也不知道为什么拿来讲。反正不是凑字数 😂(我一定不会告诉你我是因为标题污所以选它的)")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("我们只要找到 num 中最高位的 6,将其翻转成 9,就可以找到答案。")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" maximum69Number "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" num"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("replaceFirst")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"9"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("valueOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(922),alt:"PNG"}}),s._v(" "),n("br"),s._v(" "),n("p",[s._v("emmmmm,大概就是这样。。。。我感觉要被锤,溜了溜了。")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(923),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_03、知识点总结"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、知识点总结"}},[s._v("#")]),s._v(" 03、知识点总结")]),s._v(" "),n("blockquote",[n("p",[s._v("写出上面的答案,大概率是被面试官锤了。那这道题到底是考察我们什么呢?")])]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(924),alt:"PNG"}}),s._v(" "),n("p",[s._v("大家可以看到,这是一道数学题。所以我们需要用数学的方法来进行求解。具体代码如下:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("maximum69Number")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" num"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1000")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3000")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1000")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("300")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("30")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("6")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" num"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br")])]),n("p",[s._v("其实这种解法,和上面的解法没什么区别。"),n("strong",[s._v("都是从高位到低位进行判断,遇到 6 就将其变为 9")]),s._v("。只不过,上面是通过 replaceFirst 来进行,下面通过数值相加的方式来进行。那这种方法的效率我们看看:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(925),alt:"PNG"}}),s._v(" "),n("p",[s._v("吊炸天有没有!难怪古人说,学好数理化,走遍天下都不怕。只会 replace 画,面试结束找妈妈。")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(926),alt:"PNG"}}),s._v(" "),n("p",[s._v("现在你知道为什么你和别人一起去面试,面试官挂了你,而选择别人了吧。"),n("strong",[s._v("面试官的思维,往往就是这么朴实无华且枯燥。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("今天的题目到这里就结束了,你学会了吗?快来评论区留下你的想法吧!")])])}),[],!1,null,null,null);t.default=e.exports},921:function(s,t,a){s.exports=a.p+"assets/img/1.fee741e6.jpg"},922:function(s,t,a){s.exports=a.p+"assets/img/2.e6b05cdb.jpg"},923:function(s,t,a){s.exports=a.p+"assets/img/3.0c3a60cf.gif"},924:function(s,t,a){s.exports=a.p+"assets/img/4.577ac376.jpg"},925:function(s,t,a){s.exports=a.p+"assets/img/5.e942f55e.jpg"},926:function(s,t,a){s.exports=a.p+"assets/img/6.cc7c7072.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/44.aa82a8ef.js b/learning/.vuepress/dist/assets/js/44.aa82a8ef.js deleted file mode 100644 index 288eb242..00000000 --- a/learning/.vuepress/dist/assets/js/44.aa82a8ef.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{1018:function(s,t,a){s.exports=a.p+"assets/img/1.21ffa5ba.jpg"},1019:function(s,t,a){s.exports=a.p+"assets/img/2.21e27729.jpg"},1020:function(s,t){s.exports="data:image/jpeg;base64,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"},1021:function(s,t,a){s.exports=a.p+"assets/img/4.ce034acb.jpg"},1022:function(s,t,a){s.exports=a.p+"assets/img/5.0424dafc.jpg"},1023:function(s,t,a){s.exports=a.p+"assets/img/6.674c41b3.jpg"},1146:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天是小浩算法 “365刷题计划” 第 108 天。为大家讲解 leetcode 第 59 题,是一道中等难度的题目。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("大家也可以先看下该题的第一个版本:")]),s._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.99.其他补充题目/1.99.其他补充题目/01.html"}},[s._v("螺旋矩阵Ⅰ(54)")])],1),s._v(" "),n("br"),s._v(" "),n("p",[s._v("本类题目在面试时出现的频率"),n("strong",[s._v("极高")]),s._v(",尤其是对于工作年限在三年内的同学。因为该题非常考验 coding 能力,"),n("strong",[s._v("尤其是对边界条件的处理")]),s._v("。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("很容易筛选面试者。")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(1018),alt:"PNG"}}),s._v(" "),n("br"),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(1019),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("做这道题之前,可以通过上面的链接做一下螺旋矩阵Ⅰ")])]),s._v(" "),n("br"),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第59题:螺旋矩阵Ⅱ")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个正整数 n,生成一个包含 1 到 n**2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。")])])])]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: 3\n输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("br"),s._v(" "),n("p",[s._v("题目理解较为容易,给定 n = 3,那就生成一个 3^2 = 9 的矩阵。大家看下面的图可能更加直观一些:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(1020),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[s._v("#")]),s._v(" 02、题解分析")]),s._v(" "),n("blockquote",[n("p",[s._v("螺旋矩阵类的题目,"),n("strong",[s._v("思路基本都为模拟路径,难点都是考察边界的处理")]),s._v("。虽然也有一些奇淫巧技,但万变不离其宗。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("既然要模拟路径,先分析下路径是什么:")]),s._v(" "),n("br"),s._v(" "),n("center",[s._v("右-下-左-上")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("然后模拟向内环绕的过程,逐层填充:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(1021),alt:"PNG"}}),s._v(" "),n("p",[s._v("这种方法其实有一个专业点的名字,叫做:蛇形填数")]),s._v(" "),n("br"),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(1022),alt:"PNG"}}),s._v(" "),n("br"),s._v(" "),n("p",[s._v("这里额外说一下,除了上面这种填充方式外,还有一种填充方式:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(1023),alt:"PNG"}}),s._v(" "),n("p",[s._v("两者的区别,只是边界条件设定不同。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("第一种填充方式的代码:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("generateMatrix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" e "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v("e "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("e"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" e"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" e"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("p",[s._v("第二种填充方式的代码:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("generateMatrix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" e "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" e"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" e "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" e "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])]),n("p",[s._v("看完这两种解法,有没有 get✔ 到这道题目的核心呢?正是大量的边界操作,让这道题目成为了面试官的香饽饽。如果 coding 能力比较差,基本都会栽到这道题目上。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("所以,非常建议基础较差的同学,认真练习一下上面的两种实现。")]),s._v(" "),n("br"),s._v(" "),n("h2",{attrs:{id:"_03、相似题目"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、相似题目"}},[s._v("#")]),s._v(" 03、相似题目")]),s._v(" "),n("blockquote",[n("p",[s._v("然后这里我准备了几道同一类型的题目,建议大家刷一刷。完成之后可能会有一些不一样的思考。")])]),s._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.99.其他补充题目/1.99.其他补充题目/01.html"}},[s._v("螺旋矩阵Ⅰ(54)")])],1),s._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.99.其他补充题目/1.99.其他补充题目/51.html"}},[s._v("旋转图像(48)")])],1),s._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.99.其他补充题目/1.99.其他补充题目/31.html"}},[s._v("生命游戏(289)")])],1),s._v(" "),n("br"),s._v(" "),n("p",[s._v("今天的题目到这里就结束了,你学会了吗?快来评论区留下你的想法吧!")])],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/45.308197a4.js b/learning/.vuepress/dist/assets/js/45.308197a4.js deleted file mode 100644 index 3d025123..00000000 --- a/learning/.vuepress/dist/assets/js/45.308197a4.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{1046:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),n("p",[s._v("我们先来看一道题目:")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第350题:两个数组的交集")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定两个数组,编写一个函数来计算它们的交集。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: nums1 = [1,2,2,1], nums2 = [2,2]\n\n输出: [2,2]\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]\n\n输出: [4,9]\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[s._v("说明:")]),s._v(" "),n("ul",[n("li",[s._v("输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。")]),s._v(" "),n("li",[s._v("我们可以不考虑输出结果的顺序。")])]),s._v(" "),n("p",[s._v("进阶:")]),s._v(" "),n("ul",[n("li",[s._v("如果给定的数组已经排好序呢?将如何优化你的算法呢?")])]),s._v(" "),n("p",[s._v("思路:设定两个为0的指针,比较两个指针的元素是否相等。如果指针的元素相等,我们将两个指针一起向后移动,并且将相等的元素放入空白数组。")]),s._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[s._v("#")]),s._v(" 02、题解分析")]),s._v(" "),n("blockquote",[n("p",[s._v("首先拿到这道题,我们基本马上可以想到,此题可以看成是一道传统的"),n("strong",[s._v("映射题(map映射)")]),s._v(",为什么可以这样看呢,因为"),n("strong",[s._v("我们需找出两个数组的交集元素,同时应与两个数组中出现的次数一致。这样就导致了我们需要知道每个值出现的次数,所以映射关系就成了<元素,出现次数>")]),s._v("。剩下的就是顺利成章的解题。")])]),s._v(" "),n("p",[s._v("由于该种解法过于简单,我们不做进一步分析,直接给出题解:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//GO")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("intersect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums1 "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" nums2 "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n m0 "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" v "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("range")]),s._v(" nums1 "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//遍历nums1,初始化map")]),s._v("\n m0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n k "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" v "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("range")]),s._v(" nums2 "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//如果元素相同,将其存入nums2中,并将出现次数减1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" m0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n m0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("v"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" v\n k"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br")])]),n("p",[s._v("这个方法比较简单,相信大家都能看的懂!")]),s._v(" "),n("h2",{attrs:{id:"_03、题目进阶"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、题目进阶"}},[s._v("#")]),s._v(" 03、题目进阶")]),s._v(" "),n("blockquote",[n("p",[s._v("题目在进阶问题中问道:如果给定的数组已经排好序呢?你将如何优化你的算法?我们分析一下,假如两个数组都是有序的,分别为:arr1 = [1,2,3,4,4,13],arr2 = [1,2,3,9,10]")])]),s._v(" "),n("p",[n("img",{attrs:{src:a(462),alt:"PNG"}})]),s._v(" "),n("p",[s._v("对于两个已经排序好数组的题,我们可以很容易想到使用双指针的解法~")]),s._v(" "),n("p",[s._v("解题步骤如下:")]),s._v(" "),n("p",[s._v("<1>设定两个为0的指针,**比较两个指针的元素是否相等。**如果指针的元素相等,我们将两个指针一起向后移动,并且将相等的元素放入空白数组。下图中我们的指针分别指向第一个元素,判断元素相等之后,将相同元素放到空白的数组。")]),s._v(" "),n("p",[n("img",{attrs:{src:a(463),alt:"PNG"}})]),s._v(" "),n("p",[s._v("<2>如果两个指针的元素不相等,**我们将小的一个指针后移。**图中我们指针移到下一个元素,判断不相等之后,将元素小的指针向后移动,继续进行判断。")]),s._v(" "),n("p",[n("img",{attrs:{src:a(464),alt:"PNG"}})]),s._v(" "),n("p",[s._v("<3>反复以上步骤。")]),s._v(" "),n("p",[n("img",{attrs:{src:a(465),alt:"PNG"}})]),s._v(" "),n("p",[s._v("<4>直到任意一个数组终止。")]),s._v(" "),n("p",[n("img",{attrs:{src:a(466),alt:"PNG"}})]),s._v(" "),n("h2",{attrs:{id:"_04、题目解答"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、题目解答"}},[s._v("#")]),s._v(" 04、题目解答")]),s._v(" "),n("p",[s._v("根据分析,我们很容易得到下面的题解:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//GO")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("intersect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums1 "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" nums2 "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\ti"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n\tsort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ints")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\tsort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ints")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\tj"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" nums2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\ti"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\tnums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\t\t\ti"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n\t\t\tj"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n\t\t\tk"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" nums1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br")])]),n("blockquote",[n("p",[s._v("提示:解答中我们并没有创建空白数组,因为遍历后的数组其实就没用了。我们可以"),n("strong",[s._v("将相等的元素放入用过的数组中,就为我们节省下了空间")]),s._v("。")])])])}),[],!1,null,null,null);t.default=r.exports},462:function(s,t,a){s.exports=a.p+"assets/img/1.7a0a4d35.jpg"},463:function(s,t,a){s.exports=a.p+"assets/img/2.583ba8c5.png"},464:function(s,t,a){s.exports=a.p+"assets/img/3.53ddd978.png"},465:function(s,t,a){s.exports=a.p+"assets/img/4.2af867bd.png"},466:function(s,t,a){s.exports=a.p+"assets/img/5.16739550.png"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/46.2e7c9ee4.js b/learning/.vuepress/dist/assets/js/46.2e7c9ee4.js deleted file mode 100644 index d0aff8da..00000000 --- a/learning/.vuepress/dist/assets/js/46.2e7c9ee4.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{1058:function(t,s,n){"use strict";n.r(s);var a=n(3),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"_01、题目分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("第1题:两数之和")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。")])])])]),t._v(" "),a("p",[t._v("你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。")]),t._v(" "),a("p",[a("strong",[t._v("示例:")])]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("给定 nums = [2, 7, 11, 15], target = 9\n因为 nums[0] + nums[1] = 2 + 7 = 9\n所以返回 [0, 1]\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("br"),t._v(" "),a("blockquote",[a("p",[t._v("题目分析")])]),t._v(" "),a("p",[t._v("首先我们拿到题目一看,马上可以想到"),a("strong",[t._v("暴力题解")]),t._v("。我们只需要 “"),a("strong",[t._v("遍历每个元素 x,并查找是否存在一个值与 target - x 相等的目标元素。")]),t._v("”"),a("br"),t._v(" "),a("br"),t._v("\n由于该种解题思路过于简单,直接上代码(如果有问题请留言..):")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("func twoSum(nums []int, target int) []int {\n\tfor i, v := range nums {\n\t\tfor k := i + 1; k < len(nums); k++ {\n\t\t\tif target-v == nums[k] {\n\t\t\t\treturn []int{i, k}\n\t\t\t}\n\t\t}\n\t}\n\treturn []int{}\n}\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("p",[t._v("执行结果:")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(498),alt:"PNG"}}),t._v(" "),a("blockquote",[a("p",[t._v("运行成功,但是该种解题方式的时间复杂度过高,达到了O(n²)。为了对运行时间复杂度进行优化,我们需要一种更有效的方法来检查数组中是否存在目标元素。我们可以想到用"),a("strong",[t._v("哈希表")]),t._v("的方式,通过以空间换取时间的方式来进行。")])]),t._v(" "),a("h2",{attrs:{id:"_02、题目图解"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[t._v("#")]),t._v(" 02、题目图解")]),t._v(" "),a("p",[t._v("假设 nums = [2, 7, 11, 15], target = 9")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("<1> 首先,我们还是先遍历数组 nums,i 为当前下标。我们需要将每一个遍历的值放入 map 中作为 key。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(499),alt:"PNG"}}),t._v(" "),a("p",[t._v("<2> 同时,对每个值都判断 map 中是否存在 "),a("strong",[t._v("target-nums[i]")]),t._v(" 的 key 值。在这里就是 9-7=2。我们可以看到 2 在 map 中已经存在。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(500),alt:"PNG"}}),t._v(" "),a("p",[t._v("<3> 所以,2 和 7 所在的 key 对应的 value,也就是 [0,1]。就是我们要找的两个数组下标。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(501),alt:"PNG"}}),t._v(" "),a("h2",{attrs:{id:"_03、go语言示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[t._v("#")]),t._v(" 03、Go语言示例")]),t._v(" "),a("p",[t._v("根据以上分析,我们可以得到下面的题解:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("func twoSum(nums []int, target int) []int {\n result := []int{}\n m := make(map[int]int)\n for i,k := range nums { \n if value,exist := m[target-k];exist {\n result = append(result,value)\n result = append(result,i)\n }\n m[k] = i\n }\n return result\n}\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])]),a("p",[t._v("执行结果:")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(502),alt:"PNG"}})])}),[],!1,null,null,null);s.default=e.exports},498:function(t,s,n){t.exports=n.p+"assets/img/1.be7ce0b0.jpg"},499:function(t,s,n){t.exports=n.p+"assets/img/2.6c7de304.jpeg"},500:function(t,s,n){t.exports=n.p+"assets/img/3.5e716077.jpg"},501:function(t,s,n){t.exports=n.p+"assets/img/4.3a449284.jpg"},502:function(t,s,n){t.exports=n.p+"assets/img/5.e45f10c1.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/47.5add939a.js b/learning/.vuepress/dist/assets/js/47.5add939a.js deleted file mode 100644 index 1e4fc869..00000000 --- a/learning/.vuepress/dist/assets/js/47.5add939a.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{1055:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("“时代中的一粒灰,落在个人那里,可能就是一座山。而我们偏偏处在一个尘土飞扬的时代之中。” 为表达全国各族人民对抗击新冠肺炎疫情斗争牺牲烈士和逝世同胞的深切哀悼,国务院于4月3日发布公告,决定 2020年4月4日 举行全国性哀悼活动。而我,在这里也致谢那些扛起大山的人!")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("今天给大家讲解一道经典鹅厂面试题,有一定难度。大家认真看哦。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("建议先回顾一下前面关于该题简化版,二数之和。")]),s._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.0.数组系列/1.0.数组系列/007.html"}},[s._v("两数之和(1)")])],1),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("该题为 二数之和 的进阶版本,当然还有一个进阶版本为 四数之和。我们将会一一进行分析!")])]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第15题:三数之和")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("给定数组 nums = [-1, 0, 1, 2, -1, -4],\n满足要求的三元组集合为:\n[\n [-1, 0, 1],\n [-1, -1, 2]\n]\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br")])]),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("blockquote",[n("p",[s._v("本题的暴力题解可以仿照二数之和,直接三层遍历,取和为0的三元组,并记录下来,最后再去重。但是作为一个有智慧的人,我们不能这么去做。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("因为我们的目标是找数,当然使用指针的方式最简单。假若我们的数组为:")]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("[-1, 0, 1, 2, -1, -4]\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[s._v("求解过程如下:首先我们先把数组排个序(原因一会儿说),排完序长这样:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(486),alt:"PNG"}}),s._v(" "),n("p",[s._v("因为我们要同时找三个数,所以"),n("strong",[s._v("采取固定一个数,同时用双指针来查找另外两个数的方式")]),s._v("。所以初始化时,我们选择固定第一个元素(当然,这一轮走完了,这个蓝框框我们就要也往前移动),同时将下一个元素和末尾元素分别设上 left 和 right 指针。画出图来就是下面这个样子:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(487),alt:"PNG"}}),s._v(" "),n("p",[s._v("现在已经找到了三个数,当然是计算其三值是否满足三元组。但是这里因为我们已经排好了序,如果"),n("strong",[s._v("固定下来的数(上面蓝色框框)本身就大于 0,那三数之和必然无法等于 0")]),s._v("。比如下面这种:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(488),alt:"PNG"}}),s._v(" "),n("p",[s._v("然后自然用脚指头也能想到,我们需要移动指针。现在我们的排序就发挥出用处了,"),n("strong",[s._v("如果和大于0,那就说明 right 的值太大,需要左移。如果和小于0,那就说明 left 的值太小")]),s._v(",需要右移。(上面这个思考过程是本题的核心) 整个过程如下图所示:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(489),alt:"PNG"}}),s._v(" "),n("p",[s._v("其中:在第6行时,因为三数之和大于0,所以right进行了左移。最后一行,跳过了重复的-1。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("然后啰嗦一句,因为我们需要处理重复值的情况。除了固定下来的i值(蓝框框),left 和 right 当然也是需要处理重复的情况,所以对于 left 和 left+1,以及 right 和 right-1,我们都单独做一下重复值的处理。(其实没啥处理,就是简单的跳过)")]),s._v(" "),n("h2",{attrs:{id:"_03、代码展示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、代码展示"}},[s._v("#")]),s._v(" 03、代码展示")]),s._v(" "),n("blockquote",[n("p",[s._v("四数之和其实与本题解法差不太多,把固定一个数变成两个,同样还是使用双指针进行求解就可以了。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("根据上面的分析,顺利得出代码(给一个Java版本的):")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("threeSum")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" target "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" l "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" r "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("break")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("l "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("asList")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("l "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" r "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("l "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" l"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("l "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" r "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("r "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" r"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n l"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n r"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n l"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v("\n r"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(490),alt:"PNG"}}),s._v(" "),n("p",[s._v("给一个python版本的(这个我就直接拿别人的代码了,思想都一样)")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("//")]),s._v("python\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("threeSum")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" List"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" List"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("List"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n \n n"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n res"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("not")]),s._v(" nums "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("or")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n res"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("and")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("continue")]),s._v("\n L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n R"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("R"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("R"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("append"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("R"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("R "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("and")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("R "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("and")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("R"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("R"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n R"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("R"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n R"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("R"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("elif")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("R"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n R"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("R"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("L"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);t.default=r.exports},486:function(s,t,a){s.exports=a.p+"assets/img/1.0507c071.jpg"},487:function(s,t,a){s.exports=a.p+"assets/img/2.5e72397e.jpg"},488:function(s,t,a){s.exports=a.p+"assets/img/3.bb5bf3f0.jpg"},489:function(s,t,a){s.exports=a.p+"assets/img/4.78f043f5.jpg"},490:function(s,t,a){s.exports=a.p+"assets/img/5.1df63ac6.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/48.5773e413.js b/learning/.vuepress/dist/assets/js/48.5773e413.js deleted file mode 100644 index 5be622f1..00000000 --- a/learning/.vuepress/dist/assets/js/48.5773e413.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{1067:function(s,t,n){"use strict";n.r(t);var a=n(3),r=Object(a.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("blockquote",[a("p",[s._v("在前两篇中,我们分别学习了 “"),a("strong",[s._v("三角形最小路径和")]),s._v("” 以及“"),a("strong",[s._v("矩形最小路径和")]),s._v("” 的问题,相信已经掌握了这类题型的解题方式。我们只要"),a("strong",[s._v("明确状态的定义")]),s._v(",基本上都可以顺利求解。")]),s._v(" "),a("p",[s._v("在本节中,我们将回归一道简单点的题目,目的是剖析一下"),a("strong",[s._v("状态定义的过程")]),s._v(",并且举例说明如果状态定义错误,会对我们带来多大困扰!希望大家不要轻视!")])]),s._v(" "),a("h2",{attrs:{id:"_01、题目分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("第198题:打家劫舍")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。")])])])]),s._v(" "),a("p",[s._v("给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。")]),s._v(" "),a("p",[a("strong",[s._v("示例 1:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("输入: [1,2,3,1]\n输出: 4\n解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。\n\t 偷窃到的最高金额 = 1 + 3 = 4 。\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("p",[a("strong",[s._v("示例 2:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("输入: [2,7,9,3,1]\n输出: 12\n解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。\n 偷窃到的最高金额 = 2 + 9 + 1 = 12 。\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("br"),s._v(" "),a("blockquote",[a("p",[a("strong",[s._v("本题主要剖析状态定义的过程!强烈建议先进行前面5节内容的学习!")])]),s._v(" "),a("p",[a("strong",[s._v("以达到最好的学习效果!")])])]),s._v(" "),a("h2",{attrs:{id:"_02、题目图解"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[s._v("#")]),s._v(" 02、题目图解")]),s._v(" "),a("p",[s._v("假设有i间房子,我们可能会定义出两种状态:")]),s._v(" "),a("ul",[a("li",[s._v("dp[i] : 偷盗 含 第 i个房子时,所获取的最大利益")]),s._v(" "),a("li",[s._v("dp[i] : 偷盗 至 第 i个房子时,所获取的最大利益")])]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("如果我们定义为状态一,因为我们没办法知道"),a("strong",[s._v("获取最高金额时")]),s._v(",小偷到底偷盗了哪些房屋。所以我们需要找到"),a("strong",[s._v("所有状态中的最大值")]),s._v(",才能找到我们的最终答案。即:")]),s._v(" "),a("blockquote",[a("center",[a("b",[s._v(" max(dp[0],dp[1],.....,dp[len(dp)-1]) ")])])],1),s._v(" "),a("p",[s._v("如果我们定义为状态二,因为小偷一定会"),a("strong",[s._v("从前偷到最后")]),s._v("(强调:偷盗至第i个房间,不代表小偷要从第i个房间中获取财物)。所以我们的最终答案很容易确定。即:")]),s._v(" "),a("center",[a("b",[s._v(" dp[i] ")])]),s._v(" "),a("p",[s._v("现在我们分析这两种状态定义下的状态转移方程:")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("如果是状态一,偷盗含第 i 个房间时能获取的最高金额,我们相当于要"),a("strong",[s._v("找到偷盗每一间房子时可以获取到的最大金额")]),s._v("。比如下图,我们要找到 dp[4] ,也就是偷盗 9 这间房子时,能获取到的最大金额。")]),s._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(537),alt:"PNG"}}),s._v(" "),a("p",[s._v("那我们就需要找到与9不相邻的前后两段中能获取到的最大金额。")]),s._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(538),alt:"PNG"}}),s._v(" "),a("p",[s._v("我们发现题目进入恶性循环,因为我们若要找到与9不相邻的两端中能偷盗的最大金额,根据 dp[i] 的定义,我们就又需要分析在这两段中盗取每一间房子时所能获取的最大利益!想想都很可怕!所以我们放弃掉这种状态的定义。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("如果是状态二,偷盗至第 i 个房子时,所能获取的最大利益。那我们可以想到,"),a("strong",[s._v("由于不可以在相邻的房屋闯入,所以 至i房屋可盗窃的最大值,要么就是至 i-1 房屋可盗窃的最大值,要么就是至 i-2 房屋可盗窃的最大值加上当前房屋的值,二者之间取最大值,即:")])]),s._v(" "),a("center",[a("b",[s._v(" dp[i] = max(dp[i-2]+nums[i], dp[i-1])")])]),s._v(" "),a("p",[s._v("如果不能理解可以看下图:")]),s._v(" "),a("p",[s._v("(相当于小贼背了个背包,里边装了之前偷来的财物,每到达下一个房间门口,来选择是偷还是不偷。)")]),s._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(539),alt:"PNG"}}),s._v(" "),a("h2",{attrs:{id:"_03、go语言示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[s._v("#")]),s._v(" 03、GO语言示例")]),s._v(" "),a("p",[s._v("分析完毕,我们根据第二种状态定义进行求解:")]),s._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("rob")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n dp "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("b "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" a "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" b "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" a\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" b\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br")])]),a("p",[s._v("运行结果:")]),s._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(540),alt:"PNG"}}),s._v(" "),a("p",[s._v("同样,运行上面的代码,我们发现使用的内存过大。有没有什么办法可以压缩内存呢?我们很容易想到,在小贼偷盗的过程中,不可能转回头去到自己已经偷过的房间!(太蠢)小偷只需要每次将财物搬到下一个房间就行!")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("根据上面思路,优化后的代码如下:")]),s._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("rob")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("b "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" a "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" b "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" a\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" b\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("p",[s._v("运行结果:")]),s._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(541),alt:"PNG"}})],1)}),[],!1,null,null,null);t.default=r.exports},537:function(s,t,n){s.exports=n.p+"assets/img/1.a3360867.jpg"},538:function(s,t,n){s.exports=n.p+"assets/img/2.eeed6c30.jpg"},539:function(s,t,n){s.exports=n.p+"assets/img/3.369c22de.png"},540:function(s,t,n){s.exports=n.p+"assets/img/4.dbb7a6ee.jpg"},541:function(s,t,n){s.exports=n.p+"assets/img/5.8c39bbb1.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/49.ce9a72db.js b/learning/.vuepress/dist/assets/js/49.ce9a72db.js deleted file mode 100644 index 41b19c9d..00000000 --- a/learning/.vuepress/dist/assets/js/49.ce9a72db.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{1069:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("前几天的内容大家可能会觉得比较散。这是因为我目前正在筹划"),n("strong",[s._v("背包系列")]),s._v("和"),n("strong",[s._v("贪心系列")]),s._v("两个主题的内容,所以时间比较紧张,就拿出了之前写的一些题解凑凑数。不过呢,今天我将为大家开启一个新的篇章 - "),n("strong",[s._v("字符串匹配系列篇")]),s._v(",文章写得很用心,相信大家定有所获。")])]),s._v(" "),n("h2",{attrs:{id:"_01、实现-strstr"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、实现-strstr"}},[s._v("#")]),s._v(" 01、实现 strStr()")]),s._v(" "),n("blockquote",[n("p",[s._v("字符串匹配类型的题目,是字符串类型中占比很大的一个支类。")])]),s._v(" "),n("br"),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("题目:实现 strStr()")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: haystack = "hello", needle = "ll"\n输出: 2\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: haystack = "aaaaa", needle = "bba"\n输出: -1\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("说明:")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。")]),s._v(" "),n("h2",{attrs:{id:"_02、sunday-匹配"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、sunday-匹配"}},[s._v("#")]),s._v(" 02、Sunday 匹配")]),s._v(" "),n("blockquote",[n("p",[s._v("Sunday 算法是 Daniel M.Sunday 于1990年提出的字符串模式匹配。其核心思想是:在匹配过程中,模式串发现不匹配时,算法"),n("strong",[s._v("能跳过尽可能多的字符")]),s._v("以进行下一步的匹配,从而提高了匹配效率。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("因为该问是字符串匹配篇第一讲,所以先普及几个概念:")]),s._v(" "),n("ul",[n("li",[s._v("串:串是字符串的简称")]),s._v(" "),n("li",[s._v("空串:长度为零的串称为空串")]),s._v(" "),n("li",[s._v("主串:包含子串的串相应地称为主串")]),s._v(" "),n("li",[s._v("子串:串中任意个连续字符组成的子序列称为该串的子串")]),s._v(" "),n("li",[s._v("模式串:子串的定位运算又称为串的模式匹配,是一种求子串第一个字符在主串中序号的运算。被匹配的主串称为目标串,子串称为模式串。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("了解这些基本概念,回到这个算法。Sunday匹配不是说这人在周末发现了这个算法,而是这人名字叫星期天(可能父母总加班,所以起了这么个名)。听起来牛叉的不得了,其实是个啥意思:")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("假若我们的目标串为:Here is a little Hao")]),s._v(" "),n("p",[s._v("模式串为:little")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("一般来讲,字符串匹配算法第一步,"),n("strong",[s._v("都是把目标串和模式串对齐")]),s._v("。不管是KMP,BM,SUNDAY都是这样。")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(545),alt:"PNG"}}),s._v(" "),n("p",[s._v("而对于SUNDAY算法,我们"),n("strong",[s._v("从头部开始比较,一旦发现不匹配,直接找到主串中位于模式串后面的第一个字符")]),s._v(",即下面绿色的 “s”。(这里说明一下,为什么是找模式串后面的第一个字符。在把模式串和目标串对齐后,如果发现不匹配,那肯定需要移动模式串。问题是需要移动多少步。各字符串匹配算法之间的差别也来自于这个地方,对于KMP,是建立部分匹配表来计算。BM,是反向比较计算移动量。对于SUNDAY,就是找到模式串后的第一个字符。因为,无论模式串移动多少步,模式串后的第一个字符都要参与下一次比较,也就是这里的 “s”)")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(546),alt:"PNG"}}),s._v(" "),n("p",[s._v("找到了模式串后的第一个字符 “s”,接下来该怎么做?我们需要"),n("strong",[s._v("查看模式串中是否包含这个元素,如果不包含那就可以跳过一大片,从该字符的下一个字符开始比较。")])]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(547),alt:"PNG"}}),s._v(" "),n("p",[s._v("因为仍然不匹配(空格和l),我们继续重复上面的过程。找到模式串的下一个元素:t")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(548),alt:"PNG"}}),s._v(" "),n("p",[s._v("现在有意思了,我们发现 t 被包含于模式串中,并且 t 出现在模式串倒数第3个。所以我们把模式串向前移动3个单位:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(549),alt:"PNG"}}),s._v(" "),n("p",[s._v("有内味了,我们发现竟然匹配成功了,是不是很神奇?证明的过程今天暂且不谈(后面我会出一个算法证明篇,来证明之前讲过的一些算法。"),n("strong",[s._v("我需要你做的是,掌握上面这些!")]),s._v(")")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("捞干货,这个过程里我们做了一些什么:")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[s._v("对齐目标串和模式串,从前向后匹配")]),s._v(" "),n("li",[n("strong",[s._v("关注主串中位于模式串后面的第一个元素(核心)")])]),s._v(" "),n("li",[s._v("如果关注的字符没有在子串中出现则直接跳过")]),s._v(" "),n("li",[s._v("否则开始移动模式串,移动位数 = 子串长度 - 该字符最右出现的位置(以0开始)")])]),s._v(" "),n("h2",{attrs:{id:"_03、算法应用"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、算法应用"}},[s._v("#")]),s._v(" 03、算法应用")]),s._v(" "),n("blockquote",[n("p",[s._v("自然是把这个算法应用到我们的题目中咯...")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("根据分析,得出代码:(给一个保证你能看的懂的JAVA版本的)")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("strStr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" origin"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" aim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("origin "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" aim "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("origin"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" aim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//目标串匹配索")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" originIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//模式串匹配索引")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" aimIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 成功匹配完终止条件:所有aim均成功匹配")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("aimIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" aim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 针对origin匹配完,但aim未匹配完情况处理 如 mississippi sippia")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("originIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" origin"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("origin"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("originIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" aim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("aimIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 匹配则index均加1")]),s._v("\n originIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n aimIndex"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//在我们上面的样例中,第一次计算值为6,第二次值为13")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" nextCharIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" originIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" aimIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" aim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//判断下一个目标字符(上面图里的那个绿框框)是否存在。")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nextCharIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" origin"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 判断目标字符在模式串中匹配到,返回最后一个匹配的index")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" step "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" aim"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("lastIndexOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("origin"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nextCharIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("step "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 不存在的话,设置到目标字符的下一个元素")]),s._v("\n originIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" nextCharIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 存在的话,移动对应的数字(参考上文中的存在公式)")]),s._v("\n originIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" nextCharIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" step"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//模式串总是从第一个开始匹配")]),s._v("\n aimIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" originIndex "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" aimIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br"),n("span",{staticClass:"line-number"},[s._v("45")]),n("br"),n("span",{staticClass:"line-number"},[s._v("46")]),n("br"),n("span",{staticClass:"line-number"},[s._v("47")]),n("br")])]),n("h2",{attrs:{id:"_04、啰嗦吧唧"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、啰嗦吧唧"}},[s._v("#")]),s._v(" 04、啰嗦吧唧")]),s._v(" "),n("blockquote",[n("p",[s._v("**调研一下,这种通过题目来讲解知识的方式,大家是否喜欢?**如果喜欢,请留言区扣1。如果不喜欢,请说明理由~")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("发现网上上来就讲解字符串匹配算法的文章实在是太多了,也不缺我这一个。所以我尝试了这种通过“"),n("strong",[s._v("图解+题目+知识串讲")]),s._v("”的形式,文中我也尽可能的减少公式化的东西,让大家能看的进去。"),n("strong",[s._v("希望大家可以给我反馈")]),s._v(",如果大家觉得这种形式ok,那么我后面会更高频的去使用这种形式。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);t.default=e.exports},545:function(s,t,a){s.exports=a.p+"assets/img/1.f441ca2d.jpg"},546:function(s,t,a){s.exports=a.p+"assets/img/2.fc3a2c47.jpg"},547:function(s,t,a){s.exports=a.p+"assets/img/3.af2b4e20.jpg"},548:function(s,t,a){s.exports=a.p+"assets/img/4.73e083c6.jpg"},549:function(s,t,a){s.exports=a.p+"assets/img/5.607471fb.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/5.ac596411.js b/learning/.vuepress/dist/assets/js/5.ac596411.js deleted file mode 100644 index 0d074947..00000000 --- a/learning/.vuepress/dist/assets/js/5.ac596411.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{1039:function(t,e,a){"use strict";a.r(e);a(50);var n=a(380),r=a(376),s=a(381),o=a(372),c=a(363),i=a(46),u=a(361),f={mixins:[o.a,u.a],components:{Common:n.a,NoteAbstract:r.a,TagList:s.a,ModuleTransition:c.a},data:function(){return{currentPage:1,currentTag:"全部"}},computed:{posts:function(){var t=this.$currentTags.pages;return t=Object(i.a)(t),Object(i.c)(t),t}},mounted:function(){this._setPage(this._getStoragePage())},methods:{getCurrentTag:function(t){this.$emit("currentTag",t)},tagClick:function(t){this.$router.push({path:t.path})},getCurrentPage:function(t){this._setPage(t),setTimeout((function(){window.scrollTo(0,0)}),100)},_setPage:function(t){this.currentPage=t,this.$page.currentPage=t,this._setStoragePage(t)}},watch:{$route:function(){this._setPage(this._getStoragePage())}}},g=(a(365),a(399),a(454),a(3)),l=Object(g.a)(f,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("Common",{staticClass:"tag-wrapper",attrs:{sidebar:!1}},[a("ModuleTransition",[a("TagList",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"tags",attrs:{currentTag:t.$currentTags.key},on:{getCurrentTag:t.tagClick}})],1),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.08"}},[a("note-abstract",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"list",attrs:{data:t.posts,currentPage:t.currentPage},on:{currentTag:t.$currentTags.key}})],1),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.16"}},[a("pagation",{staticClass:"pagation",attrs:{total:t.posts.length,currentPage:t.currentPage},on:{getCurrentPage:t.getCurrentPage}})],1)],1)}),[],!1,null,"7984cb6f",null);e.default=l.exports},356:function(t,e,a){},357:function(t,e,a){},358:function(t,e,a){},359:function(t,e,a){},360:function(t,e,a){},362:function(t,e,a){"use strict";function n(){var t=["#e15b64","#f47e60","#f8b26a","#abbd81","#849b87","#e15b64","#f47e60","#f8b26a","#f26d6d","#67cc86","#fb9b5f","#3498db"];return t[Math.floor(Math.random()*t.length)]}a.d(e,"a",(function(){return n}))},364:function(t,e,a){"use strict";a(366),a(25),a(368),a(26),a(30);var n=a(49),r={props:{pageInfo:{type:Object,default:function(){return{}}},currentTag:{type:String,default:""},showAccessNumber:{type:Boolean,default:!1}},data:function(){return{numStyle:{fontSize:".9rem",fontWeight:"normal",color:"#999"}}},filters:{formatDateValue:function(t){if(!t)return"";t=t.replace("T"," ").slice(0,t.lastIndexOf("."));var e=Number(t.substr(11,2)),a=Number(t.substr(14,2)),r=Number(t.substr(17,2));return e>0||a>0||r>0?Object(n.d)(t):Object(n.d)(t,"yyyy-MM-dd")}},methods:{goTags:function(t){this.$router.push({path:"/tags/".concat(t,"/")})}}},s=(a(369),a(3)),o=Object(s.a)(r,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[t.pageInfo.frontmatter.author||t.$themeConfig.author||t.$site.title?a("i",{staticClass:"iconfont reco-account"},[a("span",[t._v(t._s(t.pageInfo.frontmatter.author||t.$themeConfig.author||t.$site.title))])]):t._e(),t._v(" "),t.pageInfo.frontmatter.date?a("i",{staticClass:"iconfont reco-date"},[a("span",[t._v(t._s(t._f("formatDateValue")(t.pageInfo.frontmatter.date)))])]):t._e(),t._v(" "),!0===t.showAccessNumber?a("i",{staticClass:"iconfont reco-eye"},[a("AccessNumber",{attrs:{idVal:t.pageInfo.path,numStyle:t.numStyle}})],1):t._e(),t._v(" "),t.pageInfo.frontmatter.tags?a("i",{staticClass:"iconfont reco-tag tags"},t._l(t.pageInfo.frontmatter.tags,(function(e,n){return a("span",{key:n,staticClass:"tag-item",class:{active:t.currentTag==e},on:{click:function(a){return t.goTags(e)}}},[t._v("\n "+t._s(e)+"\n ")])})),0):t._e()])}),[],!1,null,"484a899e",null);e.a=o.exports},365:function(t,e,a){"use strict";var n=a(356);a.n(n).a},366:function(t,e,a){var n=a(0),r=a(367);n({target:"Array",proto:!0,forced:r!==[].lastIndexOf},{lastIndexOf:r})},367:function(t,e,a){"use strict";var n=a(16),r=a(31),s=a(11),o=a(27),c=a(20),i=Math.min,u=[].lastIndexOf,f=!!u&&1/[1].lastIndexOf(1,-0)<0,g=o("lastIndexOf"),l=c("indexOf",{ACCESSORS:!0,1:0}),p=f||!g||!l;t.exports=p?function(t){if(f)return u.apply(this,arguments)||0;var e=n(this),a=s(e.length),o=a-1;for(arguments.length>1&&(o=i(o,r(arguments[1]))),o<0&&(o=a+o);o>=0;o--)if(o in e&&e[o]===t)return o||0;return-1}:u},368:function(t,e,a){"use strict";var n=a(7),r=a(4),s=a(107),o=a(21),c=a(5),i=a(34),u=a(177),f=a(35),g=a(1),l=a(52),p=a(51).f,h=a(33).f,m=a(8).f,d=a(378).trim,v=r.Number,_=v.prototype,b="Number"==i(l(_)),I=function(t){var e,a,n,r,s,o,c,i,u=f(t,!1);if("string"==typeof u&&u.length>2)if(43===(e=(u=d(u)).charCodeAt(0))||45===e){if(88===(a=u.charCodeAt(2))||120===a)return NaN}else if(48===e){switch(u.charCodeAt(1)){case 66:case 98:n=2,r=49;break;case 79:case 111:n=8,r=55;break;default:return+u}for(o=(s=u.slice(2)).length,c=0;cr)return NaN;return parseInt(s,n)}return+u};if(s("Number",!v(" 0o1")||!v("0b1")||v("+0x1"))){for(var C,T=function(t){var e=arguments.length<1?0:t,a=this;return a instanceof T&&(b?g((function(){_.valueOf.call(a)})):"Number"!=i(a))?u(new v(I(e)),a,T):I(e)},N=n?p(v):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),P=0;N.length>P;P++)c(v,C=N[P])&&!c(T,C)&&m(T,C,h(v,C));T.prototype=_,_.constructor=T,o(r,"Number",T)}},369:function(t,e,a){"use strict";var n=a(357);a.n(n).a},370:function(t,e,a){"use strict";var n=a(358);a.n(n).a},371:function(t,e,a){"use strict";var n=a(359);a.n(n).a},372:function(t,e,a){"use strict";a(377);e.a={methods:{_getStoragePage:function(){var t=window.location.pathname,e=JSON.parse(sessionStorage.getItem("currentPage"));return null===e||t!==e.path?(sessionStorage.setItem("currentPage",{page:1,path:""}),1):parseInt(e.page)},_setStoragePage:function(t){var e=window.location.pathname;sessionStorage.setItem("currentPage",JSON.stringify({page:t,path:e}))}}}},373:function(t,e,a){},376:function(t,e,a){"use strict";a(25);var n={components:{PageInfo:a(364).a},props:["item","currentPage","currentTag"]},r=(a(370),a(3)),s={components:{NoteAbstractItem:Object(r.a)(n,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"abstract-item"},[t.item.frontmatter.sticky?a("i",{staticClass:"iconfont reco-sticky"}):t._e(),t._v(" "),a("div",{staticClass:"title"},[t.item.frontmatter.keys?a("i",{staticClass:"iconfont reco-lock"}):t._e(),t._v(" "),a("router-link",{attrs:{to:t.item.path}},[t._v(t._s(t.item.title))])],1),t._v(" "),a("div",{staticClass:"abstract",domProps:{innerHTML:t._s(t.item.excerpt)}}),t._v(" "),a("hr",{staticClass:"hr"}),t._v(" "),a("PageInfo",{attrs:{pageInfo:t.item,currentTag:t.currentTag}})],1)}),[],!1,null,"28f76ce9",null).exports},props:["data","currentPage","currentTag"],computed:{currentPageData:function(){var t=10*this.currentPage-10,e=10*this.currentPage;return this.data.slice(t,e)}}},o=(a(371),Object(r.a)(s,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"abstract-wrapper"},t._l(t.currentPageData,(function(e){return a("NoteAbstractItem",{key:e.path,attrs:{item:e,currentPage:t.currentPage,currentTag:t.currentTag}})})),1)}),[],!1,null,"b014bc36",null));e.a=o.exports},379:function(t,e,a){"use strict";var n=a(360);a.n(n).a},381:function(t,e,a){"use strict";a(106);var n=a(22),r=a(362),s={props:{currentTag:{type:String,default:""}},computed:{tags:function(){return[{name:"全部",path:"/tag/"}].concat(Object(n.a)(this.$tags.list))}},methods:{tagClick:function(t){this.$emit("getCurrentTag",t)},getOneColor:r.a}},o=(a(379),a(3)),c=Object(o.a)(s,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"tags"},t._l(t.tags,(function(e,n){return a("span",{key:n,class:{active:e.name==t.currentTag},style:{backgroundColor:t.getOneColor()},on:{click:function(a){return t.tagClick(e)}}},[t._v(t._s(e.name))])})),0)}),[],!1,null,"36b9f66a",null);e.a=c.exports},399:function(t,e,a){"use strict";var n=a(373);a.n(n).a},408:function(t,e,a){},454:function(t,e,a){"use strict";var n=a(408);a.n(n).a}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/50.715a12c5.js b/learning/.vuepress/dist/assets/js/50.715a12c5.js deleted file mode 100644 index 240cc9b8..00000000 --- a/learning/.vuepress/dist/assets/js/50.715a12c5.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{1072:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("在计算机科学中,二叉树是"),n("strong",[s._v("每个结点最多有两个子树")]),s._v("的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于"),n("strong",[s._v("实现二叉查找树")]),s._v("和"),n("strong",[s._v("二叉堆")]),s._v("。树比链表稍微复杂,因为链表是线性数据结构,而树不是。树的问题很多都可以由"),n("strong",[s._v("广度优先搜索")]),s._v("或"),n("strong",[s._v("深度优先搜索解决")]),s._v("。")]),s._v(" "),n("p",[s._v("在本系列中,我们将通过一些例题,学习关于二叉树的经典操作!")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第104题:二叉树的最大深度")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数")])])])]),s._v(" "),n("p",[s._v("说明: 叶子节点是指没有子节点的节点。")]),s._v(" "),n("p",[n("strong",[s._v("示例:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("给定二叉树 [3,9,20,null,null,15,7],\n 3 \n / \\ \n 9 20 \n / \\ \n 15 7\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br")])]),n("br"),s._v(" "),n("center",[n("b",[s._v(" 本系列内容均为必须掌握! ")])]),s._v(" "),n("h2",{attrs:{id:"_02、递归求解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、递归求解"}},[s._v("#")]),s._v(" 02、递归求解")]),s._v(" "),n("p",[s._v("我们知道,**每个节点的深度与它左右子树的深度有关,且等于其左右子树最大深度值加上 1 **。即:")]),s._v(" "),n("blockquote",[n("center",[n("b",[s._v(" maxDepth(root) = max(maxDepth(root.left), ")])]),s._v(" "),n("center",[n("b",[s._v(" maxDepth(root.right)) + 1")])])],1),s._v(" "),n("p",[s._v("以 [3,4,20,null,null,15,7] 为例:")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("<1>我们要对根节点的最大深度求解,就要对其左右子树的深度进行求解")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(554),alt:"img"}}),s._v(" "),n("p",[s._v("<2>我们看出。以4为根节点的子树没有左右节点,其深度为 1 。而以 20 为根节点的子树的深度,同样取决于它的左右子树深度。")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(555),alt:"img"}}),s._v(" "),n("p",[s._v("<3>对于15和7的子树,我们可以一眼看出其深度为 1 。")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(556),alt:"img"}}),s._v(" "),n("p",[s._v("<4>由此我们可以得到根节点的最大深度为:")]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("maxDepth(root-3)\n=max(**maxDepth**(sub-4),**maxDepth**(sub-20))+1\n=max(1,max(**maxDepth**(sub-15),**maxDepth**(sub-7))+1)+1\n=max(1,max(1,1)+1)+1\n=max(1,2)+1\n=3\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br")])]),n("br"),s._v(" "),n("p",[s._v("根据分析,我们通过"),n("strong",[s._v("递归")]),s._v("进行求解代码如下:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxDepth")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("TreeNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxDepth")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxDepth")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("a "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" b "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" a\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" b\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("br"),s._v(" "),n("h2",{attrs:{id:"_03、dfs"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、dfs"}},[s._v("#")]),s._v(" 03、DFS")]),s._v(" "),n("p",[s._v("其实我们上面用的递归方式,本质上是使用了DFS的思想。先介绍一下DFS:深度优先搜索算法(Depth First Search),对于二叉树而言,它沿着"),n("strong",[s._v("树的深度遍历树的节点,尽可能深的搜索树的分支")]),s._v(","),n("strong",[s._v("这一过程一直进行到已发现从源节点可达的所有节点为止")]),s._v("。")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(557),alt:"img"}}),s._v(" "),n("p",[s._v("如上图二叉树,它的访问顺序为:")]),s._v(" "),n("blockquote",[n("center",[n("b",[s._v(" A-B-D-E-C-F-G ")])])],1),s._v(" "),n("p",[s._v("A-B-D-E-C-F-G")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("到这里,我们思考一个问题?虽然我们用递归的方式根据DFS的思想顺利完成了题目。但是这种方式的缺点却显而易见。因为"),n("strong",[s._v("在递归中,如果层级过深,我们很可能保存过多的临时变量,导致栈溢出")]),s._v("。这也是为什么我们一般不在后台代码中使用递归的原因。如果不理解,下面我们详细说明:")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("事实上,函数调用的参数是通过栈空间来传递的,在调用过程中会"),n("strong",[s._v("占用线程的栈资源")]),s._v("。而递归调用,"),n("strong",[s._v("只有走到最后的结束点后函数才能依次退出")]),s._v(",而未到达最后的结束点之前,占用的栈空间一直没有释放,如果递归调用次数过多,就可能导致占用的栈资源超过线程的最大值,从而导致栈溢出,导致程序的异常退出。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("所以,我们引出下面的话题:如何将递归的代码转化成非递归的形式。这里请记住,"),n("strong",[s._v("99%的递归转非递归,都可以通过栈来进行实现")]),s._v("。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("非递归的DFS,代码如下:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TreeNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("traversal")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TreeNode")]),s._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TreeNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Stack")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TreeNode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" stack "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Stack")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n stack"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("stack"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("empty")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TreeNode")]),s._v(" node "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" stack"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("peek")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n stack"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("pop")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n stack"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n stack"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br")])]),n("p",[s._v("上面的代码,唯一需要强调的是,为什么需要先右后左压入数据?是因为我们需要将先访问的数据,后压入栈(请思考栈的特点)。")]),s._v(" "),n("p",[s._v("如果不理解代码,请看下图:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(558),alt:"img"}}),s._v(" "),n("p",[s._v("1:首先将a压入栈")]),s._v(" "),n("p",[s._v("2:a弹栈,将c、b压入栈(注意顺序)")]),s._v(" "),n("p",[s._v("3:b弹栈,将e、d压入栈")]),s._v(" "),n("p",[s._v("4:d、e、c弹栈,将g、f压入栈")]),s._v(" "),n("p",[s._v("5:f、g弹栈")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("至此,非递归的DFS就讲解完毕了。那我们如何通过非递归DFS的方式,来进行本题求解呢?相信已经很简单了,留下课后作业,请自行实践!")])],1)}),[],!1,null,null,null);t.default=e.exports},554:function(s,t,a){s.exports=a.p+"assets/img/1.5b25afb3.jpg"},555:function(s,t,a){s.exports=a.p+"assets/img/2.cb4efa34.jpg"},556:function(s,t,a){s.exports=a.p+"assets/img/3.fbeca3fc.jpg"},557:function(s,t,a){s.exports=a.p+"assets/img/4.4bdfb1c2.jpg"},558:function(s,t,a){s.exports=a.p+"assets/img/5.5a7a80a4.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/51.d2c164a4.js b/learning/.vuepress/dist/assets/js/51.d2c164a4.js deleted file mode 100644 index 63eceac8..00000000 --- a/learning/.vuepress/dist/assets/js/51.d2c164a4.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{1087:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("p",[t._v("date: 2020-06-12")]),t._v(" "),n("blockquote",[n("p",[t._v("有读者小伙伴建议讲一下"),n("strong",[t._v("滑动窗口")]),t._v("相关题型,因为经常面试会被问到。所以就开了这个系列(所以如果大家有想让分享的题型都可以留言区告诉我,任何事情我觉得都需要有反馈。比如一个错误,你不反馈,我不知道..那就只能这样过去了..)闲话不啰嗦,直接看题!")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第239题:滑动窗口最大值")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。")])])])]),t._v(" "),n("p",[t._v("给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("返回滑动窗口中的最大值"),n("strong",[t._v("所构成的数组")]),t._v("。")]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3\n输出: [3,3,5,5,6,7] \n解释: \n\n 滑动窗口的位置 最大值\n--------------- -----\n[1 3 -1] -3 5 3 6 7 3\n 1 [3 -1 -3] 5 3 6 7 3\n 1 3 [-1 -3 5] 3 6 7 5\n 1 3 -1 [-3 5 3] 6 7 5\n 1 3 -1 -3 [5 3 6] 7 6\n 1 3 -1 -3 5 [3 6 7] 7\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br")])]),n("blockquote",[n("p",[n("strong",[t._v("本题有一定难度!建议认真阅读")])]),t._v(" "),n("p",[n("strong",[t._v("并课后练习~")])])]),t._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("p",[t._v("本题对于题目没有太多需要额外说明的,应该都能理解,直接进行分析。我们很容易想到,可以"),n("strong",[t._v("通过遍历所有的滑动窗口,找到每一个窗口的最大值,来进行暴力求解")]),t._v("。那一共有多少个滑动窗口呢,小学题目,可以得到共有 "),n("strong",[t._v("L-k+1")]),t._v(" 个窗口。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("假设 nums = [1,3,-1,-3,5,3,6,7],和 k = 3,窗口数为6")]),t._v(" "),n("img",{attrs:{src:a(677),alt:"img"}}),t._v(" "),n("p",[t._v("根据分析,直接完成代码:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxSlidingWindow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//遍历所有的滑动窗口")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("MIN_VALUE"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//找到每一个滑动窗口的最大值")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n win"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" win"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br")])]),n("p",[t._v("运行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(678),alt:"img"}}),t._v(" "),n("br"),t._v(" "),n("blockquote",[n("p",[t._v("It's Bullshit!结果令我们很不满意,时间复杂度达到了O(LK),如果面试问到这道题,基本上只写出这样的代码,一定就挂掉了。那我们怎么样优化时间复杂度呢?有没有可以O(L)的实现呢?=_=")])]),t._v(" "),n("h2",{attrs:{id:"_03、线性题解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、线性题解"}},[t._v("#")]),t._v(" 03、线性题解")]),t._v(" "),n("p",[t._v("这里不卖关子,其实这道题比较经典,我们可以采用队列,DP,堆等方式进行求解,所有思路的主要源头应该都是"),n("strong",[t._v("在窗口滑动的过程中,如何更快的完成查找最大值的过程")]),t._v("。但是最典型的解法还是使用"),n("strong",[t._v("双端队列")]),t._v("。具体怎么来求解,一起看一下。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("首先,我们了解一下,什么是双端队列:是一种具有"),n("strong",[t._v("队列和栈的性质的数据结构")]),t._v("。双端队列中的元素可以从两端弹出或者插入。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(679),alt:"img"}}),t._v(" "),n("p",[t._v("我们可以利用双端队列来实现一个窗口,目的是让该窗口可以做到"),n("strong",[t._v("张弛有度")]),t._v("(汉语博大精深,也就是长度动态变化。其实用游标或者其他解法的目的都是一样的,就是去维护一个可变长的窗口)")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("然后我们再做一件事,只要"),n("strong",[t._v("遍历该数组")]),t._v(",同时**在双端队列的头去维护当前窗口的最大值(在遍历过程中,发现当前元素比队列中的元素大,就将原来队列中的元素祭天),在整个遍历的过程中我们再记录下每一个窗口的最大值到结果数组中。**最终结果数组就是我们想要的,整体图解如下。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("假设 nums = [1,3,-1,-3,5,3,6,7],和 k = 3")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(680),alt:"img"}}),t._v(" "),n("blockquote",[n("p",[t._v("(小浩os:我觉得自己画的这个图对于双端队列的解法还是介绍的比较清晰的,大家好好看一下哦,这样我的努力也就没有白费呢。)")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("根据分析,得出代码:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxSlidingWindow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//用切片模拟一个双端队列")]),t._v("\n\tqueue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("queue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" queue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("queue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//将比当前元素小的元素祭天")]),t._v("\n\t\t\tqueue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" queue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("queue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//将当前元素放入queue中")]),t._v("\n\t\tqueue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("queue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" queue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//维护队列,保证其头元素为当前窗口最大值")]),t._v("\n\t\t\tqueue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" queue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//放入结果数组")]),t._v("\n\t\t\tresult "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" queue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(681),alt:"img"}}),t._v(" "),n("br"),t._v(" "),n("p",[t._v("Perfact~题目完成!看着一下子超越百分之99的用户,是不是感觉很爽呢~")])])}),[],!1,null,null,null);s.default=e.exports},677:function(t,s){t.exports="data:image/jpeg;base64,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"},678:function(t,s){t.exports="data:image/jpeg;base64,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"},679:function(t,s,a){t.exports=a.p+"assets/img/3.395c1e89.jpg"},680:function(t,s,a){t.exports=a.p+"assets/img/4.f3a9aa62.jpg"},681:function(t,s,a){t.exports=a.p+"assets/img/5.0b256752.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/52.138d6e9d.js b/learning/.vuepress/dist/assets/js/52.138d6e9d.js deleted file mode 100644 index d77b6944..00000000 --- a/learning/.vuepress/dist/assets/js/52.138d6e9d.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{1084:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("之前的两节讲解了"),n("strong",[s._v("滑动窗口类")]),s._v("问题的"),n("strong",[s._v("模式解法")]),s._v(",相信大家对该类题型已不陌生**。**今天将继续完成一道题目,来进行巩固学习。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第438. 找到字符串中所有字母异位词")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。")])])])]),s._v(" "),n("p",[s._v("字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。")]),s._v(" "),n("p",[n("strong",[s._v("说明:")])]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[s._v("字母异位词指字母相同,但排列不同的字符串。")]),s._v(" "),n("li",[s._v("不考虑答案输出的顺序。")])]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入:s: "cbaebabacd" p: "abc"\n\n输出:[0, 6]\n\n解释:\n起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。\n起始索引等于 6 的子串是 "bac", 它是 "abc" 的字母异位词。\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入:s: "abab" p: "ab\n\n输出:[0, 1, 2]\n\n解释:\n起始索引等于 0 的子串是 "ab", 它是 "ab" 的字母异位词。\n起始索引等于 1 的子串是 "ba", 它是 "ab" 的字母异位词。\n起始索引等于 2 的子串是 "ab", 它是 "ab" 的字母异位词。\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])]),n("blockquote",[n("p",[n("strong",[s._v("提示:")])]),s._v(" "),n("p",[n("strong",[s._v("建议先完成上节内容的学习!")])]),s._v(" "),n("p",[n("strong",[s._v("否则可能理解会有一定困难!")])])]),s._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[s._v("#")]),s._v(" 02、题解分析")]),s._v(" "),n("p",[s._v("直接套用之前的模式,使用双指针来模拟一个滑动窗口进行解题。分析过程如下:")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("假设我们有字符串为“cbaebabacd”,目标串为“abc”")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("我们通过双指针维护一个窗口,由于我们只需要判断字母异位词,我们可以将窗口初始化大小和目标串保持一致。(当然,你也可以初始化窗口为1,逐步扩大)")]),s._v(" "),n("img",{attrs:{src:a(663),alt:"img"}}),s._v(" "),n("p",[s._v("而"),n("strong",[s._v("判断字母异位词")]),s._v(",我们需要"),n("strong",[s._v("保证窗口中的字母出现次数与目标串中的字母出现次数一致")]),s._v("。这里因为字母只有26个,直接使用数组来替代map进行存储(和上一讲中的ASCII使用256数组存储思想一致)。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("pArr为目标串数组,sArr为窗口数组。我们发现初始化数组,本身就满足,记录下来。("),n("strong",[s._v("这里图示用map模拟数组,便于理解")]),s._v(")")]),s._v(" "),n("img",{attrs:{src:a(664),alt:"img"}}),s._v(" "),n("p",[s._v("然后我们通过移动窗口,来更新窗口数组,进而和目标数组匹配,匹配成功进行记录。每一次窗口移动,"),n("strong",[s._v("左指针前移")]),s._v(",原来"),n("strong",[s._v("左指针位置处的数值减1,表示字母移出")]),s._v(";"),n("strong",[s._v("同时右指针前移")]),s._v(","),n("strong",[s._v("右指针位置处的数值加1,表示字母移入")]),s._v("。详细过程如下:")]),s._v(" "),n("img",{attrs:{src:a(665),alt:"img"}}),s._v(" "),n("img",{attrs:{src:a(666),alt:"img"}}),s._v(" "),n("p",[s._v("最终,当右指针到达边界,意味着匹配完成。")]),s._v(" "),n("h2",{attrs:{id:"_04、代码展示"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、代码展示"}},[s._v("#")]),s._v(" 04、代码展示")]),s._v(" "),n("p",[s._v("根据分析,完成代码:(下面pSize相关的忽略,调试忘删了)")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAnagrams")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" p"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" p "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" p"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" list "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" pArr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("26")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" pSize "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" p"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" sArr "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("26")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" p"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n sArr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'a'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n pArr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("p"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'a'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" p"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" index "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" p"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'a'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("pArr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" sArr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" \n pSize"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" p"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 窗口大小固定为p的长度")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isSame")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("pArr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sArr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//sArr[s.charAt(i) - 'a']-- 左指针位置处字母减1")]),s._v("\n sArr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'a'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//sArr[s.charAt(j) - 'a']++ 右指针位置处字母加1")]),s._v("\n sArr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'a'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isSame")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v(" pArr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sArr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isSame")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" arr2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" arr1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("arr1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" arr2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br"),n("span",{staticClass:"line-number"},[s._v("45")]),n("br"),n("span",{staticClass:"line-number"},[s._v("46")]),n("br"),n("span",{staticClass:"line-number"},[s._v("47")]),n("br"),n("span",{staticClass:"line-number"},[s._v("48")]),n("br"),n("span",{staticClass:"line-number"},[s._v("49")]),n("br"),n("span",{staticClass:"line-number"},[s._v("50")]),n("br"),n("span",{staticClass:"line-number"},[s._v("51")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(667),alt:"img"}}),s._v(" "),n("p",[s._v("PS:本题属于模式解法,非最优解!这里留下思考内容,如何在本解法的基础上进行优化,近一步降低时间复杂度?")])])}),[],!1,null,null,null);t.default=r.exports},663:function(s,t,a){s.exports=a.p+"assets/img/1.1605b951.jpg"},664:function(s,t,a){s.exports=a.p+"assets/img/2.4a60b533.jpg"},665:function(s,t,a){s.exports=a.p+"assets/img/3.0dab3096.jpg"},666:function(s,t,a){s.exports=a.p+"assets/img/4.acb8c9b1.jpg"},667:function(s,t,a){s.exports=a.p+"assets/img/5.54fa5539.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/53.052e35bd.js b/learning/.vuepress/dist/assets/js/53.052e35bd.js deleted file mode 100644 index 0c59c7e8..00000000 --- a/learning/.vuepress/dist/assets/js/53.052e35bd.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{1092:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("昨天写了一篇感悟,没想到那么受欢迎。几百人转发,好几千人阅读,虚荣心得到了极大的满足。今天继续为大家分享一道经典面试题目。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("咕咕咕...一道很简单的题目~")])]),t._v(" "),n("br"),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("题目:和为s的连续正数序列")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:target = 9\n输出:[[2,3,4],[4,5]]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:target = 15\n输出:[[1,2,3,4,5],[4,5,6],[7,8]]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("blockquote",[n("p",[t._v("特别提醒:这两天有人问我,说浩哥,为什么看了你那么多题解,但是我一旦上机写,便啥都不记得了。这个我想说。。。你真牛掰。普通人应该都做不到看看题解,就能真的掌握一个题目(不信你看书学学KMP,再试试看能不能一次写出来)。题解只是给你提供一个思路,真正的提高,取决于coding的过程。大量的练习,忍受难受的过程,才能真正的进步!")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("这个题目比较简单,典型的一道"),n("strong",[t._v("滑动窗口")]),t._v("的题目。如果对滑动窗口陌生,可以先看下下面的题解:")]),t._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.5.滑动窗口系列/1.5.滑动窗口系列/501.html"}},[t._v("滑动窗口最大值(239)")])],1),t._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.5.滑动窗口系列/1.5.滑动窗口系列/502.html"}},[t._v("无重复字符的最长子串(3)")])],1),t._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.5.滑动窗口系列/1.5.滑动窗口系列/503.html"}},[t._v("找到字符串中所有字母异位词(438)")])],1),t._v(" "),n("p",[t._v("假若我们输入的 target 为 9,大脑中应该有下面这么个玩意:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(685),alt:"PNG"}}),t._v(" "),n("p",[t._v("然后我们通过左右指针来维护一个滑动窗口,同时计算窗口内的值是否是目标值:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(686),alt:"PNG"}}),t._v(" "),n("p",[t._v("如果窗口的值过小,我们就移动右边界。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(687),alt:"PNG"}}),t._v(" "),n("p",[t._v("如果窗口的值过大,我们就移动左边界。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(688),alt:"PNG"}}),t._v(" "),n("p",[t._v("剩下的就是反复上面的操作就可以了。到这里分析过程看似结束了。但是我们可以观察出一丢丢规律,用来优化我们的算法。"),n("strong",[t._v("对于任意一个正整数,总是小于它的中值与中值+1的和")]),t._v("。为了让大家直观,用下图举例:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(689),alt:"PNG"}}),t._v(" "),n("p",[t._v("比如这里的100,就一定小于50+51,换成其他数也一样。换句话说,"),n("strong",[t._v("一旦窗口左边界超过中值,窗口内的和一定会大于 target")]),t._v("。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("根据分析,得到题解:(好久没给Go语言的示例了,刻意把代码写的比较简单,没有用啥骚操作哈)")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//go ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findContinuousSequence")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("target "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" \n j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" \n win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" \n arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" target "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" j\n j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" target "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-=")]),t._v(" i\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-=")]),t._v(" i\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br")])]),n("p",[t._v("同时也给一个java版本的:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findContinuousSequence")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArrayList")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" target "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-=")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" arr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("k"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n win "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-=")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("toArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br")])]),n("h2",{attrs:{id:"_03、继续优化"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、继续优化"}},[t._v("#")]),t._v(" 03、继续优化")]),t._v(" "),n("blockquote",[n("p",[t._v("到这里你以为这个题目就结束了吗?...哈哈哈哈哈...其实真就结束了~囧!o(╯□╰)o")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("本题我使用滑动窗口进行求解,是期望给出一种通用解法。有很多基础差的同学,并不能每道题目都玩出来骚操作。但是本题除了常规的滑动窗口之外,其实还有数学法,递推法等多种解题思路。这里给出数学法的提示:"),n("strong",[t._v("等差数列求和公式")]),t._v(",希望大家下去自行思考一番,评论区留下你的想法!咱们明天见!")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);s.default=r.exports},685:function(t,s,a){t.exports=a.p+"assets/img/1.651abd82.jpg"},686:function(t,s,a){t.exports=a.p+"assets/img/2.5a2adb1f.jpg"},687:function(t,s,a){t.exports=a.p+"assets/img/3.b277e870.jpg"},688:function(t,s,a){t.exports=a.p+"assets/img/4.ae05f578.jpg"},689:function(t,s,a){t.exports=a.p+"assets/img/5.9dd4bda4.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/54.27092f93.js b/learning/.vuepress/dist/assets/js/54.27092f93.js deleted file mode 100644 index 6c5217bd..00000000 --- a/learning/.vuepress/dist/assets/js/54.27092f93.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{1096:function(q,l,u){"use strict";u.r(l);var A=u(3),S=Object(A.a)({},(function(){var q=this,l=q.$createElement,A=q._self._c||l;return A("ContentSlotsDistributor",{attrs:{"slot-key":q.$parent.slotKey}},[A("blockquote",[A("p",[q._v("这次小浩又出去面试,虽然面试官没让他修电暖气,但却给了他一块巧克力。。。(题目由读者在美团面试后提供)")])]),q._v(" "),A("h2",{attrs:{id:"_01、题目示例"}},[A("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[q._v("#")]),q._v(" 01、题目示例")]),q._v(" "),A("blockquote",[A("p",[q._v("巧克力的凹槽是干嘛用的?大量的凹槽设计增加了巧克力的接触面积,可以使巧克力快速的凝固,并且保证凝固均匀。试想一下,如果是把巧克力放入平整的没有凹槽的方形盒子中,是不是凝固后很难取下来呢。")])]),q._v(" "),A("br"),q._v(" "),A("table",[A("thead",[A("tr",[A("th",[q._v("面试题:小浩出去面试时,面试官掏出一块10×10个小块的巧克力。首先,面试官把巧克力掰成两大块,并且吃掉其中一块,把另一块交给小浩。小浩再把剩下的巧克力掰成两大块,吃掉其中一块,把另一块交回给面试官。两个人就这样无聊且枯燥的掰呀掰。。。")])])]),q._v(" "),A("tbody",[A("tr",[A("td",[q._v("规定:谁没办法往下继续掰,谁就输了。如果面试官先开始掰的话,面试官和小浩谁有必胜策略?(面试官输了,小浩将赢得面试)")])])])]),q._v(" "),A("h2",{attrs:{id:"_02、题目分析"}},[A("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[q._v("#")]),q._v(" 02、题目分析")]),q._v(" "),A("blockquote",[A("p",[q._v("原题由读者 venus 提供,小浩在其基础上改编而成。")])]),q._v(" "),A("br"),q._v(" "),A("p",[q._v("作为聪明机智的小浩(没见过这么夸自己的),最后当然是小浩获胜。获胜的方法:"),A("strong",[q._v("只要小浩一直保持巧克力是正方形就可以了")]),q._v("。刚开始,巧克力是10×10的,长这样:")]),q._v(" "),A("img",{staticStyle:{zoom:"50%"},attrs:{src:u(699),alt:"PNG"}}),q._v(" "),A("p",[q._v("不管面试官咋掰,最后都会掰成一个长宽不相等的正方形。举个栗子,假若面试官把巧克力掰成6×10的:")]),q._v(" "),A("img",{staticStyle:{zoom:"50%"},attrs:{src:u(700),alt:"PNG"}}),q._v(" "),A("p",[q._v("小浩就再把它掰成6×6的:")]),q._v(" "),A("img",{staticStyle:{zoom:"50%"},attrs:{src:u(701),alt:"PNG"}}),q._v(" "),A("p",[q._v("不管面试官咋整,小浩都将其变成正方形,直到最后一次将其变成一个1×1的巧克力,此时面试官就输掉了面试。哦不,是小浩赢得了面试。")]),q._v(" "),A("img",{staticStyle:{zoom:"50%"},attrs:{src:u(702),alt:"PNG"}}),q._v(" "),A("h2",{attrs:{id:"_03、超级改编版"}},[A("a",{staticClass:"header-anchor",attrs:{href:"#_03、超级改编版"}},[q._v("#")]),q._v(" 03、超级改编版")]),q._v(" "),A("blockquote",[A("p",[q._v("下面的问题不要陷入固定思维哈~")])]),q._v(" "),A("br"),q._v(" "),A("p",[q._v("如果巧克力换成边长为10的等边三角形,长这样:")]),q._v(" "),A("img",{staticStyle:{zoom:"50%"},attrs:{src:u(703),alt:"PNG"}}),q._v(" "),A("p",[q._v("每次只能"),A("strong",[q._v("沿着线条掰下一个小等边三角形吃掉")]),q._v(",假若还是由面试官开局,请问,谁必胜?评论区留下你的分析过程吧(另外小浩为了感谢广大读者一直以来的支持,后面每周都会送出"),A("strong",[q._v("百元红包")]),q._v(",得奖率20%,拉到最下面就可以参与了。如果可以的话,要是能帮我再点个"),A("strong",[q._v("在看")]),q._v(",我将感激涕零~)")]),q._v(" "),A("br"),q._v(" "),A("p",[q._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);l.default=S.exports},699:function(q,l){q.exports="data:image/jpeg;base64,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"},700:function(q,l){q.exports="data:image/jpeg;base64,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"},701:function(q,l){q.exports="data:image/jpeg;base64,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"},702:function(q,l,u){q.exports=u.p+"assets/img/4.7bc74c08.jpg"},703:function(q,l,u){q.exports=u.p+"assets/img/5.243e0f4d.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/55.82187afc.js b/learning/.vuepress/dist/assets/js/55.82187afc.js deleted file mode 100644 index 90cda0b1..00000000 --- a/learning/.vuepress/dist/assets/js/55.82187afc.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{1100:function(A,t,v){"use strict";v.r(t);var R=v(3),E=Object(R.a)({},(function(){var A=this,t=A.$createElement,R=A._self._c||t;return R("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[R("blockquote",[R("p",[A._v("十年前有一款很出名的游戏叫做“孢子”,不知道大家玩没玩过。玩家最初扮演一个单细胞生物,通过“大鱼吃小鱼,小鱼吃虾米,虾米吃水藻”的规则,逐步进化为宇宙文明生物。换句话说,大鱼之上总是有更大的鱼存在。当然我们这里不是讨论这个游戏,而是思考一个有趣的问题:倘若所有的鱼都是理性的,那会出现怎样的情况呢?")])]),A._v(" "),R("br"),A._v(" "),R("h2",{attrs:{id:"_01、题目分析"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[A._v("#")]),A._v(" 01、题目分析")]),A._v(" "),R("blockquote",[R("p",[A._v("总有一条更大的鱼(Always a Bigger Fish)不但是电影情节中的经典桥段,也是各种恶搞的灵感来源——小鱼总是被大鱼吃掉,而大鱼上面始终还有更大的鱼。久而久之,聪明的大鱼或许就不会去吃小鱼了,否则按照传统剧情,它身后会出现一条更大的鱼吃掉自己。让我们完整叙述一下问题:")])]),A._v(" "),R("br"),A._v(" "),R("table",[R("thead",[R("tr",[R("th",[A._v("大鱼小鱼的问题:假设有10条鱼,它们从小到大依次编号为1, 2, …, 10。我们规定,吃鱼必须要严格按顺序执行。也就是说,大鱼只能吃比自己小一级 的鱼,不能越级吃更小的鱼;并且只有等到第k条鱼吃了第 k-1 条鱼后,第 k+1条鱼 才能吃第 k 条鱼。")])])]),A._v(" "),R("tbody",[R("tr",[R("td",[A._v("同时:第1条鱼则啥都不能吃,只有被吃的份儿。我们假设,如果有小鱼 吃的话,大鱼肯定不会放过;但是,保全性命的优先级显然更高,在吃小鱼之前, 大鱼得先保证自己不会被吃掉才行。假设每条鱼都是无限聪明的(并且它们也都知 道这一点,并且它们也都知道它们知道这一点……),那么第1条鱼能存活下来吗?")])])])]),A._v(" "),R("h2",{attrs:{id:"_02、题目分析"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[A._v("#")]),A._v(" 02、题目分析")]),A._v(" "),R("blockquote",[R("p",[A._v("这个题目是相当有意思的....")])]),A._v(" "),R("br"),A._v(" "),R("p",[A._v("首先,我想聪明的大家已经猜到这是一道什么类型的题。对,"),R("strong",[A._v("博弈论")]),A._v("!因为题中出现了博弈论中的经典条件“"),R("strong",[A._v("无限聪明")]),A._v("”。现在让我们思考该题:")]),A._v(" "),R("br"),A._v(" "),R("p",[A._v("我们是有十条鱼,分析起来是比较麻烦的。所以我们从最简单的两条鱼开始分析:")]),A._v(" "),R("img",{staticStyle:{zoom:"80%"},attrs:{src:v(719),alt:"PNG"}}),A._v(" "),R("p",[A._v("两条鱼的情况下,第二条鱼就是无敌的存在,他不用担心自己被吃掉!如果是三条鱼:")]),A._v(" "),R("img",{staticStyle:{zoom:"80%"},attrs:{src:v(720),alt:"PNG"}}),A._v(" "),R("p",[A._v("3条鱼的情况下,第2条鱼不能吃第1条鱼,否则将化为只有2条鱼的情形,它将会被第3条鱼吃掉。如果是四条鱼,就有意思了:")]),A._v(" "),R("img",{staticStyle:{zoom:"80%"},attrs:{src:v(721),alt:"PNG"}}),A._v(" "),R("p",[A._v("此时第2条鱼可以大胆地吃掉第1条鱼,因为根据前面的结论,它知道第3条鱼是不敢吃它的。问题来了,五条鱼会如何:")]),A._v(" "),R("img",{staticStyle:{zoom:"80%"},attrs:{src:v(722),alt:"PNG"}}),A._v(" "),R("p",[A._v("5条鱼的情况下,第2条鱼是不敢吃第1条鱼的,因为如果它吃了第一条鱼。问题转化为4条鱼的场景,原3号鱼就可以大胆吃掉原2号鱼,因为它知道4号鱼是不敢吃它的,否则5号鱼就会吃掉4号鱼(绕不绕)")]),A._v(" "),R("br"),A._v(" "),R("p",[A._v("我们发现一个有趣的结论,只要鱼有奇数个,那么第一条鱼将总是可以活下来。如果鱼是偶数个,那么第二条鱼将总是可以吃掉第一条鱼,将状态转化到奇数条鱼的场景。")]),A._v(" "),R("br"),A._v(" "),R("p",[A._v("所以该题的答案是:不能,在十条鱼的场景下,第一条鱼必死无疑。")]),A._v(" "),R("h2",{attrs:{id:"_03、改编版本"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#_03、改编版本"}},[A._v("#")]),A._v(" 03、改编版本")]),A._v(" "),R("blockquote",[R("p",[A._v("下面这个和上面的题目如出一辙,建议大家自己思考一下。")])]),A._v(" "),R("br"),A._v(" "),R("p",[A._v("假如你在旅途中遇到一个老头,老头向你推销一个魔壶,魔壶里有一个魔鬼,可以满足你的任何愿望。但是,使用了这个魔壶会让你死后永受炼狱之苦。唯一的解法,就是你把这个魔壶再以一个更低的价格卖给别人。问题是:你会不会买下这个魔壶?以什么价格买下?(假设你足够聪明)")]),A._v(" "),R("br"),A._v(" "),R("p",[A._v("简单分析一下这个问题:因为我们并不知道用什么价格来买这个魔壶,所以自然是从最小的价格还是尝试,假设我们用最小的货币单位 1 来购买这个魔壶,那么这个魔壶将永远都不能卖给下一个人,所以 1 货币单位 肯定是不行的。那么现在我们使用 2 货币单位来购买这个魔壶,你同样找不到下一个买家。事情开始变得有趣,你开始尝试 3 货币单位 到 N 货币单位,然后你发现:根据类推,你不应该以任何价钱去购买这个瓶子,因为每个都都知道他没办法卖掉这个瓶子。")]),A._v(" "),R("br"),A._v(" "),R("p",[A._v("问题来了,为什么会推出这样一个和现实完全背道而驰的“谬论”,这是因为在推理中,我们假设每个人都做出了最优的决策,并且就这一点达成了共识。注意,这里有两个条件:")]),A._v(" "),R("br"),A._v(" "),R("ul",[R("li",[A._v("最优决策")]),A._v(" "),R("li",[A._v("共识")])]),A._v(" "),R("br"),A._v(" "),R("p",[A._v("最优决策好理解,那这个共识该如何理解呢?最优决策指的是,大家都足够聪明。而共识,指的是大家都知道大家足够聪明。那如果大家并不知道大家都是足够聪明的,这种情况就称之为“不完全信息”")]),A._v(" "),R("br"),A._v(" "),R("p",[A._v("这里值得强调的一点是,信息不对称 和 不完全信息,这两个的概念是有所不同的。划重点:不完全信息同时是经济学和博弈论中的概念,但是信息不对称大多指经济学中概念。这个大家了解一下即可(其实我个人觉得这种东东理解其本质就ok了,并不需要过于较真)下面的问题,摘自《经济学基础》题库")]),A._v(" "),R("img",{staticStyle:{zoom:"80%"},attrs:{src:v(723),alt:"PNG"}}),A._v(" "),R("p",[A._v("理论的东西就是这么枯燥,总之大家拿到这种题目知道怎么分析就ok了。")]),A._v(" "),R("br"),A._v(" "),R("p",[A._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);t.default=E.exports},719:function(A,t){A.exports="data:image/jpeg;base64,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"},720:function(A,t){A.exports="data:image/jpeg;base64,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"},721:function(A,t,v){A.exports=v.p+"assets/img/3.3ff6091a.jpg"},722:function(A,t,v){A.exports=v.p+"assets/img/4.f3de9102.jpg"},723:function(A,t,v){A.exports=v.p+"assets/img/5.18db8de2.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/56.5e6fed0a.js b/learning/.vuepress/dist/assets/js/56.5e6fed0a.js deleted file mode 100644 index c424c25f..00000000 --- a/learning/.vuepress/dist/assets/js/56.5e6fed0a.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{1098:function(s,a,t){"use strict";t.r(a);var e=t(3),r=Object(e.a)({},(function(){var s=this,a=s.$createElement,e=s._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[e("blockquote",[e("p",[s._v("今天给大家分享一道比较简单但是很经典的题目。话不多说,直接看题。")])]),s._v(" "),e("h2",{attrs:{id:"_01、题目示例"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),e("blockquote",[e("p",[s._v("这道题,大家先想一想是用什么思路进行求解?")])]),s._v(" "),e("br"),s._v(" "),e("table",[e("thead",[e("tr",[e("th",[s._v("第231题:2的幂")])])]),s._v(" "),e("tbody",[e("tr",[e("td",[s._v("给定一个整数,编写一个函数来判断它是否是 2 的幂次方。")])])])]),s._v(" "),e("p",[e("strong",[s._v("示例 1:")])]),s._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[s._v("输入: 1\n输出: true\n解释: 20 = 1\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br")])]),e("p",[e("strong",[s._v("示例 2:")])]),s._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[s._v("输入: 16\n输出: true\n解释: 24 = 16\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br")])]),e("p",[e("strong",[s._v("示例 3:")])]),s._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[s._v("输入: 218\n输出: false\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br")])]),e("br"),s._v(" "),e("p",[e("strong",[s._v("PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没什么意思了。")])]),s._v(" "),e("h2",{attrs:{id:"_02、题目分析"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),e("blockquote",[e("p",[s._v("这道题是**通过位运算来进行求解的非常典型的题目。**当然,其他的题解也有很多:比如暴力求解,又或者是不停除以2通过递归的方式求解,等等。但是并不是今天我想说的。")])]),s._v(" "),e("br"),s._v(" "),e("p",[s._v("先观察一些是2的幂的二进制数:")]),s._v(" "),e("img",{staticStyle:{zoom:"50%"},attrs:{src:t(711),alt:"PNG"}}),s._v(" "),e("p",[e("strong",[s._v("可以发现这些数,都是最高位为1,其他位为0")]),s._v("。所以我们把问题转化为“判断一个数的二进制,除了最高位为1,是否还有别的1存在”。然后我们再观察下面这样的一组数,对应着上面的数减去1:")]),s._v(" "),e("img",{staticStyle:{zoom:"50%"},attrs:{src:t(712),alt:"PNG"}}),s._v(" "),e("p",[s._v("我们对两组数求“&”运算:")]),s._v(" "),e("img",{staticStyle:{zoom:"67%"},attrs:{src:t(713),alt:"PNG"}}),s._v(" "),e("p",[s._v("可以看到,对于N为2的幂的数,**都有 N&(N-1)=0 ,**所以这就是我们的判断条件。(这个技巧可以记忆下来,在一些别的位运算的题目中也是会用到的)")]),s._v(" "),e("br"),s._v(" "),e("p",[s._v("根据分析,完成代码:")]),s._v(" "),e("div",{staticClass:"language-go line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-go"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//go")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("isPowerOfTwo")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),e("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("bool")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" n "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" n"),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n"),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br"),e("span",{staticClass:"line-number"},[s._v("4")]),e("br")])]),e("p",[s._v("执行结果:")]),s._v(" "),e("img",{staticStyle:{zoom:"80%"},attrs:{src:t(714),alt:"PNG"}}),s._v(" "),e("h2",{attrs:{id:"_03、证明过程"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_03、证明过程"}},[s._v("#")]),s._v(" 03、证明过程")]),s._v(" "),e("blockquote",[e("p",[s._v("“下里巴人”和“阳春白雪”是古代楚国的歌曲名,屈原的大弟子宋玉曾著有《对楚王问》:“客有歌于郢中者,其始曰下里巴人,国中属而和者数千人……其为阳春白雪,国中属而和者不过数十人。”“下里巴人”和“阳春白雪”一词后来被用来泛指通俗和高雅的文艺作品。 古琴十大名曲之一。")])]),s._v(" "),e("br"),s._v(" "),e("p",[s._v("“阳春白雪,下里巴人”这个比喻虽然有点牵强,但是却难掩位运算的重要性。位运算在整个算法体系里,不少人可能会觉得有点食之无味、弃之可惜的意思。但其实,完全不是这样!有这种想法的,大多是初学者。对于这点,应该C系的玩家,会深有感触。万丈高楼平地起,暂且不说位运算在底层运算中占据了多大比重,单是整个leetcode列表里,打着位运算标签的题目就超过80余道,我想已经说明了问题。**至少,在面试这块,你必须对位运算了如指掌!**所以,今天的题目算是一个引子,后面我会出一个位运算的专题,希望尽我所能,帮助大家攻克这一类型的问题。")]),s._v(" "),e("img",{staticStyle:{zoom:"50%"},attrs:{src:t(715),alt:"PNG"}}),s._v(" "),e("br"),s._v(" "),e("p",[s._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])])}),[],!1,null,null,null);a.default=r.exports},711:function(s,a,t){s.exports=t.p+"assets/img/1.baeb33a7.jpg"},712:function(s,a,t){s.exports=t.p+"assets/img/2.883bcd77.jpg"},713:function(s,a,t){s.exports=t.p+"assets/img/3.a8ce815b.jpg"},714:function(s,a){s.exports="data:image/jpeg;base64,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"},715:function(s,a,t){s.exports=t.p+"assets/img/5.54d5f79b.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/57.ca7cd96a.js b/learning/.vuepress/dist/assets/js/57.ca7cd96a.js deleted file mode 100644 index 3a8c26a3..00000000 --- a/learning/.vuepress/dist/assets/js/57.ca7cd96a.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{1118:function(A,s,n){"use strict";n.r(s);var t=n(3),a=Object(t.a)({},(function(){var A=this,s=A.$createElement,t=A._self._c||s;return t("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[t("blockquote",[t("p",[A._v('今天为大家分享一道关于**"电灯泡"**的题目。')]),A._v(" "),t("p",[A._v("话不多说,直接看题。")])]),A._v(" "),t("h2",{attrs:{id:"_01、题目示例"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[A._v("#")]),A._v(" 01、题目示例")]),A._v(" "),t("table",[t("thead",[t("tr",[t("th",[A._v("第319题:开关灯泡")])])]),A._v(" "),t("tbody",[t("tr",[t("td",[A._v("初始时有 n 个灯泡关闭。第 1 轮,你打开所有的灯泡。第 2 轮,每两个灯泡关闭一次。第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。对于第 n 轮,你只切换最后一个灯泡的开关。找出 n 轮后有多少个亮着的灯泡。")])])])]),A._v(" "),t("p",[t("strong",[A._v("示例:")])]),A._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[A._v("输入: 3\n输出: 1 \n解释: \n初始时, 灯泡状态 [关闭, 关闭, 关闭].\n第一轮后, 灯泡状态 [开启, 开启, 开启].\n第二轮后, 灯泡状态 [开启, 关闭, 开启].\n第三轮后, 灯泡状态 [开启, 关闭, 关闭]. \n\n你应该返回 1,因为只有一个灯泡还亮着。\n")])]),A._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[A._v("1")]),t("br"),t("span",{staticClass:"line-number"},[A._v("2")]),t("br"),t("span",{staticClass:"line-number"},[A._v("3")]),t("br"),t("span",{staticClass:"line-number"},[A._v("4")]),t("br"),t("span",{staticClass:"line-number"},[A._v("5")]),t("br"),t("span",{staticClass:"line-number"},[A._v("6")]),t("br"),t("span",{staticClass:"line-number"},[A._v("7")]),t("br"),t("span",{staticClass:"line-number"},[A._v("8")]),t("br"),t("span",{staticClass:"line-number"},[A._v("9")]),t("br")])]),t("h2",{attrs:{id:"_02、题目图解"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[A._v("#")]),A._v(" 02、题目图解")]),A._v(" "),t("p",[A._v("这是一道难度评定为"),t("strong",[A._v("困难")]),A._v("的题目。但是,其实这并不是一道算法题,而是一个脑筋急转弯。只要我们模拟一下开关灯泡的过程,大家就会瞬间get,一起来分析一下:")]),A._v(" "),t("br"),A._v(" "),t("p",[A._v("我们模拟一下n从1到12的过程。在第一轮,你打开了12个灯泡:")]),A._v(" "),t("img",{staticStyle:{zoom:"67%"},attrs:{src:n(796),alt:"PNG"}}),A._v(" "),t("p",[A._v("因为对于大于n的灯泡你是不care的,所以我们用黑框框表示:")]),A._v(" "),t("img",{staticStyle:{zoom:"67%"},attrs:{src:n(797),alt:"PNG"}}),A._v(" "),t("p",[A._v("然后我们列出n从1-12的过程中所有的灯泡示意图:")]),A._v(" "),t("img",{staticStyle:{zoom:"67%"},attrs:{src:n(798),alt:"PNG"}}),A._v(" "),t("p",[A._v("可以得到如下表格:")]),A._v(" "),t("img",{staticStyle:{zoom:"50%"},attrs:{src:n(799),alt:"PNG"}}),A._v(" "),t("p",[A._v("观察一下,这是什么?观察不出来,咱们看看这个:")]),A._v(" "),t("div",{staticClass:"language-go line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-go"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[A._v("//go")]),A._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("func")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[A._v("main")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("{")]),A._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[A._v("for")]),A._v(" n "),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v(":=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(";")]),A._v(" n "),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("<=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("12")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(";")]),A._v(" n"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("++")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("{")]),A._v("\n fmt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[A._v("Println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[A._v('"n="')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(",")]),A._v(" n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(",")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[A._v('"\\t灯泡数\\t"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(",")]),A._v(" math"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[A._v("Sqrt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),t("span",{pre:!0,attrs:{class:"token function"}},[A._v("float64")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("(")]),A._v("n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v(")")]),A._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("}")]),A._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[A._v("}")]),A._v("\n")])]),A._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[A._v("1")]),t("br"),t("span",{staticClass:"line-number"},[A._v("2")]),t("br"),t("span",{staticClass:"line-number"},[A._v("3")]),t("br"),t("span",{staticClass:"line-number"},[A._v("4")]),t("br"),t("span",{staticClass:"line-number"},[A._v("5")]),t("br"),t("span",{staticClass:"line-number"},[A._v("6")]),t("br")])]),t("div",{staticClass:"language-go line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-go"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[A._v("//print")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("1")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("1")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("2")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("1.4142135623730951")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("3")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("1.7320508075688772")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("4")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("2")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("5")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("2.23606797749979")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("6")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("2.449489742783178")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("7")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("2.6457513110645907")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("8")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("2.8284271247461903")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("9")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("3")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("10")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("3.1622776601683795")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("11")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("3.3166247903554")]),A._v("\nn"),t("span",{pre:!0,attrs:{class:"token operator"}},[A._v("=")]),A._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("12")]),A._v(" 灯泡数 "),t("span",{pre:!0,attrs:{class:"token number"}},[A._v("3.4641016151377544")]),A._v("\n")])]),A._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[A._v("1")]),t("br"),t("span",{staticClass:"line-number"},[A._v("2")]),t("br"),t("span",{staticClass:"line-number"},[A._v("3")]),t("br"),t("span",{staticClass:"line-number"},[A._v("4")]),t("br"),t("span",{staticClass:"line-number"},[A._v("5")]),t("br"),t("span",{staticClass:"line-number"},[A._v("6")]),t("br"),t("span",{staticClass:"line-number"},[A._v("7")]),t("br"),t("span",{staticClass:"line-number"},[A._v("8")]),t("br"),t("span",{staticClass:"line-number"},[A._v("9")]),t("br"),t("span",{staticClass:"line-number"},[A._v("10")]),t("br"),t("span",{staticClass:"line-number"},[A._v("11")]),t("br"),t("span",{staticClass:"line-number"},[A._v("12")]),t("br"),t("span",{staticClass:"line-number"},[A._v("13")]),t("br")])]),t("p",[A._v("没错,只要我们对n进行开方,就可以得到最终的灯泡数。根据分析,得出代码:")]),A._v(" "),t("div",{staticClass:"language-c++ line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[A._v("//给一个c++版本的\nclass Solution {\npublic:\n int bulbSwitch(int n) {\n return sqrt(n);\n }\n};\n")])]),A._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[A._v("1")]),t("br"),t("span",{staticClass:"line-number"},[A._v("2")]),t("br"),t("span",{staticClass:"line-number"},[A._v("3")]),t("br"),t("span",{staticClass:"line-number"},[A._v("4")]),t("br"),t("span",{staticClass:"line-number"},[A._v("5")]),t("br"),t("span",{staticClass:"line-number"},[A._v("6")]),t("br"),t("span",{staticClass:"line-number"},[A._v("7")]),t("br")])]),t("p",[A._v("执行结果:")]),A._v(" "),t("img",{staticStyle:{zoom:"67%"},attrs:{src:n(800),alt:"PNG"}}),A._v(" "),t("h2",{attrs:{id:"_03、证明"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_03、证明"}},[A._v("#")]),A._v(" 03、证明")]),A._v(" "),t("p",[A._v("我不服,没有证明,你说毛线!证明如下:")]),A._v(" "),t("br"),A._v(" "),t("p",[A._v("约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。")]),A._v(" "),t("br"),A._v(" "),t("p",[A._v("从我们观察可以发现,如果一个灯泡有奇数个约数,那么最后这个灯泡一定会亮着。")]),A._v(" "),t("br"),A._v(" "),t("p",[A._v("什么,你问我奇数是什么?奇数(odd)指不能被2整除的整数 ,数学表达形式为:2k+1, 奇数可以分为正奇数和负奇数。")]),A._v(" "),t("br"),A._v(" "),t("p",[A._v("所以其实我们是求,"),t("strong",[A._v("从1-n有多少个数的约数有奇数个")]),A._v("。而**有奇数个约数的数一定是完全平方数。**这是因为,对于数n,如果m是它的约数,则n/m也是它的约数,若m≠n/m,则它的约数是以m、n/m的形式成对出现的。而m=n/m成立且n/m是正整数时,n是完全平方数,而它有奇数个约数。")]),A._v(" "),t("br"),A._v(" "),t("p",[A._v("我们再次转化问题,"),t("strong",[A._v("求1-n有多少个数是完全平方数")]),A._v("。")]),A._v(" "),t("br"),A._v(" "),t("p",[A._v("什么,你又不知道什么是完全平方数了?完全平方指用一个整数乘以自己例如1"),t("em",[A._v("1,2")]),A._v("2,3*3等,依此类推。若一个数能表示成某个整数的平方的形式,"),t("strong",[A._v("则称这个数为完全平方数")]),A._v("。")]),A._v(" "),t("br"),A._v(" "),t("p",[A._v("到这里,基本就很明朗了。剩下的,我想不需要再说了吧!")])])}),[],!1,null,null,null);s.default=a.exports},796:function(A,s){A.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA/8AAABmCAYAAACdgyFAAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAWCklEQVR42u3df0yUd4LH8Y9IlFtq0aUJiLtuh6arsD1uMc5l0Y2JQ5pa7OoqrVJxt11g+wNIbYvabZw22XVIF5WtNqL9AVy7Rc61imW9Ar3GMTFVLze9cmWzUNvItL0D4a5zlVLSKcuP+2OmispvH31mHt6vhITA8Pj1kwfm+TzP9/k+0wYHBwc1hq6uLsXExIz1snHr7++XJE2fPn3KbVPkSZ4hvE2RJ3mG8DZFnuQZwtsUeZJnCG9T5EmeIbxNkecNyzPC0H8FAAAAAACEHMo/AAAAAAAWR/kHAAAAAMDiKP8AAAAAAFgc5R8AAAAAAIuj/AMAAAAAYHGUfwAAAAAALG5aX1/f4Ggv+ORUkfr7+w199uDgYOCfnDZt2pTb5t++/l8NDg4qcmaMIqbPDNlxhss2yZM8Q3mb5EmeobxN8iTPUN4meZJnKG+TPMkzlLcpSf39/Zp7x0P6zneTL/t65Lh+2P8/6jd0OOjz/5/ZQ7AU8jQWeRqLPI1FnsYiT2ORp7HI01jkaSzyNBZ5Xn+R472iP/+OLLPHagn/9ddDGhwcIE+DkKexyNNY5Gks8jQWeRqLPI1FnsYiT2ORp7HI01gd595W79dfKCIi4qrZ++O68v+t6Nnzzf6/WAp5Gos8jUWexiJPY5GnscjTWORpLPI0FnkaizyNRZ7XFwv+AQAAAABgcZR/AAAAAAAsjvIPAAAAAIDFUf4BAAAAALA4yj8AAAAAABZH+QcAAAAAwOIo/wAAAAAAWBzlHwAAAAAAi6P8AwAAAABgcZR/AAAAAAAsjvIPAAAAAIDFUf4BAAAAALA4yj8AAAAAABZH+QcAAAAAwOIo/wAAAAAAWBzlHwAAAAAAi6P8AwAAAABgcZH9/f1mjwEAAAAAABhkYGBAV3Z9rvwDAAAAAGBxkdOnTzd7DAAAAAAAwCARERG6sutz5R8AAAAAAIuj/AMAAAAAYHGUfwAAAAAALI7yDwAAAACAxVH+AQAAAACwOMo/AAAAAAAWR/kHAAAAAMDiKP8AAAAAAFgc5R8AAAAAAIuj/AMAAAAAYHGUfwAAAAAALI7yDwAAAACAxVmr/Pd4tPn2xZpW0mT2SMJTn09nDlcqb3WOEm9erGk3L9a0H+co88lDcneaPbhw1K2WY5XKu+c+zb15sabdfJeS79mu4mNndaHP7LFZg/fg1sB+yu/8hDWWZQeyG+Wj2GP2KMNMl1c1JduV/pO7ghmu0pIHdqjspM/skYWNjsNbx9wvL31sVXWb2SMOHx0nD6nwgUvv73N/8qjyStxq6TJ7ZOGoW953Dqlw/ZD39/U7VPZOuy6YPbRwMYFj9gvNbhXnX9p3E9O3qvAljzo4lrqM/8RuzZ3Ieze9aWTjzSYMu5OFyn+vzuzdr9IQDTrkdTWp+OcbtCRnnypOtClqmV2O5XYl9TSppnyH0m/PUWF9u9mjDCPtqn7oXiVn71PFyS81Z5ldjuXz5D9ZK2d2tpJ+XqkzPWaPMcx91qDND7nNHkWY6tb5c2fNHoSl+D2VSl98nzKLa+X2z5NjuV2O5G905ughFd5zl5aUNMlv9iAtZ4aiIs0eQzhoV92WHM29Z4fKjjZJ9sD7+xyfRxXFW5W82Knqz8weYzhpV01+thIzd6is3islB9/f6w+pMHOVktZXqZH39zGM/5jde9ippJ9slbPq2303RfK4VbblUaVyLHVJT5NKXVXqGPcP0JtGNs5swrQ7WeRts1ctr/5Oa4s5czU5PtVs2SLnSZ/is55R3XOrlRr77fe61fJqiRyPNahsfYlS/3OPchPNHm+o61VjqVPZB32SPUdvVecrIy74rS6vKrY8oryD+7T2mQVq+cNSzTZ7uGGpXdXPOFVj9jDCVrsaj0mSQwdadmjDPLPHE+ba3MrdsE/uzgTl7tujXRttF3+vL3iqlL1ht+qKt8iVdkyuZTPMHm1Ii793hwbvHeUFnzUoO92p6s5YFdU+q7VxE9j4FNVxeLdWvtQkxa1Qee1Tyk2eFfhGX7tqnnYq86UGZf9qoZKOb1Sq2YMNeb06U+JUZlW7FLdUuw65VJR6ZZ67lfFEghpfdije7OGGpPEfs/sbK5Wd06COK7MecixVsHuxTm9LUZTZ/y0z9XhV8cQWOcc9W4/eNLLxZhO+3ckCV/671Vi2RY7HGiZwtguXaX1XZQd9ktap4vmhO68kzVLSg8/qwKZYSafkfIM/FGPq8qjit02Slqr8lSHFX5JibMr9Tb4yJHWUn9JppltOivfVEmUfjVU8B/6T09mm5k5JWigbxf8a9cpdXqLqTinjhRdVPqT4S9Js+0a5ChdIkmr+4jV7sGEucNKvulNK27ZTruWcSBmbT6f/NTBDKvcPQ4q/JEUmaO32R7UtTpLnddU1mj3WMNBaL1dxk6QF2vbHnZfKqIJ57nSp/E6p42CJ9p7sNXu0IWgix+zdqntln85IWvvcs5dnHWNT7vMuFcVJjSUVOtBq9v/LRF1nVZrziPIOjvf2MnrTyCaQTRh3p7Au//62U3Lec68WPX1KynpGb/3BYfaQwtKFs17JniCtSdGi6OFeMUNLHHdLkjqa2/ljMRbfN9Iau5LudMgx3Jm+RFvw6srnuvCV2YMNQ621KnzslOKznlDpg2YPJky1fyK3JGXdKpvZYwl3XR7VlPqkuBwVZSUM+5LUTQc0+OXbai5YYPZow1rgpJ8ke77KNk3xK33j9rlaTgQ+s8XPuvrbUYlKXiJJPon7p8fU8YFHdZK0fJ1y04Y7+ZSglfc7JPlU/M4H3OozxISP2Ts9OlIlSeuUe2fs1d+PtiszL1Cuqk+G3tTq669XHe/sU/ribG2ulza8sEd714z+E/SmkU00m3DuTmFc/ptUmrRJxSdnau32SrW8vFqLmD89KbPvflzHj/9Zg6+tGHGKmt/PGexxS3Ro72v71Xxk9bDFyn/m3cDBQ9ytio+d+OantrMq/fV21cWtUKlzhWwWuXHpRus496E6JMUvmMe01GvV/IHKJCnLriW00eunzS1n8anAFVfXRqWS9TglKPVngc/cHwwz88T3gdxHJWmBomaaPdbQd741OK96iW3EE6fxP1gY+OTEWbWYPeCQMYlj9tYPVS1JyxcoKWb4l9h+aJckuZu8U2+hRU+V5mZWyh3t0K63D+vAgws1Z9QfoDeNbOLZhHN3iujv79doH6Esas3jOv7xn3VkUwr3TV9XvXr/9HFJUnxyAmVhsnp8ajy8Wyt/WalGJSj3D+vl4AB2QhrLSrTZE6sNz+Vrw3yzRxO+vOcC04AdibMCK4BnrgqsUHv7fVr55CHVtXabPcSw4f30E0mS47Z5irryCR/BPEN1xd/wcenWivi8fG1OY7r/+M1SxoNb5YiT3E9uV+HhS0+b8bd5VJxfogpJtofzlZti9lhDn79vAk/uaPqSK/9DTPSYvaMt8LdVKQmaO8Jr4r8XnF75715NvZuqZmjt9v06/94OFaXNGtdP0JtGZnw2odGdBgYGrur2YXzdLEVFr/FOdSP4PVVy7vFJStHmu8l8wrpOqfD7mwJXByXphyu099BTKkgd3x9rBPgbK1XwdJPis1xy3ZtgwBanqnZ5g7efefc6NdfTpqRliXIsn6fzzR7Vle9QXXmVcl97UeVryHksHZ8GTqTM7vtQpetLtLnep/hku5KX36I5F/NsUMGfXNp7N3lOSmu9SkuD70EPskjqhKWs0/F3bSp+zClnTrbKci77pgoqX5TrXhu5joPtNockt9TZrQvSsJl1fPph8LNP5G2T0lhXZVLH7Oc7g8/xvGnmyLf4xMbKIcnd1Dv1TrTYN+qIfSI/QG8amfHZhHJ3ipg+fbpG+8AU91mDcjcEFlxJ2/a4CkJr/w0PXd36IvhopaQ4SR81qHDdVm0Owcd/hCz/WZVu3qcz3073N3s8Ye1zNR8LfHZGi/XWx2+r+V/263jtfjW3nNDp55YqXu2qeMCpYk9oTlkLRTVPbtXm9xdq1/ETOv9vwTw/PqHmF1YoXk0qW7+bx6lNSq/cr+8L3Cq1cSNXpyejzyf3wTdUUR+4am0b+n6kJh15tVZu9s1xiV+0VA5JKj+kI8MuMteut/6ZR9Aawf/VOB5HO3MmJ60QekKoO0VERFzV7cP4nn9cd5+5lbcqsLJyfJZLB55igaVJmb9CB45fUQY6PSpdT7kan16d2VMiJ9P9jdHZLf/yFNniVujIH694GkXkLKUV7FTNUwskNcn5+/opOJVysmJV9PJOFdmHzugZuuKvW0X/5Jl6V6eu1bcLKipW27J+yoH+hPlUk79B6c+49fWyHL318XtqPX7pZN/7L6yQTlYpM93JyanxSHSoKLjIXN6vd6imdch7eJ9Pdb91Kq8pltsjgakqDLoT5R/D8n9Uq+z0rapoDey8p/dxtdUYQ8tAk5x73SG1Amgo8nuqVFTcpPisJ5jub4S4pdpVW6nWj11aO+x01BlK+9ndgSdSvONRI/erj0/KL5Q97KPnZsixar3iJXVU/YUFwCbowkl34JaplF8ocxn3+k9YU71cB31S3DpVvHb1yb7UB58NnOzrbFD2791Tb9G0CZuljO075VoWK3kOKfPHS5SY/qjSVz+q5KS7tLJqplzVz6pQkpTAor7XIOqmcTwd5Ztv2GcRMsKlO1H+cZULJ/bJsXh74FnKD+/R6ZdZVd1YM+TIWB349GgrV1ZH09Ok0t8w3f+Gi70lmHWv/Dz+a1RRkcGj+9tuGXFRKiUkaIkkdYor/xPSLXd9rSTJkecIPiIVE+F9/5QaJSlruRzDFtEZSrt/XWAqe1WT3mcHHVt0ira9Wa3jO9dprT1BXo9H7k+/UdLPtur4u/u1LaFb70tS3M2aE2qX/MLI3Ljg2emvvhn576bPF3hs7XJmW8Bc4dSdQnRYMEevGsu2KOPpU+pQrDKee0FHChaE3HQVS5iXqLWSatSu852S4gzYphU1vyenR5IalH1Hg7JHel1xjqYVS1K+Tn+ZozSzxx3q/N260D9Ls6MN2NYUNzfRLqlB6pO+NnswVtPVJHeVJC1QxiJm/UxGR2fw0XSjLZp28b7pdnX4JLFA3dgiY+V4eKscD2+9+nuedp2WpOW3jnxCEGOKn3dr4JNWn85Lw5787/jv4MILt90yxmPugOsl/LoT5R9BvTpTuklrf+tRh1JYmfoatFQ5VXjwrJpTt8q73T7sHwD/uQ9VI0lxibJR/EcWeZMcy0dezvbrTz060yopMUWOH8yUdFNI/8ENBd5XH1XiYx5pjUvnR3o+bXvw4DVuoWwUgVHF37ZQqWpQ47EP5fWvkG24HfCz1sDvO1enJuajszoiSXHpcrDQ36TEx9kleS5ePR327+PFqdNMUzdC4+nj6pCUsWwhv+/XIvkfVCCp7FiTWrpWyBZz9Uu8HwVObjlSeFoFzBCe3Ylp/5AkeQ//7uLO63p7T1jsvKHKNj9BzSe96tjToLphHwncrppXqyRJqYVLmco6mtR1Ol67f8SP0vuDr7v/8eDX1pHnGGyLgvvc0Xq9NcJq1dWv/EkdklLzFpPnWFIcKrhTkqpUenC4J3h0q+6NwNT1jPvs3LoyAd6/egJromT9vZLMHkyYuvj7vucN1bQN/5rG+trA1OmNKVrE2dPRfdagvPRVmvbTqsDtFFfynVLF3rOSViuX46hrE5Mix0ZJOqSK4Z6O1OPRkXKfpKXasIysceOFa3ei/ENqa9DmnAZ1KFYbKl3alsbz569F1LKfy3WnJNWqIL9KjV1DvulvV80Wp7KPSopbJ9fGcSxoAxgp5W45s75drXqf6oYu6BdcrTo7uECYKy/0VqkNPQnK3pyjVEl1jzlVeKx9yP2p3Woscyq33CfFbVTRmvA4MAgNvfKeC17Vu20e++FkpayWKy/wtInsX+5TXdvQJ8x0q6VquzKfbpKUol2POLh6Opb5KUqb3S417VZBSdPli811npLzgd+prFNKe26d1jKL4hrNUsav85UmqeYhp5zvDLma0uVVxRNOlXZK8Zs2KjvR7LFiygnj7sS0f6jx8OuBKanyqTpnlapzRnnxaFOFEZSg3Jf3y/uAU8X1u7Xo+68raVmi5k7/Rt4TTYEF/hJXq/zQ48rg4AA3XKzWPr9TrvYtcp6s1Mrba9k/r1FUWr6OvOZT+gO1KstepbLgbSjnmz1q6Qw+YeFIvhyssTABn6sjODMl9Qe3mD2YMDZLGdtf0K62x7S5vlIrkypls9tlu0mX9s/gdNUibq0YhwTlPu+SO92p6uIczSm3yZF8i/RVm9yewNXptKL9qivgxL4RolJzdKCyVUtyGlSceZcqku1Kjrv0XhW/LF81v7FzchA3XDh3J8r/lOdTy/tnzR6E9cTa5XqzWivfrFXFq/V666RHLZJsdocK1t0nZ65d8fz2wSzRKdr25mFl1L+hspeu3D9Xqyhr6bD3V2JktjXPqHXJCpWVvKEDbrfcJwJrUeRu26iiRxxKIs8J+lzeY4HP5tzEI/6uSfQCFf3psNa+U6/SqgbVHfXILSk+2a7cvNXKfXCF0lh7Zvzmr9CB9xYo88UqlR19V+4TXinOJsfGfOX+arU22DlraiTbvS61JDtUtrdKFVUeuZs5loLZwrs7TRscHBwc7QXnTj6u3p7zmn9HlqJnzzd7vGHvw1O7NDg4QJ4GIU9jkaexyNNY5Gks8jQWeRqLPI1FnsYiT2ORp7HO/ccr6v36C83/x2cVHfujy77HPf8AAAAAAFgc5R8AAAAAAIuj/AMAAAAAYHGUfwAAAAAALI7yDwAAAACAxVH+AQAAAACwOMo/AAAAAAAWR/kHAAAAAMDiKP8AAAAAAFhcZFdX16gvGBgYMHuMAAAAAABgnHp6etQXeXnXj4yJiRn1hz6PYHIAAAAAAADhIjo6WtFXdH2aPQAAAAAAFkf5BwAAAADA4ij/AAAAAABYHOUfAAAAAACLo/wDAAAAAGBxlH8AAAAAACyO8g8AAAAAgMVR/gEAAAAAsDjKPwAAAAAAFkf5BwAAAADA4ij/AAAAAABYHOUfAAAAAACLo/wDAAAAAGBxlH8AAAAAACyO8g8AAAAAgMVR/gEAAAAAsDjKPwAAAAAAFkf5BwAAAADA4qb19fUNjvaCT04VqbfnvGb83Ryzx2oJf/N3aXBwgDwNQp7GIk9jkaexyNNY5Gks8jQWeRqLPI1FnsYiT+P1fv2FvrfYqe98N/myr0dOZAMwDnkaizyNRZ7GIk9jkaexyNNY5Gks8jQWeRqLPI1FntfftMHBwVGv/Pf4/qqenh5FR0cb9o8ODAxIkiIijLvrIFy26f/yE/n9fkVFRSnq5ltDdpzhsk3yJM9Q3iZ5kmcob5M8yTOUt0me5BnK2yRP8gzlbUq62N+jY3902dfHLP+S1NXVpZiYGMMG09/fL0maPn36lNumyJM8Q3ibIk/yDOFtijzJM4S3KfIkzxDepsiTPEN4myLPG5YnC/4BAAAAAGBxlH8AAAAAACyO8g8AAAAAgMVR/gEAAAAAsDjKPwAAAAAAFkf5BwAAAADA4v4fV1ubbMXyEtsAAAAASUVORK5CYII="},797:function(A,s){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAz0AAABKCAMAAACmecqjAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABUFBMVEX////w8PD5+fn8/PxpX0FnXT9oXkBTRyVSRyRVSih7clhYTStPQyC6urnGxsXBwcDExMPo6Ojt7e3u7u6enZ0FBAJLQB53blSko6PGvJ5VSibg1LL/8sxYTChpXTlPRCB7b0v09PT39/eioaF5cFb/x4QAAFKl4////8aBAABSpuf//+elVQD/46VSAABQouIAgsZQAFCEAFIAAAAAU6Hn///nplKEx/8AAITG///G/8ah3uLGggCEAAD5woH/8p6EvczGewAAe57nnkJSnrn/vWoAAEKl18wAAGrG8sz/14RSAEIAVaX/8rmlUQAAUYTn8szGglLGgoSEx8ZSAITG46VSAFLG/+fGvWrG8rn8xYIAVKPk/PzkpFEAgMT8/OSjVACCxfz84KNRAFGj4PyjoqIAUUJ6cVdRAILE/PzEgABRpOShUwDG4+cAf8FSVVIqwVSEAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAOxAAADsQBlSsOGwAABr5JREFUeNrtnGl72kYURoVEorhxEsfE2Uri1C2BAFbVTo3t1go2MjGmhu5u0yVJ033//9/6jAZhyTASugrRwns/xI+sHGa4uodZJKwoilJQvKH6jjQt4CRIkAtNpqMXIEFmkUxHL0CCzCKZjl6ABJlFMh29mJksFosXit64WAwI70ld1y/puq4vgQRJJN3qeyOj9lxeRiCSDtiDQFAjcXuuXPXGNd/Ryor05FLSiUMgPPYUCoXrBW+s+o5KpYCTMcgba6S4mXTiEIjlW24VJzX23F67Q4m7SScOgUh+5nZ77c0yIe4lnTgEAvYgEOTIuj33I8c6SJAxyXs5sedBZHIdJMiYJOwBCRL2ZCHbIPNFwh6QIGFPFrINMl8k7AEJEvZkIdsg80XCHpAgYU8Wsg0yX+SkPaqqrqreeMt3tLERcDIG+TbsAZk10q2+d9wqxtgDEuSMgZkbSJCwJwvZBpkvEvaABAl7spBtkPkiYQ9IkHOwp/Kwyn/UHtUnHGg0xe82jXdhD8iFJeX2NJqmMOS96oQDtfer4r+wD7ZgD8hFJeX2bBqMh9lyfrBtrwOVnV1ndNr58NG2MkHCHpCLQUrtaTTNiukMMx81zwzZMzVNGflUr1nbymPh0ZztaVv7If2f/s4PGGMdUs5sxtghNdvdJ0cEsm3xrPaOCW32DSkYSPbFJ6QkR8Ftdsm57RJze9AZd7oTjex/fOR7ichtSgpJak9lZ7dm1RWlZaqV8cDTYtwepeH4VLNMRVH3Trbmbs9gyCj2DIa943Lb+uTT6FfYfnJU7huS4gizp22R7OkbsjcZRnbZoXizlN6WyweS7oa0uV9uW5QM2UTSFvXL0zQNDyDHF8RmEe0RgLSQZPY4glTqivJZVVU+/0IZLXOEPZtffnVadeRR1EbTq89c7OEfNhR7RDl2CbXRtvhno02sxwNGsqcrGz3CyMGwEyBf+EgpS25wm7yWbFJuO5SrMhiyUSXzhqfg8ja7TFwQ9yUityktpNB1jwjTkWfn66ZjT8vcPK3umcIBd3dhbvb0jY78Yzl83SMrjvDPZKI93d43JHtsySAZSo7nJaT3KcoxKkm3R1xL8fk0OzkY9p46HxICnIJL2+yyQ6fwxy8RuU33dSYKadIeTdNK2ji+/e77DU374Zk4ev7imapqz1/8+PKnn8VvNzRflHxH/pOqGnBS+yVo3RPHHsoVdrNeJpB9Y5+07hkMfzUYo1Ryt/d0SCPLQUPPLDM3wqzYtSfyWss7xE7BAzM0uiCDSPacA2z52PObW8Uz2PPy9z/O7Pnzr3TbQ1299A1aPfJ8k+xxSpG0erH5xJa67pEPPSEk3+SgrP3FsCG7LDPaM0WDedszrceT9rjzr5p1buYmNuI0TamM9rBbptL4++Sf17DnRrenbVH2okSQVtN8ukfbcxu902gzGqdJdkgkA7AwkieHZqzYNYi+z5esPVMLSb7uEfd0KidbKl/oeO3hi6LTqrP8Mf71O5A2e+TyzFDJhNmF6GkMeyht2mxfWhmhbcomtqHv85CwenH7yyQrkPTO3KYXktweYYywx41z9rCd3dfznBvVnr4h38eaVyXT76BQ2+zGsCdg4jbD6oVobMAdvNBKjr5r8CrskRSS3J495o36OXsMMXNTVO5XWu3pGwHbWOG1QZwLEcce0Rpl31kYR9uxlo0es/WWMvYIhnAfQVSy+DfSjnV8e2SFFPyMdc36zxl73KdChT3cq4dVMTqpSiu19ki3hEKzXT5wbo9R7z/SZm58JUG8t+vsGlDIwFu081r39I7lq63wSuZboRHvlsa1R3pVAu1psW0xc+PP5EyZuQl7zClkKuxxZ1HEuTnxORSyPTHa5M++0Has5fvVs/SW1iYnCbvkZ7OoyE/qxLRHWkgB9uzxnbbKydZjxtjZ+OK152SLP2tQnyBfuT3ywFOiIJMj5U/qiIfb/LsGfnvEnrbvMVHYA3KBSOJ3Sx17FHy3FORCk/hmNkiQsCcL2QaZLxL2gAQJe7KQbZD5IvFX4EGCjGsP/go8SJBRAzM3kCBhTxayDTJfJOwBCRL2ZCHbIPNFwh6QIGFPFrINMl8k7AEJEvZkIdsg80XCHpAgF92e+5FjHSTImGRe7EEgkgvYg0BQIwX23KHE3aQTh0B47CkUCtcL3lj1HZVKASdjkDfWSHEz6cQhEMu33CpOauy5ctUb13xHKyvSk0tJJw6BSH7mRiQvJ504BAL2IBDkyKo9xWLxQtEbF4sB4T2p6/olXdf1JZAgiaRbfVm1ByTIFJHp6AVIkFkk09ELkCCzSP4PSJ0lJHtfmGUAAAAASUVORK5CYII="},798:function(A,s,n){A.exports=n.p+"assets/img/3.a40364f6.png"},799:function(A,s,n){A.exports=n.p+"assets/img/4.0c272c85.png"},800:function(A,s){A.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/58.c85a9198.js b/learning/.vuepress/dist/assets/js/58.c85a9198.js deleted file mode 100644 index 13cab4a3..00000000 --- a/learning/.vuepress/dist/assets/js/58.c85a9198.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{1119:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,出自美国的电视游戏节目Let's Make a Deal。今天为大家进行完整分析。")]),t._v(" "),n("p",[t._v("话不多说,直接看题目。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("三门问题")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("参赛者的面前有三扇关闭着的门,其中一扇的后面是天使,选中后天使会达成你的一个愿望,而另外两扇门后面则是恶魔,选中就会死亡。")])])])]),t._v(" "),n("p",[t._v("当你选定了一扇门,但未去开启它的时候,上帝会开启剩下两扇门中的一扇,露出其中一只恶魔。(上帝是全能的,必会打开恶魔门)随后上帝会问你要不要更换选择,选另一扇仍然关着的门。")]),t._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("p",[t._v("按照常理,参赛者在做出最开始的决定时,对三扇门后面的事情一无所知,因此他选择正确的概率是1/3,这个应该大家都可以想到。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("接下来,主持人排除掉了一个错误答案(有恶魔的门),于是剩下的两扇门必然是一扇是天使,一扇是恶魔,那么此时无论选择哪一扇门,胜率都是1/2,依然合乎直觉。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("所以你作为参赛者,你会认为换不换都无必要,获胜概率均为1/2。但是,真的是这样吗?")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("正确的答案是,**如果你选择了换,碰见天使的概率会高达2/3,而不不换的话,碰见天使的概率只有1/3。**怎么来的?")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("我们用一个很通俗的方法,能让你一听就懂。首先刚开始选择的一扇门的概率为1/3,而另外两扇门的总概率为2/3。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(801),alt:"PNG"}}),t._v(" "),n("p",[t._v("现在上帝打开了其中一扇为恶魔的门,我们知道这个门后面不会再有天使,所以相当于这部分概率被第三个门持有。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(802),alt:"PNG"}}),t._v(" "),n("p",[t._v("剩下的那扇门的概率(2/3)相当于刚开始选择的门(1/3)的二倍。所以我们得换。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("如果还没有听懂。我们可以假设有一百扇门,里边有99只都是恶魔。现在你随机选择一扇门,选择到天使的概率是1/100。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(803),alt:"PNG"}}),t._v(" "),n("p",[t._v("这时,上帝打开其中的98扇,里边都是恶魔。这时候就相当于99/100的概率都集中在了另一扇门里。自然,我们需要选择换。"),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(804),alt:"PNG"}})]),t._v(" "),n("h2",{attrs:{id:"_04、代码证明"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、代码证明"}},[t._v("#")]),t._v(" 04、代码证明")]),t._v(" "),n("p",[t._v("为了验证结果,我用代码跑了一百万次。什么?用贝叶斯分析分析!太俗(请隔壁去找李永乐老师),咱们还是直接上代码。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//换门遇见天使的次数和不换门遇见天使的次数 changeAngelCount, unchangeAngelCount := 0, 0 for i := 0; i < 1000000; i++ { ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//门的总数 ")]),t._v("\n doors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//天使门和选中的门 angelDoor, selectedDoor := rand.Intn(3), rand.Intn(3) ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//上帝移除一扇恶魔门")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("doors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" doors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" selectedDoor "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" doors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" angelDoor "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n doors "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("doors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" doors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("break")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//统计 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" selectedDoor "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" angelDoor "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n unchangeAngelCount"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n changeAngelCount"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n fmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"不换门遇见天使次数:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" unchangeAngelCount"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"比例:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float32")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("unchangeAngelCount"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000000")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n fmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"换门遇见天使次数:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" changeAngelCount"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"比例:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("float32")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("changeAngelCount"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000000")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br")])]),n("p",[t._v("跑了一百万次,结果当然不让我们失望!执行结果为:")]),t._v(" "),n("img",{attrs:{src:a(805),alt:"PNG"}}),t._v(" "),n("p",[t._v("所以,今天的问题你听明白了吗?评论区留下你的想法吧!")])])}),[],!1,null,null,null);s.default=r.exports},801:function(t,s,a){t.exports=a.p+"assets/img/1.e6629cc3.jpg"},802:function(t,s,a){t.exports=a.p+"assets/img/2.44c23f2f.png"},803:function(t,s,a){t.exports=a.p+"assets/img/3.eb049027.jpeg"},804:function(t,s,a){t.exports=a.p+"assets/img/4.72302b38.jpeg"},805:function(t,s){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAX4AAAAoCAMAAADOpGGQAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAclBMVEU+PTInKCLMzMwnY5vBzMzMv5thKCKCrsyshCInKF6cv8zMzMGcYyInKH+szMwnhKzMrn9hmsHBzMHMzKyCKCKszKzBml6szMHBzKxhY5uCKH/Mv6ysv8zBv5ucv8GshF7MrpucmqycmsHBmpthKF7///9u3q6XAAAAAWJLR0QlwwHJDwAAAAlwSFlzAAAOxAAADsQBlSsOGwAABFZJREFUaN7tWouWojAMNUEHdQbBlWXc9/P/v3FP05Y2bdCRIt3jkFlXAWFyL+kl7Z3VaomcAUtkjIX+rHGZfjQvtyVvAKCNocuwEzD8KJ42cwhA754Wpx/9iOgHBH7MYxz7r/DLeDsh+kzXsP8yRlgCBufs9LN0LP2upvl+Rh2Gp8ZopFuK9POf0Y/zDcpL9BNfjlwUv+BVPw7SD8ENsif2FxBlq1gjbp4ASkTcAuz2iM8vANUBaX+NiA0AHFEfn4L+AMsg/SqXZoJMV4PZgEsgKgU3GjBKOboKYvhk8N6ckMk4Sw2y+PBC7/Wphepj61joAI5dCvUMn5FOk9cF+ssGqkMX7ro9U4F+ZBRy1XC3BfGN1e/rC6Mf3UGLvDo0QTJHvaN61aCKMwMF5TT0o8e2S2iYfuL4qOo9MdOYfvRqkel7UP2CpHBp8e4bRuf4BeegR/Tv9nqs1gaqwuiBIqyTVX/YEKA3GnjUpCin1ts1LtOVkAr6GV2gX3qgvu3RGz2q5UKrtaIqKd3SzekVVb0rKbWK2kBKxI/eq/R/Wp8+mzpPyXQlZGLVxPZeg/RzafGHDSOU95Y+1mCASHdAlxhJJ+EyNfasoRsB2O2T+I/odz8DWanKV/KSmulKSIRJs6tbgX7sm6Mr9LtN5EcxOByGlVKjrCShgcL6hyei3wMkBml/zbV/VKbBtCv43z2LhqqfHRafDuLEoD+JzxuER6/GaGvJ9hWlgW7bjXVq44kC/X4nxGO33zzpMq97NRmV6bXGM2iHBfqBtz5Cq4rRPfS7IH8/p7/WXbMSVKWoVkn9LrpxTXYS/ULPf4l++qUd9PSPzvQq/RFfII5Mznyk89j30xBhuzLDmSEwyj6c5t8rLtHfT3oDaen1Ht3stT/ibTnKpUrXTxbgxZcnWPa+MuZZdFhirljozxoL/VljoT9rLPRnjcFFh35L3ngIe1HImX+avfORVpYf0F6MQQtrhLnof3x7MQYdY52/+nPbizQ/V4skatq+1S6enqaX2qQrafaebi8O0R8gG6Q/MBtH5x1Xf7xmA0xI7movmgUquzBlV2uh/vJ161Zr0w2WAfrdGs+NZuPYvAXxyWgvFt/M8qBGsftuUFSHH8pMqs13J6c/1WwcnbdE/7DBAqGkcGlJthePP2klsXr9hdrQ+G3+gqAhL6/8o8f2nao/bA/ebjaOzjuiP6u9WD6/qAFcrBsazzV2NHCLc6tg7PanlsZ1ur0o0u9t3mg2js47evRerP5724vkEJUdOUPFuSU/qd78JQj6ZS3tRHvxCv23mo2j8xYevRntRXLiyo4MuuLcEhxVafRbN08Kpf2LgjR78Qr9t5qNo/OW+v589qKCpV7KmSsbsq2NdU3ZKzfbONqJ9mIEOs1sHJ330Kw3j72o7DnVs9m2WrXRHfQwlHie2insxRB0otk4Om+583l4ezEA/Z+Yje/GXuSxmI3vNBb6s8ZCf9ZY6M8a/wD4emdbC8aiIwAAAABJRU5ErkJggg=="}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/59.b0c3be29.js b/learning/.vuepress/dist/assets/js/59.b0c3be29.js deleted file mode 100644 index 971d1ad0..00000000 --- a/learning/.vuepress/dist/assets/js/59.b0c3be29.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{1129:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天为大家分享一个"),n("strong",[t._v("脑筋急转弯")]),t._v("类型的算法题。leetcode这个脑筋急转弯的tag打的我措手不及...")])]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(868),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("分享这道题目的原因,是因为有很多同学,在拿到题目的一瞬间,如果发现题目很长,然后自己就慌了。其实,对于这种题目,如果认真的分析下去,非常简单。")])]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第1033题:移动石子直到连续")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("三枚石子放置在数轴上,位置分别为 a,b,c。每一回合,我们假设这三枚石子当前分别位于位置 x, y, z 且 x < y < z。从位置 x 或者是位置 z 拿起一枚石子,并将该石子移动到某一整数位置 k 处,其中 x < k < z 且 k != y。当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。要使游戏结束,你可以执行的最小和最大移动次数分别是多少?以长度为 2 的数组形式返回答案:answer = [minimum_moves, maximum_moves]")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:a = 1, b = 2, c = 5\n输出:[1, 2]\n解释:将石子从 5 移动到 4 再移动到 3,或者我们可以直接将石子移动到 3。\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:a = 4, b = 3, c = 2\n输出:[0, 0]\n解释:我们无法进行任何移动。\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("p",[n("strong",[t._v("提示:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("1 <= a <= 100\n1 <= b <= 100\n1 <= c <= 100\na != b, b != c, c != a\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br")])]),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("blockquote",[n("p",[t._v("这种题,基本上不慌,就赢了一半。")])]),t._v(" "),n("p",[t._v("通过分析题中的样例,就算再笨,画一画应该都能理解题意。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("比如:a = 1, b = 2, c = 5")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(869),alt:"PNG"}}),t._v(" "),n("p",[t._v("比如:a = 4, b = 3, c = 2")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(870),alt:"PNG"}}),t._v(" "),n("center",[t._v("(无法移动)")]),t._v(" "),n("p",[t._v("读懂了题意,开始进行分析。首先可以明确,每一次我们其实"),n("strong",[t._v("是从边上来挑选石子,然后往中间进行移动")]),t._v("。所以,我们首先得找到min(左),max(右)以及mid(中)三个值。我们设,min和mid中的距离为x,max和min中的距离为y。大概就是下面这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(871),alt:"PNG"}}),t._v(" "),n("p",[t._v("然后只需要计算x和y的和,就是我们要找的最大值。而最小值,就很容易了,只有0,1,2三种可能性。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("根据分析,得到代码:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("numMovesStones")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tarr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tsort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Ints")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tx "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\ty "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\tmax "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" y\n\tmin "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" y "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" x "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" y "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tmin "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tmin "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br")])]),n("h2",{attrs:{id:"_03、c-代码"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、c-代码"}},[t._v("#")]),t._v(" 03、C 代码")]),t._v(" "),n("blockquote",[n("p",[t._v("当然,也可以不用排序,把代码写漂亮一点。像是下面这样...")])]),t._v(" "),n("p",[t._v("代码如下:")]),t._v(" "),n("div",{staticClass:"language-c line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-c"}},[n("code",[t._v("class Solution "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\npublic"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("numMovesStones")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" min "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" med "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" maxMove "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" min "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" minMove "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" med "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" med "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" min "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n minMove "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" med "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" med "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" min "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n minMove "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("max "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" med "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" med "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" min "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n minMove "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" vector"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("minMove"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("maxMove"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(872),alt:"PNG"}})],1)}),[],!1,null,null,null);s.default=r.exports},868:function(t,s,a){t.exports=a.p+"assets/img/1.f5c13fd2.jpg"},869:function(t,s,a){t.exports=a.p+"assets/img/2.4349c876.jpg"},870:function(t,s){t.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAsYAAABtCAIAAAAtTjDmAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4nO3deZhcVZ038O85525V1d3ZWVUmogMENCEkA2FAhXFBh3eYV5lnFAFBkdEhTvA1gguCIPjKKwy4IK9LcIcRERFQgRkVEGVJwIQQBCcJS0iAAAm9VNVdzjJ/nKrbt7fQna7urnv793l4Qvetul331D33nt89KzPGYDhJktRqtc7OTs75sG8ojN7e3kqlUuBkaq055729vZ2dnVN9LBOup6enq6vLJnmqj2WiaK2r1ep0OJt0bRYJXZtFMtK1WdhTSwghhJDJRCEFIYQQQlqAQgpCCCGEtACFFIQQQghpAQopCCGEENICFFIQQgghpAUopCCEEEJICzhTfQDtIjs/B2NsCo+EEJJF1yYh7WnotUm1FIQQQghpAQopCCGEENICFFIQQgghpAUcrfWwLyilABR4MvZUGIZBEAgh7K9GGwDaNL4WzvL9DQhHSCk9zwvD0PM83/eTJDHGeJ431YfWMlprxhhjTGsdx/GY9k2SBABnnHH7N0bbVG8sbRhnACZtX2TW3xn9LjlVr9d93x9TXk2/24k7qlbJXpvpcgnGmCL1F8lem/V6vauryyZ5qo9rohhtoigq9rWppBKOUEpxzoeuEeaMdO35vl+v1wFEUeS6brq9SNndGMM5V0plE2grbgTEVB1Vy3meZ+9Tvu9rrV3X7evrc5zi9MyNoqhUKiETAY8+FB5w6seiEQfsVsA5nn0B+L4vpQSgpLJBSfEYbdISd0w7jvO7nWTptWnvzowx+4Qz1cfVMnEc2+Rwzm0aCxxPoBkmAtBa5yKu3Q2MM2NMuVxWUg3aDoCNtBLpzTff3NfXJ4QIgsA+yTV2K1BIEQTBmjVrent7y+XykiVL7Eb7haRfS97Ta4xxXffee++t1+tBECxatMj3fWOMzffF4Lou5zwMw7Vr11ar1VKptGzZsiRJ0pqnXcjm/5Fq7IbKhiyMNS6iUe4+nn2thx56yD7wLVmyJAzD0e+YI9lrc/HixaPcK3u1tv+Va8vXe++9t1areZ5nr00MzJN55ziOEKJer69bt667u7tcLi9btiyO49Fcm3m0evXq9Noca41pXsRR3NHZ0dfbVyqXTjjhhEGvOt3d3cPu9vTTT69cuTKKokHb2/9CHb3spZve6IsXUthnIFtPldZDTvVxtdKg8tgmc0x/IS3ad8Pk7yuEsO2SBTuPWeMsVnORye0y30KI7DMbgCIVtzajTlvtnwl3Q3ptnnrqqcccc0y63SbWmTFjxrC7zZgxI4qik046KQiCIkXNWUEQbNiw4e677z755JPt8wEKF1LYquO1a9c++OCDp512mo2c4jje7Qr/NpTelDdt2nTfffd98IMfZIxJKYuabzdu3HjnnXeecsopnPM03xZMGIbr16/fsGHDySefnG2kK9I5lVI6jrNu3bo1a9Z84AMfcBynePlWa23rC13Xveaaaw455JCjjz4aI4caeU+71nrVqlULFy487LDDpvpYJop9Rl21alW5XO7q6hr06ogN6rYLxd57733ZZZdN8BFOGWPMihUr7rnnnj333DNNZsFCCsZYkiTLly9fv3797NmzL7nkEgDFa85MksR13TPPPPP3v/895/yqq66a6iOaQGefffZdd901Z86cK664Iu+34JEwxs4666x169Z1dnZeeeWV6fYipdd2Wly+fPnDDz88e/bsiy++2HZ4murjaiXblQ/Atddee8011wghvvGNb2Dk85j383vDDTesWrXKlrhTfSwT6Ic//OF3vvMd24NtkBFDClsUCSFsB+qJPLwpYxvgXdcd2v8075FEyhhj68njOPY8zwYT6XVeGK7r2r5CQRDYziLjaY9oc729vbb7CAqUUYcyxtimgezGIqXXtkJKKZMkcRzH932baYuUb4Uj7EmUUjLGHMexN5+RzmPez6+tLi1ST7Vh2c62w7YvjxhS2FJWKZWLVsndZs99th9N8WopGGM2NLRDeMIwLNiTUK1WC4KACy6EiONYax1Fked5Re1xXSqV4jguUsEzrLS/SPbOVaRzmob1Sqne3l40K9vyfs8ZhHMex7HnesYYx3G00QKiqLUUVvGqgbPSgR5jCymmCcdxkiQZOr42vaqLcXnbRz0bWNhxa9lX857GIAhsArXWSik7TAnI5URuo7mlJkliw0T7mDsJRzX50komO9I73W5YEYocK/v0Yrus2Qe5YhSrls2fnudFcQQgDEPOhpnMIJX3mZBsKWufUYu6Ng0XXEqptR62H/F0DykIaSujufVwzm0PqWLXIA7bBFm89KbJLNhjzCD9yeSswI2S08dIZzDfISEhhBBC2gSFFIQQQghpAWr4IIQQMqkK2bhDQLUUhBBCCGkJCikIIYQQ0gIUUhBCCCGkBSikIIQQQkgLUEhBCCGEkBaY7iGFaZrqAyGEEELybbqHFIQQQghpCZqXoqHY46SHru9S7PQSkhd2Km5bV1rgq9KmrthTyBNQLQUhhBBCWmJahxQmY6qPhRBCCMm3aR1SEEIIIaRVKKQghBBCSAtQSEEIIYSQFqCQghBCCCEtQINIyThpQAMc4AoAwChQJYSQaYlu/mQ8NADoCOCJMgIwQKKm+qAIIYRMBQopyDgYCfQ98/Dqv3njgfNff8ADm3f0AUxM9VERQgiZChRSkHHQMXZsunjlv/xp/eNbn9hy6533dwMMqCdDZuskhBBSdBRSkPHQyTNb/njXX1wApQ7DHQ+oGXBO+YoQQqYd6p5JxoE5L8XieQkwIAlft+88AVQYGC94rGrrYIqdRkIIGSu6K5Lx4AnzZONn6ZpYALQoECGETE8UUpCJ1Fw7ZXDXCmNf0plX9NB3tblBRz9kGyGETC/U8DGp0tKGZ7eZ5m8sbxXqjCvGZTNdknEFmLSiYrRrseWsDNa7/BVGA/YryM95JISQVpjWIQXLmOjPsgWPyfzK7f9tCWSjCqYB6ExR1O6FEoNiXAFgAEPMvQTQgDskmODQGmh0sRj8aj4CqaGBDx82GjIAbFuQR41AhJBpZVqHFJPJFph6aHnKkKmo4I1Qw0DnpDTSLBMnNX/W3AiwTH0FkIZQ4P0bDQfTmWCi3aOKNKWseZp4//E3owvO81btQgghrUEhxSSw9RAa4BwcbEADvAEAzji4gQJnzbdz5KGjo4EwWgAKALSrpWhsRgKAgdvS1wCGw2gwgOtGMmH/xxsFdfsnFsDgGhUJozMtHY5mjgHAG2ev3UMkQghpKQopJo2GkYB9tHXAuAZX4CYtdxgYkLeZJzWHFI2gQQvEbiMJkoHZmKHR2NHsW5BgQAjBDfIVUtizJYBGT0wjGyEFOLi2sZStuBCZ9xNCyHRAd7xJwAGYOIYM0bf90XvuWH7Ke+Z1VgTz9l+w5NTTzrz2upu390IDDJCQ4AkQNbtqtrn+mgkAjgq7AA1sfOyRjy//0JFLFwgmGGNvetOxnzrvC49uerZHIQIiwI411Wg+y7dtNjT9rR02SohqNWE3yVj39f7XL25eccYZR7zhDSVRKQl/2ZFHX3jJv/9pw9MhEAMmd11PCSFkHNr2Xl4sRjMHcsdz56/8+DFvPuHqH9+8oy/kQbBl46afXPcfp5/0vlfvse/Hzrl0S08SGscYbpR85b/ZDgyEkc25KHTF4Xfd9+Bxx731wIMWf+2qH6xe87h91x/u+8OlX7zg4ANf/6/LP/FCN2oKvUA4+hEh7ULDyLILhDuB2jevvHzeHnP/4d3v++r3fvLgn5/kHLHG6nvv/dIXLjrqkDcuO/qEBzZsSxpNQoQQMi1QSNFiw89LYCR2bDnr9Pdd9e0btwMlF0IIHfYKXUPcCxYi3Pady/7vaxcd9cDGHTEEcyv9I0vbmmbQHOAGzOCC8z79jmPf/Nvbf2NfMxCAA3CYuFR2YKo//u7XjzjqmMefiuoKXv8XlQBRHgIMDqPhynDrpn88cumKT57XF0K4wnc9CdQ0NCBcDiPhicfuuefYZcf+/K5H2z9VhBDSKrkot/KpUZho6BCmdvF5n7nxtrU7AdfxQ9bhVroACJ4AcKB9AKaOl3o/ed4l1QRG56VvATdwbGTADNatWW3qEYQHeEAZ8AEA2iioWuIZODp+cctTp/zz+7ZvR63RLiABNaCBof0YO7bXhDC1nY9t+F//eMIDax4NAAlUEUS2RkkIADxJKryK+GWUXNSTq7/5fWr4IIRMHxRStJzm0LaIjGrS1KvgPTd8/UtXfOumlwHD5yaYt/K8i5/Y9lyfjKpxbfv2Tdde85X5ZcyBRLU78F3ugXEoA9M01SkaGXMiVo7t0BUGSAmUXedVxx//gbvvuX/rc88YkxhT79n26GeWn9QFuAql+vNPP3jfFy+6ShobSigYB8Zr91oZnSDeHj//l7e/+913P/LsCwl6uaf5vBn7HHj5t77/yFNbjZRJ8tKOp+5473EHARqyBpmc8p5T2ztVhBDSSnTHazGe/gP4QrFSpf74hvM/++UqIOHC67ry+z8473Mr5lW8kvA4xLw5M//plPfff//9Sw47dI/99/3Cp/5PvgbhqOaMmTAOeMerD1l8669u/8UvvnX03x6yz56zDBJI2TFr9gWXX3bz9V+fPwMirsH0XP+jH993f7cGJBiMgGZo2+DJ2NEqDlx98UUX/Pfm52JA8orW/H+fdvpDD69ZfsZ7X/eafULAMaZjXtcB+87iAJiDyr4LDjg4H5VNhBDSChRStJQBNIeBYgCXcOoIn7v0sq8/WYVBGej88CeXn3nSMZBIDBgQaR1GDCzoOnjJbfet3vL4A0ct2KOj2ckgD7Ndac5iBgAcuvyv537+3vt/96a3vC6WiBSk1kw7MAGCufBmLjv++Cu/8ZUEAKqoPve9735DAwqeYgyMgU/GHKajN7DBQgJyw51//P53b+uLAFSgO09feeHV37q0q0vuqNU44GoAFajgpSdfKAFCeqVg1qv2aef2HEIIaTEKKVpOw9gCSYPVu5/4y49/cpPLvVjMOOjwN53ziRUC4MJ4DKFSHveDUqeBC8YV4AGuVEbbYZWG56E0YkZzAPAMSqed/pFZZSiNwIMr4HAOzuA6qNcRRVDO3x3390cuPbDiOLys7/ztr3SzG4Vq6x4HGqYO2ff9H1xbjxGgE+ha+o6//9xF53QKzICYWy4bQHDADSDZunv/uwQobcIokQamjcIkQgiZWBRStJadS1E3Jp+W4Y9+8L1ne3WPloC34pzP7DeDxxKcsQimJIQANBzDPUALxwAQjmCNqaEmb/2R3WfADeeAhgM4dSljoOTA9K9TYoAEJQ7PQ2kOn7H3+046MZJS1597acvjD65/MgEcBqnbMaZoHpOECXue3vRf/3l3D1CFB/AVnzhrTsl2L9UaSWMG0FqIKJ5ZsfPHaVT80NC8FISQaYRCipbTgBR2MKk2P/rRdY4DgL9mybK3Hrc0jFBy7GAOZh/RbVWEhgbk4FryHNRScG4cBigwcCjWmLCLDe4V4YB5YAGYs+iNb/AA6Agi3v7iSwkgAd1mz/IDlmIxGrq6bcvGJ7b1Ai6AI97xzqOOONQH3MbcoBxArU8CEsxEkZ2LQgazOlRAIQUhZBrJV1/AtseaC5RrDYPNqzc8/1IcKgDmPe89MSgDGgIwjVBOAhqmxAHNtLZDRSBgZ3Rur0J2JJxpr/GjUOBxc7tuTkjNGt0MYItfvdfes+3CHybpeeb57QqQgCPaMLWZ9cB09PKOFwKOXu3DLR9w6CH7dsKxwQZjYEID5Q4HEjB1IxABYKqyV0cSICdzlhFCSAtQLUWr8eaUEoa/+OKOvjq0AUozly09lAMeBxrTP6G/Zt30P+ym8vF0a7SrtQsYGLuMKvon1BhQUdGcd4L3VusJ4DtAYnpf6hUAB9y2jWxNIwBcu3Ztt4YChzH7vHa+A0CDaXCD/i4vtZfR5S08/K8kAKZLXZ1MNBYsHWj46dAIISTvKKRoOQ7GYRwYx5iEAz68CuvYu8OdAdRD29dCQoUwDNptrANhHG48oLF8RDuvejGA0fO6OuZ3dRoIcN+klV5GNCaIMoAB04gjZXtxvrSjxgEhA2De0gWHuSabUj3cf21Am5mzZgIAcyBEGKnuemOqbWbAAGGgQgnPhdEde8xhAIzjJm4lXWDMZFtTYiBul6QRQkjr5KPkyhtuH9WTek0BClJrzR1HAzMDMI7+JbIZb6yblbcFORsMoKWnJWDsXFWNKIAjm7UYQ8kXKg6B5I+/X+0BVQjf79rvVXs4qv3b3jgMmzN3LmcAUzDs5R07yyUYZtu5GhUVInAQuICat++rAw8wYvPq9b3PA8CQFeDooiOEFBPd3VpMg+tGSKH36po1E1DQdVldvekZu45FWKuDOxAemAOmNZeaa1s42QGVbT479QAG0HAVXEggYSw2QARIDjuLqGbQNmmJckw3Xtj8o2+uMnABvteBr37V/E6HN8OQtpstlPf/wP19XzPfF+C6DmUeuf++XqDqQAkDGJbOvA7ACfY/6I1SQTgBIt3lQgEKzS+hcWI9jUA324kIIaQwKKRoLZ5ptdD7zd9n7mwIALLvW///6pcVQsApl5QNOwBAc8QcIYyEAcCa636zHMUVHNqFAmKOGIACEkA1sxY3QD2EqxFVL77gvO6+3hAACz74kY8CmtsCuc3qZnj2iBiHqMyes4/PECCGqf7pvru27uiJgATMNEfvVKNeQMGbUe7aSxsoqVDvfnjdiwkQwWmcWwA0rJQQUlwUUrQcb/TI49J9Tfmotx1ie2I++uvrzv3YZ5/uRQTI/hJLAxIy3Llx/WfOWt5Zmv/tVXeEMbRBs96i7fmuNIkDDR098+RfqjqOAReoAxE4l0ASI5CovfC1y7/yuatveKaulOPNmP/6d73zBM45Z8wW4KY9AygOcA5e2utV+x36hv08APpFufOpcz7xyQRIDCLFYh0aVa04LiLet3H7Bedf1qsBVod88cZbfxIBLO030Uyiaf5tQggpErqttVimBwHQNftjnzp3j9nwIYHwZ1f/+5JFS6756e+6Q/TUZb1alX3VP9+/+qxTPnDQgYu/+e3v9oXyox8/989PvCRZXpYNA3xXQkskkDtPfdfbFh2y4MuXf3nT888xGNNs0fjPn930liOPPueirzJAcSitz//sp+e/2ndYNmpqx6d3DYBxwEVl5vIzTy/ZiSlMdNtPr3//e09/fOOWSGvPDSIZP7nxiSsu/cqBBx79hwc2AwCLwXpu+/UN23aiD6jZsaTN6qd2TCohhIxb2/eNyx8NY/tGcBV1vubgIy86/2Nnnf21ioOdMqw9vf7f3vuuf2MCAEzMjGSMQWsNQDkQvjt3RuKpCCixPDR8cKDe16OQAHah8u4nNn1p5Tlf+uS5YGCGm8bc4nYiLwCA0/HRz3z+wx88XkdwfQgbdTSG0bZjUasBcJ9DvfOdb1t0wKV3bawnDqDD3/78+qU3/gQyQcChEsQmEL6vWAzjM0Q6BPTOpx772Y23rfjQcSK9zpjUQKN1zOSkIooQQkaHailaqr8DhAYcuDPh7nPyipVXXbFCSXQ6cGTMdQiTAAqGGSa0E7idcwEXcJw5nddd+73Xz99DKjW16Ri97Ttf7knAAD/oQmcAzsAAwxwNYZoDW3iF+3PBy3A7PnzuZ1eu/ISs64BpMWieynalNcA97L3f1au+N3MWRwQeh4hrMBG4glGQ4MGM2PjdEI7odF04gMNi1F++4cfXd9fhoNlVBlpA88a0ZoQQUigUUkwQB8YRPIARMHNPPvviO35/0yEL929MR6BjqBBMwnUhZdTXM2vunpf8vwt7n//TcUf8VQXoEIIBhjH731SnZVc6Z88ulXmJzUhCDzWGmIHBd3nJc0ueL4yGqUMnBny//Rf+9IZffvWiT+1TQVeJux4XALNtCwyMmbZa0yQ7NQhjgDZgXfsd+Y7bbrvjqMMPcu1rTIPZdgxhNPPKs/Z//Vu++x+3bNy8/p1vXyANgGjj6od4L+o11OqNOgkOiPYPowghZOyo4aOlmvNmwjSmpgDjMC508jdHHfuHNQ+tfejBW2697Y7f3f3Qn9bXo+Sggw5cuvTwfzrxn4844ojZnYEe+GdygPHSAQd/6bIrT1t+4Uc+/JHPX/q5B9bcc9stNz26bv0ja9e90L2z5JZe+9cHLVx6xMmnnnH40kMrHXZAi27OdG1T2u7P64IBTICXYJI3LD78zt/95uFH1l//85t+/ZvfrVv7GBPOgsVvfPPfvvVfzvz4ggV71uvo9F++8caff/HiK3943R3nfu7yvbqgFHwfgM0bsAvN5uc0E0LIqFBI0XKNhUT7CwymwRjgAVi0+JiDFhx29spPd5Rn2tc1IE2z98Xgv9L+OBJ+/PtPffFDH4MHAG9/67Fv+7tjPZuS2Cho5gkGhAkYmvX//Tu3u8FHyATgJ7J66NIjFy058vMXKt+tAE41Ckt+YGcsK/uAdB1vr/O/+JVPn8eY5xgBwZt/yjSvOIonCCGFQyHFBBhcWnAARoEJR8uYO36nY59YoQwEg8cAgShKfN+d7EMdJzv1uACEAkQMqZUxylUOBAc8JpqroLkOHIZItvFyHq+AA4AxMgmZW4JxGeO+o7XWnKPiB/ZNDDbhFQBxte4FJTtENorgcIhBp5eiCkJIseT1Bp83nAkOAy687BKj2QU48xdPAACH68FzwKRGIiC4cO1wFtu/lDWq+MEZg10trLE5jzgYF65j15JlWjfmILENN7YxJ1Ot4VVKQKPHru82Z8/sr7uazCMnhJDJQCHFhBs0zREfPHRwpK56eShzGDSzBaUdI+oyA52NmQDdP7qBZ/7NKw0GgBsYiMYcE7r5iuFQjak3dX86ZXMlucbXlZXv74IQQgaikGKSGAAmO81zuhWZ/om8/6UBoUabhhd2ugkN7QIMnGuh0ZjNqfkGw/vXFM2OoshfYZoNDXV6qjRvbLJBg62wEFAwzU2Dg0aDGNAMXh6/BEII2QW6qU2iNg0MximtgRgcnrJG9ipC5UTKDD2JDOnas5lwMJ1xY+hK9e0+woUQQnYP1VJMEpYWOel0WI3VzLMNIc2HWga7VngrPhjIlOps0KeP42+iGUcYcAYH4CZTsPLGhxiAaQg+eOfRf3x7BWLcLmhufzGAYDDNecUbk1UAjUXrGdCMQTIBB7NjY4oSYxFCSIpCikmXrnPdCC84mB78hvxozjCRzjSRFqyN1dPsu3SBi9Bm9ARkA7jm2uXD9Mcs7DdBCJnmKKSYcMMXIGzkt+RwasX+gGLAIqsDUpntoplHwxw5G+Hn7PupPyYhZNqgW9yUylWFBCGEELILFFIQQgghpAUopCCEEEJIC1BIQQghhJAWoJCCFAfnlJ9JLhmTw17ZZHobNtOOOOKjVCoBiON4Ao9oqhljlFKMTWknyYn/cC2V67gAtNLgjIGpJGHjuIUN2JOp/g8aRVrG/LFGvOJbhNN4j9YaAOdca23/HeOH5UOlUjHGJEkyxVl3ImmthRCe5xX1JKbK5TLn3BhjA+I4jj3Pm+qDapm+vr6Ojg40r00hRIEzLQCbOtcdsGCTsfQw9z7G8/dtMMaUUpzzYU/liCFFd3e3EEJKieJG0FJKrTVjTIgRy60xp32Y6RV3hU38mFHuCC64ALNpMUoL18Vw+XuURkziKJLOx/yxo6p4iKLI930bSXieZ/N6USsturu7XddNkqSoFyaAJEmklAVOIJqZNo5jpRpxuZJqUBSV9wK4o6MjSRLXddOwyV6kU31cE8Wer3q9bk9udmNhmgTSQtNxhokfRgwphBBKKRsv5z1bj8R1Xc/zlFJRFE31sUwYzgD09VUVjFQyCSM38GEa23fPwD3FMD+NeudW8TxPSWWMEULU63XGWMGe9rIcx7GpK+qFiea1mSTJoIrSIgUZtsiJoohzbqMKW99WsBLXPrLbvNrX1wcgjuNBz/GFwRhjjNkHm3Rj41luuKybx0uYc14KSkmSpKFw1oghhc3WWutbbrmlSJdxVhAE9ktxHOfWW28d9j1jT/vYbgfcTGy9rud5fdU+13UAuI77q1//2vNco8146pMHNnDoEbYPbyJqKXzfD8MQAOc8SRIhxO23384YK2qkaKscjTE333zzVB/LRLGxPgDXdbPJLNK9yPO8Wq0mhNBau677y1/+Mm37SN+TxyInyzZgaa3tiXNd9/bbb3ccp16vT/WhTQjHcYwxjLFbbrklPXcFCymCIKiHI54+1t3dPewL11577YoVK1D07hRo1seM9GSQ95BCwXDAcVwpEw14jqukNDCu2wiiG618Q5JpW/5M/woWQLPlb8ARZ2YTTxtEGmkauIw7s2t3vtLXaQ9krN+KfTKw59HzvCiKilT2ZNnHICFEkiRTfSwTizHmOE6SJEMf+IrBnkHbhmW32GycfU/eayzSpPm+H0WR53m2uXlqj2pCTVovLtaURmyTs699pFFKnXHGGZdffvmgV52urq5hd3Mc58QTT2SMlcvlokYVnudt3Lhx69atHR0dixYtGvY9Y+9LMbZbAJvgdSk9z61Va1u3bt327LO+7y9auJALEUWR4BzNGLnxb6YphLHGq5wxxpjS2kYe9tVdhxTpvnb3QfvuOqTgmX0bxzOK79Petjjnjz322M6dO33fX7JkSRRFRa1cfeKJJzZv3jxr1qyFCxdO9bFMFMbYxo0bt23bVqlUFi9enG4vUkhRKpVqtdrWrVufffbZUql08MEHp/VtqTw+xQ5SKpWiKNqyZcumTZvK5fKyZcviON5F97Vce/LJJzdv3jxz5sxFixZlz91I53H38vOgv7yLWpDW7mv5vm+M6enpqVQqQ+MHNmxzCADO+c6dO2fNmlXg3jRKKuGI7u7urq6ulp3y9uueCc60VLVqtdLRwdI1QTPLXI3IAMY0FlEdW7KMhklrOPqX5RzdvrbqJD36V9whPXdRFNVqtVmzZimpuChmpgXAGEs70hfb0GQWKaSA7TwvVUWamCYAAAJTSURBVLVW7ejosLdZJQfckPM4ImAQo41whJJq58s7586dazcOSmZhcMH7+vo6Oztt88fEfVAaCowmcGnhvlYYhnEcd3V1Da2PcXYRLtiXOOdFPf22M1QURVEUBUEw1YczgTjnXHAbT4S1elAuNV4w6QingSNDs1ltSFvgrgeR2lqKdGdbQZHWUuy6L0V23zFlca210cb3/Ub/ryQORKBVMetXbRxcLpcL8Ag7Epu0arUqhLAD2ouKCz7SeLy8s7WNhhlkRnrbB7n01+KpVqudnZ0TfULTCob018nZF4DWOgiCtPvaoFdH7J5pB77bn0dz+kd6ehj94SqplFaj76U//k+0f8T3/XS0zzj/GvDKT+P2+Z0xNEvPCa6nMAbagDOttO3c4Pv+gE9kjGWTmf6QCSP620eGfhts+BEfNv/YTnbCEaOvpMiEL2OIoDnntjrDjmsKgoAxtut8u3v5J7uXVlo4wnZfz+71ipfr+J8SKpXKZNYd2qDTlhCT9qEAgiAYFOtP9JPfZCYz/Tg7Ks9utJk2zUITlH/swM4x1UDv9v02fYO9NkdZfTjONNrAZTeGfY3/u92Np9Oh3+1oPjHtDKGU2o1G3t3O59nm8qEKWzlMCCGEkMlEIQUhhBBCWoBCCkIIIYS0wIh9Kcg0UsSuYRNkQAsrb7QpDmpWLGRXOzKZKAuRSZDtKjemvQZ18MyiWgpCCCGEtACFFIQQQghpAQopCCGEENICFFIQQgghpAUopCCEEEJIC1BIQQghhJAWoJCCEEIIIS1AIQUhhBBCWuB/AMMpBD5Pa9tPAAAAAElFTkSuQmCC"},871:function(t,s,a){t.exports=a.p+"assets/img/4.cd0d1855.jpg"},872:function(t,s){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/6.9d44eeb3.js b/learning/.vuepress/dist/assets/js/6.9d44eeb3.js deleted file mode 100644 index a75afe7f..00000000 --- a/learning/.vuepress/dist/assets/js/6.9d44eeb3.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{1040:function(t,e,a){"use strict";a.r(e);a(50);var r=a(380),n=a(381),s=a(376),o=a(372),i=a(363),c=a(361),u={mixins:[o.a,c.a],components:{Common:r.a,NoteAbstract:s.a,TagList:n.a,ModuleTransition:i.a},data:function(){return{tags:[],currentTag:"全部",currentPage:1,allTagName:"全部"}},created:function(){this.$tags.list.length>0&&(this.currentTag=this.$route.query.tag?this.$route.query.tag:this.currentTag)},mounted:function(){this._setPage(this._getStoragePage())},methods:{tagClick:function(t){this.$router.push({path:t.path})},getCurrentTag:function(t){this.$emit("currentTag",t)},getCurrentPage:function(t){this._setPage(t),setTimeout((function(){window.scrollTo(0,0)}),100)},_setPage:function(t){this.currentPage=t,this.$page.currentPage=t,this._setStoragePage(t)}}},f=(a(406),a(407),a(455),a(3)),g=Object(f.a)(u,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("Common",{staticClass:"tags-wrapper",attrs:{sidebar:!1}},[a("ModuleTransition",[a("TagList",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],attrs:{currentTag:t.currentTag},on:{getCurrentTag:t.tagClick}})],1),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.08"}},[a("note-abstract",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"list",attrs:{data:t.$recoPosts,currentPage:t.currentPage,currentTag:t.currentTag},on:{currentTag:t.getCurrentTag}})],1),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.16"}},[a("pagation",{staticClass:"pagation",attrs:{total:t.$recoPosts.length,currentPage:t.currentPage},on:{getCurrentPage:t.getCurrentPage}})],1)],1)}),[],!1,null,"31ab3906",null);e.default=g.exports},357:function(t,e,a){},358:function(t,e,a){},359:function(t,e,a){},360:function(t,e,a){},362:function(t,e,a){"use strict";function r(){var t=["#e15b64","#f47e60","#f8b26a","#abbd81","#849b87","#e15b64","#f47e60","#f8b26a","#f26d6d","#67cc86","#fb9b5f","#3498db"];return t[Math.floor(Math.random()*t.length)]}a.d(e,"a",(function(){return r}))},364:function(t,e,a){"use strict";a(366),a(25),a(368),a(26),a(30);var r=a(49),n={props:{pageInfo:{type:Object,default:function(){return{}}},currentTag:{type:String,default:""},showAccessNumber:{type:Boolean,default:!1}},data:function(){return{numStyle:{fontSize:".9rem",fontWeight:"normal",color:"#999"}}},filters:{formatDateValue:function(t){if(!t)return"";t=t.replace("T"," ").slice(0,t.lastIndexOf("."));var e=Number(t.substr(11,2)),a=Number(t.substr(14,2)),n=Number(t.substr(17,2));return e>0||a>0||n>0?Object(r.d)(t):Object(r.d)(t,"yyyy-MM-dd")}},methods:{goTags:function(t){this.$router.push({path:"/tags/".concat(t,"/")})}}},s=(a(369),a(3)),o=Object(s.a)(n,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[t.pageInfo.frontmatter.author||t.$themeConfig.author||t.$site.title?a("i",{staticClass:"iconfont reco-account"},[a("span",[t._v(t._s(t.pageInfo.frontmatter.author||t.$themeConfig.author||t.$site.title))])]):t._e(),t._v(" "),t.pageInfo.frontmatter.date?a("i",{staticClass:"iconfont reco-date"},[a("span",[t._v(t._s(t._f("formatDateValue")(t.pageInfo.frontmatter.date)))])]):t._e(),t._v(" "),!0===t.showAccessNumber?a("i",{staticClass:"iconfont reco-eye"},[a("AccessNumber",{attrs:{idVal:t.pageInfo.path,numStyle:t.numStyle}})],1):t._e(),t._v(" "),t.pageInfo.frontmatter.tags?a("i",{staticClass:"iconfont reco-tag tags"},t._l(t.pageInfo.frontmatter.tags,(function(e,r){return a("span",{key:r,staticClass:"tag-item",class:{active:t.currentTag==e},on:{click:function(a){return t.goTags(e)}}},[t._v("\n "+t._s(e)+"\n ")])})),0):t._e()])}),[],!1,null,"484a899e",null);e.a=o.exports},366:function(t,e,a){var r=a(0),n=a(367);r({target:"Array",proto:!0,forced:n!==[].lastIndexOf},{lastIndexOf:n})},367:function(t,e,a){"use strict";var r=a(16),n=a(31),s=a(11),o=a(27),i=a(20),c=Math.min,u=[].lastIndexOf,f=!!u&&1/[1].lastIndexOf(1,-0)<0,g=o("lastIndexOf"),l=i("indexOf",{ACCESSORS:!0,1:0}),p=f||!g||!l;t.exports=p?function(t){if(f)return u.apply(this,arguments)||0;var e=r(this),a=s(e.length),o=a-1;for(arguments.length>1&&(o=c(o,n(arguments[1]))),o<0&&(o=a+o);o>=0;o--)if(o in e&&e[o]===t)return o||0;return-1}:u},368:function(t,e,a){"use strict";var r=a(7),n=a(4),s=a(107),o=a(21),i=a(5),c=a(34),u=a(177),f=a(35),g=a(1),l=a(52),p=a(51).f,h=a(33).f,m=a(8).f,d=a(378).trim,v=n.Number,_=v.prototype,b="Number"==c(l(_)),I=function(t){var e,a,r,n,s,o,i,c,u=f(t,!1);if("string"==typeof u&&u.length>2)if(43===(e=(u=d(u)).charCodeAt(0))||45===e){if(88===(a=u.charCodeAt(2))||120===a)return NaN}else if(48===e){switch(u.charCodeAt(1)){case 66:case 98:r=2,n=49;break;case 79:case 111:r=8,n=55;break;default:return+u}for(o=(s=u.slice(2)).length,i=0;in)return NaN;return parseInt(s,r)}return+u};if(s("Number",!v(" 0o1")||!v("0b1")||v("+0x1"))){for(var T,C=function(t){var e=arguments.length<1?0:t,a=this;return a instanceof C&&(b?g((function(){_.valueOf.call(a)})):"Number"!=c(a))?u(new v(I(e)),a,C):I(e)},N=r?p(v):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),P=0;N.length>P;P++)i(v,T=N[P])&&!i(C,T)&&m(C,T,h(v,T));C.prototype=_,_.constructor=C,o(n,"Number",C)}},369:function(t,e,a){"use strict";var r=a(357);a.n(r).a},370:function(t,e,a){"use strict";var r=a(358);a.n(r).a},371:function(t,e,a){"use strict";var r=a(359);a.n(r).a},372:function(t,e,a){"use strict";a(377);e.a={methods:{_getStoragePage:function(){var t=window.location.pathname,e=JSON.parse(sessionStorage.getItem("currentPage"));return null===e||t!==e.path?(sessionStorage.setItem("currentPage",{page:1,path:""}),1):parseInt(e.page)},_setStoragePage:function(t){var e=window.location.pathname;sessionStorage.setItem("currentPage",JSON.stringify({page:t,path:e}))}}}},374:function(t,e,a){},375:function(t,e,a){},376:function(t,e,a){"use strict";a(25);var r={components:{PageInfo:a(364).a},props:["item","currentPage","currentTag"]},n=(a(370),a(3)),s={components:{NoteAbstractItem:Object(n.a)(r,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"abstract-item"},[t.item.frontmatter.sticky?a("i",{staticClass:"iconfont reco-sticky"}):t._e(),t._v(" "),a("div",{staticClass:"title"},[t.item.frontmatter.keys?a("i",{staticClass:"iconfont reco-lock"}):t._e(),t._v(" "),a("router-link",{attrs:{to:t.item.path}},[t._v(t._s(t.item.title))])],1),t._v(" "),a("div",{staticClass:"abstract",domProps:{innerHTML:t._s(t.item.excerpt)}}),t._v(" "),a("hr",{staticClass:"hr"}),t._v(" "),a("PageInfo",{attrs:{pageInfo:t.item,currentTag:t.currentTag}})],1)}),[],!1,null,"28f76ce9",null).exports},props:["data","currentPage","currentTag"],computed:{currentPageData:function(){var t=10*this.currentPage-10,e=10*this.currentPage;return this.data.slice(t,e)}}},o=(a(371),Object(n.a)(s,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"abstract-wrapper"},t._l(t.currentPageData,(function(e){return a("NoteAbstractItem",{key:e.path,attrs:{item:e,currentPage:t.currentPage,currentTag:t.currentTag}})})),1)}),[],!1,null,"b014bc36",null));e.a=o.exports},379:function(t,e,a){"use strict";var r=a(360);a.n(r).a},381:function(t,e,a){"use strict";a(106);var r=a(22),n=a(362),s={props:{currentTag:{type:String,default:""}},computed:{tags:function(){return[{name:"全部",path:"/tag/"}].concat(Object(r.a)(this.$tags.list))}},methods:{tagClick:function(t){this.$emit("getCurrentTag",t)},getOneColor:n.a}},o=(a(379),a(3)),i=Object(o.a)(s,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"tags"},t._l(t.tags,(function(e,r){return a("span",{key:r,class:{active:e.name==t.currentTag},style:{backgroundColor:t.getOneColor()},on:{click:function(a){return t.tagClick(e)}}},[t._v(t._s(e.name))])})),0)}),[],!1,null,"36b9f66a",null);e.a=i.exports},406:function(t,e,a){"use strict";var r=a(374);a.n(r).a},407:function(t,e,a){"use strict";var r=a(375);a.n(r).a},409:function(t,e,a){},455:function(t,e,a){"use strict";var r=a(409);a.n(r).a}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/60.6a556d9b.js b/learning/.vuepress/dist/assets/js/60.6a556d9b.js deleted file mode 100644 index 9f5f9a3a..00000000 --- a/learning/.vuepress/dist/assets/js/60.6a556d9b.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{1130:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("上一篇是为大家分享了一道打着“脑筋急转弯”tag的题目,然后我顺便就把这个类型的题目全部筛选出来看了看,发现总共没几个,所以就想的干脆一次全部讲完吧。")])]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(873),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("这个类型的题目,其实除了废话多一点,好像没什么特别的。")])]),t._v(" "),n("br"),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第292题:Nim 游戏")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人,每一步都是最优解。编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: 4\n输出: false \n解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;\n 因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br")])]),n("br"),t._v(" "),n("p",[t._v("PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没什么意思了。")]),t._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),n("blockquote",[n("p",[t._v("这种问题,如果没有思路,可以先自己找个纸写写画画,找找规律")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("首先如果石头数小于4个,那么因为你是先手,一把拿走,肯定会赢。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(874),alt:"PNG"}}),t._v(" "),n("p",[t._v("而如果石头是4个,那不管你是拿了1,2,3个,最后一个都可以被你的对手拿走,所以怎么样都赢不了。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(875),alt:"PNG"}}),t._v(" "),n("p",[t._v("再继续分析到8个石头:对于5,6,7而言,你只需要对应的拿走1,2,3,然后留下4个,则对方必输。但是如果你要面对的是8,不管先拿(1,2,3)个,另一个人都可以通过 8-(1,2,3) ,使得你面对4个石头,则你必输无疑。通过观察,我们发现,好像是"),n("strong",[t._v("只要N是4的倍数,我们就必输无疑")]),t._v("。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(876),alt:"PNG"}}),t._v(" "),n("p",[t._v("尝试性的写下代码:(这个,什么语言都无所谓吧....)")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//go")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("canWinNim")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(877),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、证明过程"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、证明过程"}},[t._v("#")]),t._v(" 03、证明过程")]),t._v(" "),n("blockquote",[n("p",[t._v("脑筋急转弯的题目不是很多见,但是某些公司的某些人却钟情于此,如果是本着考察对方的思维能力,那我觉得还是挺好的。但若是为了寻找作为面试官的一丝丝优越感,那就只能是。。呵,打扰了。。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("首先需要说下的是,这个问题属于"),n("strong",[t._v("博弈论")]),t._v("。NIM的意思就是“尼姆”,并不是什么高大上的英文缩写。所以,NIM游戏一般也称之为尼姆游戏。说白了,就是"),n("strong",[t._v("设置两个对手,通过回合制的方式来玩的一种数学战略游戏,"),n("strong",[t._v("在早期网络不发达的时候很火。毕竟那时候连梦幻都没有,更别说王者。(非戏说,很多回合制游戏,其实本质就是数学游戏。而对于王者这种多人实时竞技游戏更是如此,如果想玩好,数学学不好,基本就凉凉。有兴趣的,可以了解一下")]),t._v("游戏平衡师")]),t._v(")")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("回到本题,假若对于先手有N个石头,那么后手的可能性有N-1,N-2,N-3三种。"),n("strong",[t._v("只有当后手的这三种可能性都必胜时,N才会必败")]),t._v("。因为题目说了,我们都是聪明人(一般博弈论的问题都会有这句话),那如果后手的三种可能性中,有哪一种必败,作为先手,我们一定会走出这种可能性。那这种可能性是什么,其实就是让对方去面对4的倍数。如果先手我们遇到一个不是4的倍数的值x,有:")]),t._v(" "),n("center",[t._v("4k > N > 4(k-1)")]),t._v(" "),n("p",[t._v("N一定处于两个4的倍数之间,因为N本身不是4的倍数,那N距离最近的4的倍数的值最大为3。所以,只要我们不是面对4的倍数,作为先手,我们一定可以取走(12,3),使剩余的值变成4的倍数,则后手必输无疑。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])],1)}),[],!1,null,null,null);s.default=e.exports},873:function(t,s,a){t.exports=a.p+"assets/img/1.d68e1fd6.jpg"},874:function(t,s,a){t.exports=a.p+"assets/img/2.15ab51a5.jpg"},875:function(t,s,a){t.exports=a.p+"assets/img/3.8ad59b24.jpg"},876:function(t,s,a){t.exports=a.p+"assets/img/4.3c3af4f3.jpg"},877:function(t,s,a){t.exports=a.p+"assets/img/5.33763b0a.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/61.21073b19.js b/learning/.vuepress/dist/assets/js/61.21073b19.js deleted file mode 100644 index 1e9c12d1..00000000 --- a/learning/.vuepress/dist/assets/js/61.21073b19.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{1131:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天给大家分享一道美团面试题。话不多说,直接看题。")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v('这个题目的变形很多,比如找 "前 K 个高频元素"、 "数据流中的第K大元素" 、"最接近原点的 K 个值" 等等等等。')])]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第215题:第K个最大元素")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [3,2,1,5,6,4] 和 k = 2\n输出: 5\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [3,2,3,1,2,4,5,5,6] 和 k = 4\n输出: 4\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[n("strong",[t._v("说明:")])]),t._v(" "),n("p",[t._v("你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。")]),t._v(" "),n("br"),t._v(" "),n("h2",{attrs:{id:"_02、大顶堆"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、大顶堆"}},[t._v("#")]),t._v(" 02、大顶堆")]),t._v(" "),n("blockquote",[n("p",[t._v("堆在算法题目中的应用主要包括以下几点:")]),t._v(" "),n("ul",[n("li",[t._v("TopK 问题 (尤其是大数据处理)")]),t._v(" "),n("li",[t._v("优先队列")]),t._v(" "),n("li",[t._v("利用堆求中位数")])])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("这种题目,从个人来讲,我一般是比较偏好使用堆来做的。毕竟大小顶堆,刚好有着与本类题型契合的特性。如果对堆不太熟悉的话,可以先看下这篇文章:")]),t._v(" "),n("p",[t._v("那本题如何使用堆来做呢?假若我们的数组为[3,2,1,5,6,4],k=2,我们对其构造一个小顶堆(每个结点的值均不大于其左右孩子结点的值,堆顶元素为整个堆的最小值),整个过程是这样:")]),t._v(" "),n("br"),t._v(" "),n("ul",[n("li",[n("p",[t._v("构造一个小顶堆,依次将元素放入堆中,并保证堆中元素为k。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(878),alt:"PNG"}})]),t._v(" "),n("li",[n("p",[t._v("如果当前元素小于堆顶元素,那基本就不用看了(因为我们要找的是 排序后的第 k 个最大的元素)")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(879),alt:"PNG"}})]),t._v(" "),n("li",[n("p",[t._v("自然,如果我们遇到比堆顶元素大的元素,就把它放入到堆中。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(880),alt:"PNG"}})]),t._v(" "),n("li",[n("p",[t._v("重复上面的步骤:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(881),alt:"PNG"}})])]),t._v(" "),n("p",[t._v("然后根据分析,完成代码(今天就不手撕堆了,因为之前已经手撕过了。同时这里给大家一个建议,如果面试的时候,遇到这种TOPK的问题,"),n("strong",[t._v("假如特别有把握,肯定得手撕数据结构,一定会加分")]),t._v("。但是如果没有把握,那就先用API实现,以 BugFree 为目标吧!)")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findKthLargest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PriorityQueue")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Integer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" minQueue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PriorityQueue")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" num "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("minQueue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" num "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" minQueue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("peek")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n minQueue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("offer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("num"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("minQueue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n minQueue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("poll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" minQueue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("peek")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br")])]),n("p",[t._v("我也不知道为啥,Python永远就是这么牛X,朴实无华且枯燥!")]),t._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("//")]),t._v("python\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findKthLargest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("self"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" List"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" heapq"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nlargest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# [6,5]")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br")])]),n("p",[t._v("**注:**python可以使用heapq.nlargest 或 heapq.nsmallest,来找出某个集合中找出最大或最小的N个元素。")]),t._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("//")]),t._v("python\n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" heapq\n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("23")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("18")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("23")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("37")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("heapq"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nlargest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("37")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("23")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("heapq"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nsmallest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br")])]),n("h2",{attrs:{id:"_03、快排"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、快排"}},[t._v("#")]),t._v(" 03、快排")]),t._v(" "),n("blockquote",[n("p",[t._v("快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("那对于本题,我们就是使用快排的思想,选定一个基准值,把比基准值大的放在基准值的右边,把基准值小的放在基准值的左边。若基准值刚好位于倒数第k个数,则基准值为目标值;反之,则递归处理目标值所处的那一部分数组。")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findKthLargest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n idx "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("idx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pos "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n povit_idx "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" pos "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" povit_idx "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" povit_idx\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" pos "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" povit_idx "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("povit_idx "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pos"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" povit_idx "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pos"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("partition")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" r "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n s "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" l\n povit_value "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" r "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" r "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" povit_value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n r"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" r "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" povit_value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n l"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" r "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("^")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("^")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("^")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("l"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" povit_value\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" l\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{attrs:{src:a(882),alt:"PNG"}}),t._v(" "),n("p",[t._v("整个快排的核心,其实就partition。partition 有 单向扫描,双向扫描 等多种写法。上面的代码,大家可以参考参考,看不懂也没关系,我后面是会单独安排一个快排的系列篇来进行讲解的,到时候一堆图解砸进来,保准你看的醍醐灌顶!")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])])}),[],!1,null,null,null);s.default=r.exports},878:function(t,s,a){t.exports=a.p+"assets/img/1.f9b4ce18.jpg"},879:function(t,s,a){t.exports=a.p+"assets/img/2.1d7ed267.jpg"},880:function(t,s,a){t.exports=a.p+"assets/img/3.1a17ae06.jpg"},881:function(t,s,a){t.exports=a.p+"assets/img/4.655c9c55.jpg"},882:function(t,s,a){t.exports=a.p+"assets/img/5.ccd57a30.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/62.e08e9348.js b/learning/.vuepress/dist/assets/js/62.e08e9348.js deleted file mode 100644 index f3b3b5f7..00000000 --- a/learning/.vuepress/dist/assets/js/62.e08e9348.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{1139:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天给大家分享一道很魔性的题目(很多槽点),也是一道入门级别的贪心算法题目。")])]),s._v(" "),n("h2",{attrs:{id:"_01、分发饼干"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、分发饼干"}},[s._v("#")]),s._v(" 01、分发饼干")]),s._v(" "),n("blockquote",[n("p",[s._v("贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。")])]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("问题:分发饼干")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("假设你是一位很棒(多棒???)的家长,想要给你的孩子们一些小饼干(不能给大饼干吗???)但是,每个孩子最多只能给一块饼干(有毒吧。。。)")])])])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("注意:你可以假设胃口值为正(特么不正难道往外吐吗???)。一个小朋友最多只能拥有一块饼干。")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例 :")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: [1,2,3], [1,1] \n输出: 1 \n\n解释: \n你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。\n虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。\n所以你应该输出1。 \n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br")])]),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(947),alt:"PNG"}}),s._v(" "),n("center",[s._v("(难道剩下一个饼干喂狗吗?????)")]),s._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[s._v("#")]),s._v(" 02、题解分析")]),s._v(" "),n("blockquote",[n("p",[s._v("好吧。假如我们按照题目所说的策略来分析,尽可能的让孩纸满足,满足不了就一个饼干都不给他,忘掉那些懵逼的孩子。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("其实策略就很简单了:"),n("strong",[s._v("我们只需要在满足孩子胃口的前提下,尽可能分配小的饼干给到他")]),s._v("。典型的资本主义。")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(948),alt:"PNG"}}),s._v(" "),n("p",[s._v("具体怎么做呢,我们把饼干和小朋友都按照"),n("strong",[s._v("从大到小")]),s._v("排列。")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(949),alt:"PNG"}}),s._v(" "),n("ul",[n("li",[n("p",[s._v("如果最大的饼干可以满足肚子最大的孩子,那就给他吃,同时比较下一个。")])]),s._v(" "),n("li",[n("p",[s._v("如果最大的饼干不能满足肚子最大的孩子,"),n("strong",[s._v("那就让他饿着")]),s._v(",然后看看能不能满足第二个孩子。(有点黑暗系,"),n("strong",[s._v("放弃小朋友")]),s._v(")")])])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("但是这里有个问题。凭什么就要先满足肚子最大的孩子。按道理讲,肚子越大应该越扛饿才对吧。所以我们换种思路,从"),n("strong",[s._v("肚子最小的孩子")]),s._v("开始。")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(950),alt:"PNG"}}),s._v(" "),n("ul",[n("li",[n("p",[s._v("如果最小的饼干可以满足肚子最小的孩子,那就给他吃,同时比较下一个。")])]),s._v(" "),n("li",[n("p",[s._v("如果最小的饼干不能满足肚子最小的孩子,"),n("strong",[s._v("那就扔掉饼干")]),s._v(",看看下一个饼干能不能给他吃。("),n("strong",[s._v("放弃的是饼干")]),s._v(")")])])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("那这两种其实都算是贪心:")]),s._v(" "),n("ul",[n("li",[s._v("一种是胃口太大轮到下一个孩子")]),s._v(" "),n("li",[s._v("一种是饼干太小轮到下一个饼干")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("因为要同时控制饼干和小孩,所以我们采用双指针。这里给出先满足小肚子孩子的代码:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("findContentChildren")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" size"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("grid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" size "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sort")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("size"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" gi "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" si "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("gi "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" si "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" size"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("grid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("gi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" size"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("si"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n gi"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n si"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" gi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br")])]),n("p",[s._v("如果想先满足大肚子,代码也大同小异。直接从尾部向前遍历即可。执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(951),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_03、一点分享"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、一点分享"}},[s._v("#")]),s._v(" 03、一点分享")]),s._v(" "),n("blockquote",[n("p",[s._v("前阵子状态很差,这两天逐步调整过来啦,多谢大家的关心。后面的内容我会换一个策略,提前拟定好目录以及学习纲领,更系统的来分享题解,希望大家继续支持!")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("我们遇到什么困难也不要怕,微笑着面对它!消除恐惧的最好办法就是面对恐惧!坚持,才是胜利。加油!奥利给!")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("今天的题目到这里就结束了,你学会了吗?快来评论区留下你的想法吧!")])],1)}),[],!1,null,null,null);t.default=r.exports},947:function(s,t,a){s.exports=a.p+"assets/img/1.5118c910.gif"},948:function(s,t,a){s.exports=a.p+"assets/img/2.a9aa4801.jpg"},949:function(s,t,a){s.exports=a.p+"assets/img/3.9a946a0e.jpg"},950:function(s,t,a){s.exports=a.p+"assets/img/4.c40e03a7.jpg"},951:function(s,t,a){s.exports=a.p+"assets/img/5.6e74812c.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/63.f8abca53.js b/learning/.vuepress/dist/assets/js/63.f8abca53.js deleted file mode 100644 index 518a4162..00000000 --- a/learning/.vuepress/dist/assets/js/63.f8abca53.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{1037:function(e,t,n){"use strict";n.r(t);var o=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],r={computed:{noFoundPageByTencent:function(){return!1!==this.$themeConfig.noFoundPageByTencent}},mounted:function(){if(this.noFoundPageByTencent){var e=document.createElement("script");e.setAttribute("homePageName","回到首页"),e.setAttribute("homePageUrl","/"),e.setAttribute("src","//qzonestyle.gtimg.cn/qzone/hybrid/app/404/search_children.js"),document.body.append(e)}},methods:{getMsg:function(){return o[Math.floor(Math.random()*o.length)]}}},s=(n(365),n(421),n(3)),c=Object(s.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.noFoundPageByTencent?e._e():n("section",{staticClass:"theme-container"},[n("article",{staticClass:"content"},[n("h1",[e._v("404")]),e._v(" "),n("blockquote",[e._v(e._s(e.getMsg()))]),e._v(" "),n("router-link",{attrs:{to:"/"}},[e._v("Take me home.")])],1)])}),[],!1,null,null,null);t.default=c.exports},356:function(e,t,n){},365:function(e,t,n){"use strict";var o=n(356);n.n(o).a},382:function(e,t,n){},421:function(e,t,n){"use strict";var o=n(382);n.n(o).a}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/64.1728ce32.js b/learning/.vuepress/dist/assets/js/64.1728ce32.js deleted file mode 100644 index d4214ef5..00000000 --- a/learning/.vuepress/dist/assets/js/64.1728ce32.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{1041:function(e,t,a){"use strict";a.r(t);a(106),a(178),a(179),a(76),a(26),a(30),a(180);var n=a(380),o=a(363),s={mixins:[a(361).a],name:"TimeLine",components:{Common:n.a,ModuleTransition:o.a},filters:{dateFormat:function(e,t){e=function(e){var t=new Date(e).toJSON();return new Date(+new Date(t)+288e5).toISOString().replace(/T/g," ").replace(/\.[\d]{3}Z/,"").replace(/-/g,"/")}(e);var a=new Date(e),n=a.getMonth()+1,o=a.getDate();return"".concat(n,"-").concat(o)}},methods:{go:function(e){this.$router.push({path:e})}}},r=(a(365),a(456),a(3)),i=Object(r.a)(s,(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("Common",{staticClass:"timeline-wrapper",attrs:{sidebar:!1}},[a("ul",{staticClass:"timeline-content"},[a("ModuleTransition",[a("li",{directives:[{name:"show",rawName:"v-show",value:e.recoShowModule,expression:"recoShowModule"}],staticClass:"desc"},[e._v("Yesterday Once More!")])]),e._v(" "),e._l(e.$recoPostsForTimeline,(function(t,n){return a("ModuleTransition",{key:n,attrs:{delay:String(.08*(n+1))}},[a("li",{directives:[{name:"show",rawName:"v-show",value:e.recoShowModule,expression:"recoShowModule"}]},[a("h3",{staticClass:"year"},[e._v(e._s(t.year))]),e._v(" "),a("ul",{staticClass:"year-wrapper"},e._l(t.data,(function(t,n){return a("li",{key:n},[a("span",{staticClass:"date"},[e._v(e._s(e._f("dateFormat")(t.frontmatter.date)))]),e._v(" "),a("span",{staticClass:"title",on:{click:function(a){return e.go(t.path)}}},[e._v(e._s(t.title))])])})),0)])])}))],2)])}),[],!1,null,"8590c612",null);t.default=i.exports},356:function(e,t,a){},365:function(e,t,a){"use strict";var n=a(356);a.n(n).a},410:function(e,t,a){},456:function(e,t,a){"use strict";var n=a(410);a.n(n).a}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/65.91695191.js b/learning/.vuepress/dist/assets/js/65.91695191.js deleted file mode 100644 index 2efebf6c..00000000 --- a/learning/.vuepress/dist/assets/js/65.91695191.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{1042:function(t,_,v){"use strict";v.r(_);var a=v(3),r=Object(a.a)({},(function(){var t=this,_=t.$createElement,a=t._self._c||_;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("blockquote",[a("p",[t._v("**今天是小浩算法“365刷题计划” - 刷题指导篇(小白篇)。**三年高考,五年刷题。leetcode不算从其他各处收录的题目,单就自己的题库,总共有1600+,如果按照每天刷一道的话,总共需要5年。那我们真的需要把这些题目全部刷完吗?如果不是,刷多少合适?又该怎么刷呢?本文我尽量言简意赅,直击大家的疑惑。(本文适合算法初学者)")])]),t._v(" "),a("h2",{attrs:{id:"_01、刷多少题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、刷多少题"}},[t._v("#")]),t._v(" 01、刷多少题")]),t._v(" "),a("blockquote",[a("p",[t._v("不下百人问过我这个问题。我的建议是,对于大部分的人,200道是一个合适的数字。")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("估计到这里,有人会喷我。你不设前提,不谈目的,直接就说200道,这不是扯淡吗。我想说的是,这不是扯淡。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("前面我已经说了,"),a("strong",[t._v("对于大部分人")]),t._v(",我的建议是200道。大部分人指的是什么呢?我这里统指"),a("strong",[t._v("没有系统刷题经验的同学")]),t._v("。无论是工作3-5年的职场老司机,还是即将毕业的应届生,只要没怎么刷过题,通通归为此类。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("对于上面这个群体(请先自行判断是否可以归为此类),"),a("strong",[t._v("刷题的目的基本是为了面试")]),t._v("。不管我多么巧舌如簧,告诉你算法可以提高思维,增强逻辑,是成为top coder的必然条件,等等等等。但最终都还是会回归到这个目的:"),a("strong",[t._v("面试")]),t._v("。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:v(457),alt:"PNG"}}),t._v(" "),a("p",[t._v("所以现在我们换掉问题:"),a("strong",[t._v("没什么刷题经验的同学为了面试需要刷多少道题")]),t._v("?我的答案是:200道。")]),t._v(" "),a("h2",{attrs:{id:"_02、为什么是200"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、为什么是200"}},[t._v("#")]),t._v(" 02、为什么是200")]),t._v(" "),a("blockquote",[a("p",[t._v("这个问题,不妨换做 ”刷完200道题可以掌握到什么程度?“")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("常见tag无外乎那么七八种,200道题听起来很多,但是分散到每一个tag,每种也就只包含二三十个。倘若我们算多点,每一个tag包含30道题,其中大概是15-20道easy,5-10道medium,2-3道hard。200道不多不少,基本可以完美覆盖整个算法体系,所以我认为200道是一个不错的数字。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("那么回到问题 “刷完200道题可以掌握到什么程度?” 我当然可以给你一些信心,告诉你200道题可以让你吊打面试官,完虐BAT。但是呢,"),a("strong",[t._v("其实这都是骗小孩子的,或者就是骗 ¥")]),t._v("。那真实的200道题能让你到达一个什么程度呢?")]),t._v(" "),a("br"),t._v(" "),a("ul",[a("li",[t._v("在算法方面超过大概80%的同行(这里单指基础算法,非ML、AI等)")]),t._v(" "),a("li",[t._v("在面试时不至于对方拿出一道题目整个人就陷入懵逼,而是有资格享受面试思考题目的过程")]),t._v(" "),a("li",[t._v("身边有朋友聊到算法敢过去和他们交流,而不是默默的走开")]),t._v(" "),a("li",[t._v("对于应届生,谋取一份拿到offer的可能性")]),t._v(" "),a("li",[t._v("对于老司机,去大厂镀金的必备条件")]),t._v(" "),a("li",[t._v("对于培训生,极大的缩小和科班学生的差距")])]),t._v(" "),a("h2",{attrs:{id:"_03、200道刷多久"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、200道刷多久"}},[t._v("#")]),t._v(" 03、200道刷多久")]),t._v(" "),a("blockquote",[a("p",[t._v("“我之前立了个flag,一天刷一道都没坚持下来。你特么让我刷两百道,我一年都搞不定。这不扯淡吗?”")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("如果你有上面的疑惑,那么:你错了。坚持不下来一天一道的人和刷完200道题,毛关系都没有。回到我上面的例子,200道题目里。大概easy在130-150道左右,medium在30-50道,hard只占据了不到20道题。")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:v(458),alt:"PNG"}}),t._v(" "),a("p",[t._v("跑步和刷题不同。跑步是越来越慢,刷题却是越来越快的。对于初学者(正常人),在每一个tag刷了10道左右简单题之后,基本同类型的题目可以提高到每天2-3道easy题目,有的掌握好的,甚至能提高到每天刷5-10题。很多同类型题目,基本都是一个模子刻出来的。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("所以我认为,200道题刷的特别慢的话大概在150天左右完成,中不溜的在100天左右,刷的快的话在60天左右。同时,如果我们再把这里边的 medium 和 hard 通通remove 掉。再不济,也应该在3个月左右掌握大概100-150道简单题目。剩下的,just do it。")]),t._v(" "),a("h2",{attrs:{id:"_04、刷完就忘"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_04、刷完就忘"}},[t._v("#")]),t._v(" 04、刷完就忘")]),t._v(" "),a("blockquote",[a("p",[t._v("你忘我也忘,大家都旺旺。")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("忘就对了。如果你在刷题的时候发现怎么也写不出来,别担心,这是正常的。如果你还发现,之前明明刷过的题,过段时间再做的时候,自己还是不会。别担心,这特么还是正常的。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("作为一个正常人,大脑就会忘记,如果不忘,可能说明你大脑出了问题。这个不是我说的,是医生说的:")]),t._v(" "),a("br"),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:v(459),alt:"PNG"}}),t._v(" "),a("br"),t._v(" "),a("p",[t._v("所以如果有些题你刷了好多遍都还是不会,那就需要进行总结。思考到底是哪一环节卡住了你,反复进行练习。当然,这里有人建议是每道题都刷个3遍,其实我觉得倒是没有这个必要。我建议是找个小本本,记一下每一道的核心要素与考察要点。在刷题的这段时间里,没啥事就瞅瞅翻翻。")]),t._v(" "),a("h2",{attrs:{id:"_05、没基础怎么办"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_05、没基础怎么办"}},[t._v("#")]),t._v(" 05、没基础怎么办")]),t._v(" "),a("blockquote",[a("p",[t._v("我没学过算法和数据结构,能不能刷题?")])]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("能。刷题本身就是一个学习的过程。比如二叉树的题,刷个30道,你一定会遇到BST。所以我个人认为学习系统的算法知识(也就是你们问我的,要不要买一本书,先看一遍再进行刷题)和 刷题 本身并不矛盾。你可以双管齐下,也可以单点突破,都ok。主要是,干就对了。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:v(460),alt:"PNG"}}),t._v(" "),a("p",[t._v("到这里就会出现另一个问题,“我是从头刷,还是分类刷?” 我的建议是,如果稍微有点算法基础,你就从头刷leetcode前200道题。如果完全没有算法基础,可以考虑分tag来刷。并不是说按照tag的方式更好,而是在没有算法基础的前提下分tag来刷,除了掌握题型之外,对于知识的掌握很有益处。(想一想初高中是如何学习的)那为什么又说从头刷也是可以的?这个是因为,如果一直刷某一种类型的题,容易出现刷完一类忘掉前一类的问题,也容易对某一类题目疲惫。总之,"),a("strong",[t._v("使用哪种方式取决于你")]),t._v("。关键是:干就对了!")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("另外,我认为leetcode前200题是相当经典的。可能大家不知道,早期leetcode总共也就一百来道题。这些题目基本都是精华,后面的很多题目都是在这些题目的基础上进行演化而成。比如 合并两个有序链表,后来就演化成 合并K个有序链表。并且前200道题基本覆盖了所有的算法类型,我是很建议大家刷一遍的。")]),t._v(" "),a("h2",{attrs:{id:"_06、其他"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_06、其他"}},[t._v("#")]),t._v(" 06、其他")]),t._v(" "),a("blockquote",[a("p",[t._v("初学者拿到题目没有思路怎么办?为什么看完题解自己还是写不出来?别人的代码为什么可以那么简单?为了面试要不要尽可能多的掌握最优解?等等等等,这些我打算出在下一次的算法指导篇中。")])]),t._v(" "),a("p",[t._v("今天基本就到这里了,还有很多想和大家说的,后面我再一一分享出来。如果意犹未尽,那么下面这篇文章是必看的:")]),t._v(" "),a("p",[a("RouterLink",{attrs:{to:"/0.0.学习须知/0.0.学习须知/011.html"}},[t._v("算法指导篇")])],1)])}),[],!1,null,null,null);_.default=r.exports},457:function(t,_,v){t.exports=v.p+"assets/img/1.f0787d40.gif"},458:function(t,_,v){t.exports=v.p+"assets/img/2.85163e0d.gif"},459:function(t,_,v){t.exports=v.p+"assets/img/3.4a7ea697.jpg"},460:function(t,_,v){t.exports=v.p+"assets/img/4.b038e351.gif"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/66.cd05794a.js b/learning/.vuepress/dist/assets/js/66.cd05794a.js deleted file mode 100644 index 7ccdc393..00000000 --- a/learning/.vuepress/dist/assets/js/66.cd05794a.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{1056:function(t,s,r){"use strict";r.r(s);var a=r(3),n=Object(a.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"_01、题目分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("第21题:合并两个有序链表")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。")])])])]),t._v(" "),a("p",[a("strong",[t._v("示例:")])]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("输入:1->2->4, 1->3->4\n输出:1->1->2->3->4->4\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("br"),t._v(" "),a("p",[t._v("首先我们拿到题目乍眼一看,类似这种"),a("strong",[t._v("链表的合并问题")]),t._v("。基本上马上可以想到"),a("strong",[t._v("需要设置一个哨兵节点,这可以在最后让我们比较容易地返回合并后的链表。")]),t._v("(不懂哨兵节点的同学,可以先移驾到 "),a("RouterLink",{attrs:{to:"/1.1.链表系列/c1/006.html"}},[t._v("06.删除链表倒数第N个节点(19)")]),t._v(" 进行学习)")],1),t._v(" "),a("br"),t._v(" "),a("p",[t._v("假设我们的链表分别为:")]),t._v(" "),a("p",[t._v("l1 = [1,2,4]")]),t._v(" "),a("p",[t._v("l2 = [1,3,4]")]),t._v(" "),a("p",[t._v('同时我们设定一个 "prehead" 的哨兵节点,大概是下面这样:')]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:r(491),alt:"PNG"}}),t._v(" "),a("h2",{attrs:{id:"_02、题目图解"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[t._v("#")]),t._v(" 02、题目图解")]),t._v(" "),a("p",[t._v("如上图所示,首先我们"),a("strong",[t._v("维护一个 prehead 的哨兵节点")]),t._v("。我们其实"),a("strong",[t._v("只需要调整它的 next 指针")]),t._v("。让它总是"),a("strong",[t._v("指向l1或者l2中较小的一个,直到l1或者l2任一指向null")]),t._v("。这样到了最后,如果l1还是l2中任意一方还有余下元素没有用到,那"),a("strong",[t._v("余下的这些元素一定大于prehead已经合并完的链表(因为是有序链表)")]),t._v("。我们只需要将这些元素全部追加到prehead合并完的链表后,最终就得到了我们需要的链表。大概流程如下:")]),t._v(" "),a("ol",[a("li",[a("p",[t._v("首先我们将 prehead 指向 l1 或者 l2 中比较小的一个。如果相等,则任意一个都可以。此时的 l1 为 [2,4],l2 为 [1,3,4]")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:r(492),alt:"PNG"}})]),t._v(" "),a("li",[a("p",[t._v("我们继续上面的步骤。将 prehead 的链表指向 l1 和 l2 中较小的一个。现在这里就是指向1。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:r(493),alt:"PNG"}})]),t._v(" "),a("li",[a("p",[t._v("反复上图步骤。")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:r(494),alt:"PNG"}})]),t._v(" "),a("li",[a("p",[t._v("现在 prehead.Next 就是我们需要的链表。")]),t._v(" "),a("br")])]),t._v(" "),a("h2",{attrs:{id:"_03、go语言示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[t._v("#")]),t._v(" 03、Go语言示例")]),t._v(" "),a("p",[t._v("根据以上分析,我们可以得到下面的题解:")]),t._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("mergeTwoLists")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("ListNode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" l2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("ListNode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("ListNode "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n prehead "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("ListNode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n result "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" prehead\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" l1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" l2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" l1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" l2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n prehead"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" l1\n l1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" l1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n prehead"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" l2\n l2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" l2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n prehead "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" prehead"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" l1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n prehead"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" l1\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" l2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n prehead"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" l2\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Next\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])])])}),[],!1,null,null,null);s.default=n.exports},491:function(t,s){t.exports="data:image/png;base64,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"},492:function(t,s){t.exports="data:image/png;base64,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"},493:function(t,s,r){t.exports=r.p+"assets/img/3.32f5ea8f.jpg"},494:function(t,s,r){t.exports=r.p+"assets/img/4.f931992f.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/67.5366b7a3.js b/learning/.vuepress/dist/assets/js/67.5366b7a3.js deleted file mode 100644 index 19cc0354..00000000 --- a/learning/.vuepress/dist/assets/js/67.5366b7a3.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{1078:function(t,s,n){"use strict";n.r(s);var a=n(3),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("blockquote",[a("p",[t._v("在上一节中,我们通过例题学习了二叉树的DFS(深度优先搜索),其实就是"),a("strong",[t._v("沿着一个方向一直向下遍历")]),t._v("。那我们可不可以"),a("strong",[t._v("按照高度一层一层的访问树中的数据")]),t._v("呢?当然可以,就是本节中我们要讲的BFS(宽度优先搜索),同时也被称为广度优先搜索。")]),t._v(" "),a("p",[t._v("我们仍然通过例题进行讲解。")])]),t._v(" "),a("h2",{attrs:{id:"_01、题目分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("第102题:二叉树的层次遍历")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("给定一个二叉树,返回其按层次遍历的节点值。(即逐层地,从左到右访问所有节点)。")])])])]),t._v(" "),a("p",[a("strong",[t._v("示例:")])]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("给定二叉树 [3,9,20,null,null,15,7],\n 3 \n / \\ \n 9 20 \n / \\ \n 15 7\n返回其层次遍历结果:[[3],[9,20],[15,7]]\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("br"),t._v(" "),a("blockquote",[a("center",[a("b",[t._v(" 本系列内容均为必须掌握! ")])])],1),t._v(" "),a("h2",{attrs:{id:"_02、bfs介绍"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、bfs介绍"}},[t._v("#")]),t._v(" 02、BFS介绍")]),t._v(" "),a("p",[t._v("BFS,广度/宽度优先。其实就是"),a("strong",[t._v("从上到下,先把每一层遍历完之后再遍历一下一层")]),t._v("。假如我们的树如下:")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(630),alt:"img"}}),t._v(" "),a("p",[t._v("按照BFS,访问顺序如下:")]),t._v(" "),a("blockquote",[a("center",[a("b",[t._v("a->b->c->d->e->f->g ")])])],1),t._v(" "),a("p",[t._v("了解了BFS,我们开始对本题进行分析。")]),t._v(" "),a("h2",{attrs:{id:"_03、递归求解"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、递归求解"}},[t._v("#")]),t._v(" 03、递归求解")]),t._v(" "),a("p",[t._v("同样,我们先考虑本题的递归解法。想到递归,我们一般先想到DFS。我们可以对该二叉树进行"),a("strong",[t._v("先序遍历(根左右的顺序)")]),t._v(",同时,记录节点所在的层次level,并且对每一层都定义一个数组,然后将访问到的节点值放入对应层的数组中。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("假设给定二叉树为[3,9,20,null,null,15,7],图解如下:")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(631),alt:"img"}}),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(632),alt:"img"}}),t._v(" "),a("p",[t._v("根据以上分析,代码如下:")]),t._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("levelOrder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("dfs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("dfs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" level "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" root "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" level "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tres "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tres"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("level"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("level"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tres "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("dfs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" level"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tres "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("dfs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" level"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])]),a("h2",{attrs:{id:"_04、bfs求解"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_04、bfs求解"}},[t._v("#")]),t._v(" 04、BFS求解")]),t._v(" "),a("p",[t._v("上面的解法,其实相当于是用DFS的方法实现了二叉树的BFS。那我们能不能直接使用BFS的方式进行解题呢?当然,我们可以使用Queue的数据结构。我们将root节点初始化进队列,通过"),a("strong",[t._v("消耗尾部,插入头部")]),t._v("的方式来完成BFS。")]),t._v(" "),a("br"),t._v(" "),a("p",[t._v("具体步骤如下图:")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(633),alt:"img"}}),t._v(" "),a("p",[t._v("根据以上分析,代码如下:")]),t._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("levelOrder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" result "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" root "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 定义一个双向队列")]),t._v("\n\tqueue "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("New")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 头部插入根节点")]),t._v("\n\tqueue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PushFront")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 进行广度搜索")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" queue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" current "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v("\n\t\tlistLength "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" queue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" listLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 消耗尾部")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// queue.Remove(queue.Back()).(*TreeNode):移除最后一个元素并将其转化为TreeNode类型")]),t._v("\n\t\t\tnode "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" queue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Remove")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("queue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Back")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("TreeNode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\tcurrent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("current"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" node"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Val"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" node"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//插入头部")]),t._v("\n\t\t\t\tqueue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PushFront")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Left"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" node"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tqueue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PushFront")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Right"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\tresult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" current"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br")])])])}),[],!1,null,null,null);s.default=e.exports},630:function(t,s,n){t.exports=n.p+"assets/img/1.6f166662.jpg"},631:function(t,s,n){t.exports=n.p+"assets/img/2.5e908ad4.jpg"},632:function(t,s,n){t.exports=n.p+"assets/img/3.77fc440f.jpeg"},633:function(t,s,n){t.exports=n.p+"assets/img/4.371c25ec.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/68.25f9db17.js b/learning/.vuepress/dist/assets/js/68.25f9db17.js deleted file mode 100644 index 29d85a11..00000000 --- a/learning/.vuepress/dist/assets/js/68.25f9db17.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{1076:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("在上一节中,我们分别学习了DFS与BFS。在本节中,我们将继续学习一种特殊的二叉树结构 —— "),n("strong",[s._v("二叉搜索树(BST)")]),s._v("。")])]),s._v(" "),n("h2",{attrs:{id:"_01、二叉搜索树"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、二叉搜索树"}},[s._v("#")]),s._v(" 01、二叉搜索树")]),s._v(" "),n("p",[s._v("先看定义:二叉搜索树(Binary Search Tree),(又:二叉查找树,二叉排序树)它或者是"),n("strong",[s._v("一棵空树")]),s._v(",或者是具有下列性质的二叉树:若"),n("strong",[s._v("它的左子树不空,则左子树上所有结点的值均小于它的根结点的值")]),s._v(";若"),n("strong",[s._v("它的右子树不空,则右子树上所有结点的值均大于它的根结点的值")]),s._v(";它的左、右子树也分别为"),n("strong",[s._v("二叉搜索树")]),s._v("。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("这里强调一下子树的概念:设T是有根树,a是T中的一个顶点,由**a以及a的所有后裔(后代)**导出的子图称为有向树T的子树。具体来说,"),n("strong",[s._v("子树就是树的其中一个节点以及其下面的所有的节点")]),s._v("所构成的树。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("比如下面这就是一颗二叉搜索树:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(620),alt:"img"}}),s._v(" "),n("p",[s._v("下面这两个都不是:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(621),alt:"img"}}),s._v(" "),n("p",[s._v("<1>图中4节点位置的数值应该大于根节点")]),s._v(" "),n("p",[s._v("<2>图中3节点位置的数值应该大于根节点")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("那我们如何来验证一颗二叉搜索树?我们看题。")]),s._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第98题:验证二叉搜索树")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个二叉树,判断其是否是一个有效的二叉搜索树。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入:\n 5\n / \\\n 1 4\n / \\\n 3 6\n输出: false\n解释: 输入为: [5,1,4,null,null,3,6]。\n 根节点的值为 5 ,但是其右子节点值为 4 。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入:\n 5\n / \\\n 1 4\n / \\\n 3 6\n输出: false\n解释: 输入为: [5,1,4,null,null,3,6]。\n 根节点的值为 5 ,但是其右子节点值为 4 。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("p",[s._v("首先看完题目,我们很容易想到 遍历整棵树,比较所有节点,通过 左节点值<节点值,右节点值>节点值 的方式来进行求解。但是这种解法是错误的,因为"),n("strong",[s._v("对于任意一个节点")]),s._v(",我们不光需要左节点值小于该节点,并且"),n("strong",[s._v("左子树上的所有节点值都需要小于该节点")]),s._v("。(右节点一致)所以我们在此引入上界与下界,用以保存之前的节点中出现的"),n("strong",[s._v("最大值与最小值")]),s._v("。")]),s._v(" "),n("h2",{attrs:{id:"_03、递归求解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、递归求解"}},[s._v("#")]),s._v(" 03、递归求解")]),s._v(" "),n("p",[s._v("明确了题目,我们直接使用递归进行求解。这里需要强调的是,在每次递归中,我们除了"),n("strong",[s._v("进行左右节点的校验,还需要与上下界进行判断")]),s._v("。由于该递归分析有一定难度,所以我们先展示代码:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isValidBST")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("TreeNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("bool")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBST")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("math"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("MinInt64"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("math"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("MaxInt64"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBST")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("TreeNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" max "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("bool")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" min "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Val "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" max "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBST")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("min"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBST")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("max"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br")])]),n("p",[s._v("运行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(622),alt:"img"}}),s._v(" "),n("p",[s._v("如果觉得上文中的递归不太容易理解,可以通过下图理解:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(623),alt:"img"}})])}),[],!1,null,null,null);t.default=r.exports},620:function(s,t,a){s.exports=a.p+"assets/img/1.03e01a60.jpg"},621:function(s,t,a){s.exports=a.p+"assets/img/2.55e8dff6.jpg"},622:function(s,t){s.exports="data:image/png;base64,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"},623:function(s,t,a){s.exports=a.p+"assets/img/4.89740a2c.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/69.56ccb500.js b/learning/.vuepress/dist/assets/js/69.56ccb500.js deleted file mode 100644 index 05a1aeb3..00000000 --- a/learning/.vuepress/dist/assets/js/69.56ccb500.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{1094:function(t,s,a){"use strict";a.r(s);var _=a(3),r=Object(_.a)({},(function(){var t=this,s=t.$createElement,_=t._self._c||s;return _("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[_("blockquote",[_("p",[t._v("今天继续为大家分享一道有趣的概率类问题(是有小伙伴咨询我的,在面试时会被问到哈~)")])]),t._v(" "),_("h2",{attrs:{id:"_01、硬币问题"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#_01、硬币问题"}},[t._v("#")]),t._v(" 01、硬币问题")]),t._v(" "),_("blockquote",[_("p",[t._v("小知识:硬币类型的问题经常会被用来考察DP或者贪心。")])]),t._v(" "),_("br"),t._v(" "),_("table",[_("thead",[_("tr",[_("th",[t._v("题目:A和B两人为了竞价一个拍卖品,决定用抛掷硬币的办法来判断谁有资格。为了让游戏过程更加刺激,A提出了这样一个方案:连续抛掷硬币,直到最近三次硬币抛掷结果是“正反反”或者“反反正”。如果是前者,那么A获胜;如果是后者,那么B获胜")])])]),t._v(" "),_("tbody",[_("tr",[_("td",[t._v("问题是:B应该接受A的提议吗?换句话说,这个游戏是公平的吗?")])])])]),t._v(" "),_("h2",{attrs:{id:"_02、题目分析"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),_("blockquote",[_("p",[t._v("遇到这种看上去“貌似”一眼就可以得出答案的题目,一定要认真思考。直觉 != 正确")])]),t._v(" "),_("br"),t._v(" "),_("p",[t._v("连续投掷三次,能产生八种结果,“正反反”和“反反正”两种可能性各占 1/8,序列也完全对称,获胜概率怎么说都应该是一样的。")]),t._v(" "),_("img",{staticStyle:{zoom:"67%"},attrs:{src:a(693),alt:"PNG"}}),t._v(" "),_("p",[t._v("所以对B而言,不应该有任何理由来怀疑该玩法的公平性。但是,答案真的是这样吗?事实,该游戏并不公平。虽然“正反反”和“反反正”在频率上出现的一样,但是其之间却有一个竞争关系:"),_("strong",[t._v("一旦抛硬币产生其中一种序列,游戏即结束")]),t._v("。所以不论何时,只要抛出一个正面,也就意味着B必输无疑。换句话说,在整个游戏的前两次抛掷中,只要出现“正正”,“正反”,“反正”其中任一,A则一定会取得胜利。A和B的概率比达到3:1,优势不言而喻。")]),t._v(" "),_("img",{staticStyle:{zoom:"67%"},attrs:{src:a(694),alt:"PNG"}}),t._v(" "),_("img",{staticStyle:{zoom:"67%"},attrs:{src:a(695),alt:"PNG"}}),t._v(" "),_("h2",{attrs:{id:"_03、加强版"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#_03、加强版"}},[t._v("#")]),t._v(" 03、加强版")]),t._v(" "),_("blockquote",[_("p",[t._v("扑克牌有四种花色,分别为:黑桃、红桃、梅花、方块。四个花色分别代表了春夏秋冬,其中红心、方片代表白昼,黑桃、梅花代表黑夜。扑克牌其实是历法的缩影,54张牌中大王代表太阳,小王代表月亮,剩下的52张牌代表一年有五十二个星期。每一个季节为13个星期,所以扑克牌中每种花色为13张;而每一个季节为91天,13张牌点数相加相加刚好是91点,再加上小王的1点,一共为365点代表了365天;加上大王的1点则表示闰年的366天。")])]),t._v(" "),_("br"),t._v(" "),_("p",[t._v("一副扑克牌不算大小王刚好是52张,随意洗牌。如果出现连续三张牌,花色依次是红黑黑,那么玩家A加一分;同时把翻开了的牌都丢掉,继续一张张翻没翻开的牌;类似地,一 旦出现连续三张牌恰好是黑黑红,则玩家B得一分,弃掉已翻开的牌后继续。结果会如何呢?(大家不妨写一个程序来进行验证)")]),t._v(" "),_("img",{staticStyle:{zoom:"67%"},attrs:{src:a(696),alt:"PNG"}}),t._v(" "),_("p",[t._v("上面的问题请认真思考(毕竟硬币题目只是简化版本,下面这种才是面试时更容易被问到的),评论区留下你们的想法,写的好的顶你到天花板。")]),t._v(" "),_("br"),t._v(" "),_("p",[t._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);s.default=r.exports},693:function(t,s,a){t.exports=a.p+"assets/img/1.57963985.jpg"},694:function(t,s,a){t.exports=a.p+"assets/img/2.a51900c0.jpg"},695:function(t,s,a){t.exports=a.p+"assets/img/3.790bbcab.jpg"},696:function(t,s,a){t.exports=a.p+"assets/img/4.4b928156.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/7.1850882c.js b/learning/.vuepress/dist/assets/js/7.1850882c.js deleted file mode 100644 index 83230c44..00000000 --- a/learning/.vuepress/dist/assets/js/7.1850882c.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{1038:function(t,e,a){"use strict";a.r(e);a(50);var r=a(380),n=a(376),s=a(363),o=a(372),i=a(46),c=a(362),u=a(361),f={mixins:[o.a,u.a],components:{Common:r.a,NoteAbstract:n.a,ModuleTransition:s.a},data:function(){return{currentPage:1}},computed:{posts:function(){var t=this.$currentCategories.pages;return t=Object(i.a)(t),Object(i.c)(t),t},title:function(){return this.$currentCategories.key}},mounted:function(){this._setPage(this._getStoragePage())},methods:{getCurrentTag:function(t){this.$emit("currentTag",t)},getCurrentPage:function(t){this._setPage(t),setTimeout((function(){window.scrollTo(0,0)}),100)},_setPage:function(t){this.currentPage=t,this.$page.currentPage=t,this._setStoragePage(t)},getOneColor:c.a},watch:{$route:function(){this._setPage(this._getStoragePage())}}},l=(a(365),a(399),a(446),a(3)),g=Object(l.a)(f,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("Common",{staticClass:"categories-wrapper",attrs:{sidebar:!1}},[a("ModuleTransition",[a("ul",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"category-wrapper"},t._l(this.$categories.list,(function(e,r){return a("li",{key:r,staticClass:"category-item",class:t.title==e.name?"active":""},[a("router-link",{attrs:{to:e.path}},[a("span",{staticClass:"category-name"},[t._v(t._s(e.name))]),t._v(" "),a("span",{staticClass:"post-num",style:{backgroundColor:t.getOneColor()}},[t._v(t._s(e.pages.length))])])],1)})),0)]),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.08"}},[a("note-abstract",{directives:[{name:"show",rawName:"v-show",value:t.recoShowModule,expression:"recoShowModule"}],staticClass:"list",attrs:{data:t.posts,currentPage:t.currentPage},on:{currentTag:t.getCurrentTag}})],1),t._v(" "),a("ModuleTransition",{attrs:{delay:"0.16"}},[a("pagation",{staticClass:"pagation",attrs:{total:t.posts.length,currentPage:t.currentPage},on:{getCurrentPage:t.getCurrentPage}})],1)],1)}),[],!1,null,"e7537b8a",null);e.default=g.exports},356:function(t,e,a){},357:function(t,e,a){},358:function(t,e,a){},359:function(t,e,a){},362:function(t,e,a){"use strict";function r(){var t=["#e15b64","#f47e60","#f8b26a","#abbd81","#849b87","#e15b64","#f47e60","#f8b26a","#f26d6d","#67cc86","#fb9b5f","#3498db"];return t[Math.floor(Math.random()*t.length)]}a.d(e,"a",(function(){return r}))},364:function(t,e,a){"use strict";a(366),a(25),a(368),a(26),a(30);var r=a(49),n={props:{pageInfo:{type:Object,default:function(){return{}}},currentTag:{type:String,default:""},showAccessNumber:{type:Boolean,default:!1}},data:function(){return{numStyle:{fontSize:".9rem",fontWeight:"normal",color:"#999"}}},filters:{formatDateValue:function(t){if(!t)return"";t=t.replace("T"," ").slice(0,t.lastIndexOf("."));var e=Number(t.substr(11,2)),a=Number(t.substr(14,2)),n=Number(t.substr(17,2));return e>0||a>0||n>0?Object(r.d)(t):Object(r.d)(t,"yyyy-MM-dd")}},methods:{goTags:function(t){this.$router.push({path:"/tags/".concat(t,"/")})}}},s=(a(369),a(3)),o=Object(s.a)(n,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[t.pageInfo.frontmatter.author||t.$themeConfig.author||t.$site.title?a("i",{staticClass:"iconfont reco-account"},[a("span",[t._v(t._s(t.pageInfo.frontmatter.author||t.$themeConfig.author||t.$site.title))])]):t._e(),t._v(" "),t.pageInfo.frontmatter.date?a("i",{staticClass:"iconfont reco-date"},[a("span",[t._v(t._s(t._f("formatDateValue")(t.pageInfo.frontmatter.date)))])]):t._e(),t._v(" "),!0===t.showAccessNumber?a("i",{staticClass:"iconfont reco-eye"},[a("AccessNumber",{attrs:{idVal:t.pageInfo.path,numStyle:t.numStyle}})],1):t._e(),t._v(" "),t.pageInfo.frontmatter.tags?a("i",{staticClass:"iconfont reco-tag tags"},t._l(t.pageInfo.frontmatter.tags,(function(e,r){return a("span",{key:r,staticClass:"tag-item",class:{active:t.currentTag==e},on:{click:function(a){return t.goTags(e)}}},[t._v("\n "+t._s(e)+"\n ")])})),0):t._e()])}),[],!1,null,"484a899e",null);e.a=o.exports},365:function(t,e,a){"use strict";var r=a(356);a.n(r).a},366:function(t,e,a){var r=a(0),n=a(367);r({target:"Array",proto:!0,forced:n!==[].lastIndexOf},{lastIndexOf:n})},367:function(t,e,a){"use strict";var r=a(16),n=a(31),s=a(11),o=a(27),i=a(20),c=Math.min,u=[].lastIndexOf,f=!!u&&1/[1].lastIndexOf(1,-0)<0,l=o("lastIndexOf"),g=i("indexOf",{ACCESSORS:!0,1:0}),p=f||!l||!g;t.exports=p?function(t){if(f)return u.apply(this,arguments)||0;var e=r(this),a=s(e.length),o=a-1;for(arguments.length>1&&(o=c(o,n(arguments[1]))),o<0&&(o=a+o);o>=0;o--)if(o in e&&e[o]===t)return o||0;return-1}:u},368:function(t,e,a){"use strict";var r=a(7),n=a(4),s=a(107),o=a(21),i=a(5),c=a(34),u=a(177),f=a(35),l=a(1),g=a(52),p=a(51).f,m=a(33).f,h=a(8).f,d=a(378).trim,_=n.Number,v=_.prototype,b="Number"==c(g(v)),I=function(t){var e,a,r,n,s,o,i,c,u=f(t,!1);if("string"==typeof u&&u.length>2)if(43===(e=(u=d(u)).charCodeAt(0))||45===e){if(88===(a=u.charCodeAt(2))||120===a)return NaN}else if(48===e){switch(u.charCodeAt(1)){case 66:case 98:r=2,n=49;break;case 79:case 111:r=8,n=55;break;default:return+u}for(o=(s=u.slice(2)).length,i=0;in)return NaN;return parseInt(s,r)}return+u};if(s("Number",!_(" 0o1")||!_("0b1")||_("+0x1"))){for(var C,N=function(t){var e=arguments.length<1?0:t,a=this;return a instanceof N&&(b?l((function(){v.valueOf.call(a)})):"Number"!=c(a))?u(new _(I(e)),a,N):I(e)},P=r?p(_):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),w=0;P.length>w;w++)i(_,C=P[w])&&!i(N,C)&&h(N,C,m(_,C));N.prototype=v,v.constructor=N,o(n,"Number",N)}},369:function(t,e,a){"use strict";var r=a(357);a.n(r).a},370:function(t,e,a){"use strict";var r=a(358);a.n(r).a},371:function(t,e,a){"use strict";var r=a(359);a.n(r).a},372:function(t,e,a){"use strict";a(377);e.a={methods:{_getStoragePage:function(){var t=window.location.pathname,e=JSON.parse(sessionStorage.getItem("currentPage"));return null===e||t!==e.path?(sessionStorage.setItem("currentPage",{page:1,path:""}),1):parseInt(e.page)},_setStoragePage:function(t){var e=window.location.pathname;sessionStorage.setItem("currentPage",JSON.stringify({page:t,path:e}))}}}},373:function(t,e,a){},376:function(t,e,a){"use strict";a(25);var r={components:{PageInfo:a(364).a},props:["item","currentPage","currentTag"]},n=(a(370),a(3)),s={components:{NoteAbstractItem:Object(n.a)(r,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"abstract-item"},[t.item.frontmatter.sticky?a("i",{staticClass:"iconfont reco-sticky"}):t._e(),t._v(" "),a("div",{staticClass:"title"},[t.item.frontmatter.keys?a("i",{staticClass:"iconfont reco-lock"}):t._e(),t._v(" "),a("router-link",{attrs:{to:t.item.path}},[t._v(t._s(t.item.title))])],1),t._v(" "),a("div",{staticClass:"abstract",domProps:{innerHTML:t._s(t.item.excerpt)}}),t._v(" "),a("hr",{staticClass:"hr"}),t._v(" "),a("PageInfo",{attrs:{pageInfo:t.item,currentTag:t.currentTag}})],1)}),[],!1,null,"28f76ce9",null).exports},props:["data","currentPage","currentTag"],computed:{currentPageData:function(){var t=10*this.currentPage-10,e=10*this.currentPage;return this.data.slice(t,e)}}},o=(a(371),Object(n.a)(s,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"abstract-wrapper"},t._l(t.currentPageData,(function(e){return a("NoteAbstractItem",{key:e.path,attrs:{item:e,currentPage:t.currentPage,currentTag:t.currentTag}})})),1)}),[],!1,null,"b014bc36",null));e.a=o.exports},399:function(t,e,a){"use strict";var r=a(373);a.n(r).a},400:function(t,e,a){},446:function(t,e,a){"use strict";var r=a(400);a.n(r).a}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/70.51572475.js b/learning/.vuepress/dist/assets/js/70.51572475.js deleted file mode 100644 index 4ba3b0f0..00000000 --- a/learning/.vuepress/dist/assets/js/70.51572475.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[70],{1105:function(s,t,a){"use strict";a.r(t);var n=a(3),A=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("不知道为什么叫做爱吃香蕉的阿珂,难道不应该是爱吃香蕉的猴子么...或者爱吃队友的露娜么?")])]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第875题:阿珂喜欢吃香蕉")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("这里总共有 N 堆香蕉,第 i 堆中有piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。 阿珂可以决定她吃香蕉的速度 K (单位:根/小时),每个小时,她将会选择一堆香蕉,从中吃掉 K 根。")])])])]),s._v(" "),n("p",[s._v("如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: piles = [3,6,7,11], H = 8\n输出: 4\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: piles = [30,11,23,4,20], H = 5\n输出: 30\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 3:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: piles = [30,11,23,4,20], H = 6\n输出: 23\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("提示:")])]),s._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",[n("code",[s._v("1 <= piles.length <= 10^4\npiles.length <= H <= 10^9\n1 <= piles[i] <= 10^9\n")])])]),n("br"),s._v(" "),n("p",[n("strong",[s._v("PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没什么意思了。")])]),s._v(" "),n("br"),s._v(" "),n("h2",{attrs:{id:"_02、二分查找"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、二分查找"}},[s._v("#")]),s._v(" 02、二分查找")]),s._v(" "),n("blockquote",[n("p",[s._v('十个二分九个错,该算法被形容 "思路很简单,细节是魔鬼"。第一个二分查找算法于 1946 年出现,然而第一个完全正确的二分查找算法实现直到 1962 年才出现。下面的二分查找,其实是二分查找里最简单的一个模板,在后面的文章系列里,我将逐步为大家讲解二分查找的其他变形形式。')])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("二分查找是计算机科学中最基本、最有用的算法之一。它描述了"),n("strong",[s._v("在有序集合中搜索特定值的过程")]),s._v("。一般二分查找由以下几个术语构成:")]),s._v(" "),n("ul",[n("li",[n("p",[s._v("目标 Target —— 你要查找的值")])]),s._v(" "),n("li",[n("p",[s._v("索引 Index —— 你要查找的当前位置")])]),s._v(" "),n("li",[n("p",[s._v("左、右指示符 Left,Right —— 我们用来维持查找空间的指标")])]),s._v(" "),n("li",[n("p",[s._v("中间指示符 Mid —— 我们用来应用条件来确定我们应该向左查找还是向右查找的索引")]),s._v(" "),n("br")])]),s._v(" "),n("p",[s._v("在最简单的形式中,二分查找对具有指定左索引和右索引的"),n("strong",[s._v("连续序列")]),s._v("进行操作。我们也称之为"),n("strong",[s._v("查找空间")]),s._v("。二分查找维护查找空间的左、右和中间指示符,并比较查找目标;如果条件不满足或值不相等,则清除目标不可能存在的那一半,并在剩下的一半上继续查找,直到成功为止。")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(747),alt:"PNG"}}),s._v(" "),n("p",[s._v("举例说明:比如你需要找1-100中的一个数字,你的目标是"),n("strong",[s._v("用最少的次数")]),s._v("猜到这个数字。你每次猜测后,我会说大了或者小了。而你只需要每次猜测中间的数字,就可以将余下的数字排除一半。")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(748),alt:"PNG"}}),s._v(" "),n("p",[s._v("不管我心里想的数字如何,你在7次之内都能猜到,这就是一个典型的二分查找。每次筛选掉一半数据,所以我们也称之为 "),n("strong",[s._v("折半查找")]),s._v("。一般而言,对于包含n个元素的列表,用二分查找最多需要log2n步。")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(749),alt:"PNG"}}),s._v(" "),n("p",[s._v("当然,一般题目不太可能给你一个如此现成的题型,让你上手就可以使用二分,所以我们需要思考,如何来构造一个成功的二分查找。大部分的二分查找,基本都由以下三步组成:")]),s._v(" "),n("ul",[n("li",[n("p",[s._v("预处理过程(大部分场景就是对未排序的集合进行排序)")])]),s._v(" "),n("li",[n("p",[s._v("二分查找过程(找到合适的循环条件,每一次将查找空间一分为二)")])]),s._v(" "),n("li",[n("p",[s._v("后处理过程(在剩余的空间中,找到合适的目标值)")]),s._v(" "),n("br")])]),s._v(" "),n("p",[s._v("了解了二分查找的过程,我们对二分查找进行"),n("strong",[s._v("一般实现")]),s._v("(这里给出一个Java版本,比较正派的代码,没有用一些缩写形式)")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("binarySearch")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" array"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" des"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" low "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" high "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" array"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("low "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" high"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" low "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("high "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" low"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("des "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" array"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("des "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" array"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n high "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n low "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br")])]),n("p",[s._v("注意:上面的代码,mid 使用 low + (high - low)/2 的目的,是防止 high low 溢出内存。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("为什么说是一般实现?")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("1、"),n("strong",[s._v("根据边界的不同(开闭区间调整),有时需要弹性调整low与high的值,以及循环的终止条件")]),s._v("。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("2、根据元素是否有重复值,以及是否需要找到重复值区间,有时需要对原算法进行改进。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("那上面我们说了,一般二分查找的过程分为:预处理 - 二分查找 - 后处理,上面的代码,就没有后处理的过程,因为在每一步中,你都检查了元素,如果到达末尾,也已经知道没有找到元素。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("总结一下一般实现的几个条件:")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[n("strong",[s._v("初始条件:left = 0, right = length-1")])]),s._v(" "),n("li",[n("strong",[s._v("终止:left > right")])]),s._v(" "),n("li",[n("strong",[s._v("向左查找:right = mid-1")])]),s._v(" "),n("li",[n("strong",[s._v("向右查找:left = mid +1")])])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("请大家记住这个模板原形,在后面的系列中,我们将介绍二分查找其他的模板类型。")]),s._v(" "),n("h2",{attrs:{id:"_03、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、题目分析"}},[s._v("#")]),s._v(" 03、题目分析")]),s._v(" "),n("blockquote",[n("p",[s._v("简单复习了二分查找,我们来看本题。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("注意,绝大部分**「在递增递减区间中搜索目标值」** 的问题,都可以转化为二分查找问题。并且,二分查找的题目,基本逃不出三种:找特定值,找大于特定值的元素(上界),找小于特定值的元素(下界)。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("而根据这三种,代码又最终会转化为以下这些问题:")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[n("p",[s._v("low、high 要初始化为 0、n-1 还是 0、n 又或者 1,n?")])]),s._v(" "),n("li",[n("p",[s._v("循环的判定条件是 low < high 还是 low <= high?")])]),s._v(" "),n("li",[n("p",[s._v("if 的判定条件应该怎么写?")])]),s._v(" "),n("li",[n("p",[s._v("if 条件正确时,应该移动哪边的边界?")])]),s._v(" "),n("li",[n("p",[s._v("更新 low 和 high 时,mid 如何处理?")]),s._v(" "),n("br")])]),s._v(" "),n("p",[s._v("处理好了上面的问题,自然就可以顺利解决问题。将上面的思想代入到本题,我们要找 “"),n("strong",[s._v("阿珂在 H 小时吃掉所有香蕉的最小速度 K")]),s._v("”。那最笨的就是阿珂吃的特别慢,每小时只吃掉 1 根香蕉,然后我们逐渐递增阿珂吃香蕉的速度到 i,刚好满足在 H 小时可以吃掉所有香蕉,此时 i 就是我们要找的最小速度。当然,我们没有这么笨,所以可以想到使用二分的思想来进行优化。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("然后就简单了,我们寻找二分查找模板中初始条件和终止条件(注意,这里的 high、low、mid 都代表的是速度):")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//这里我把最小速度定义成了1,可能大家会觉得奇怪,模板里不是0吗?")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//所以这里我其实是想说,算法千变万化,大家不要生搬硬套。")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//从字面理解,如果定义成0,意味着阿珂会选择一个香蕉都不吃,难道阿珂傻? ")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" low "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//最大的速度,当然等于吃掉最大一堆的香蕉,毕竟一小时只能吃一堆,再大也没有意义")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" high "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxArr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("piles"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//中间速度")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("low "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" high"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])]),n("br"),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("minEatingSpeed")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" piles"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("H")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" maxVal "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" pile "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" piles"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n maxVal "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("maxVal"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" pile"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" maxVal"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("canEat")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("piles"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("H")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("canEat")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" piles"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" speed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("H")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" sum "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" pile "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" piles"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//向上取整")]),s._v("\n sum "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ceil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("pile "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" speed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" sum "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("H")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(750),alt:"PNG"}}),s._v(" "),n("br"),s._v(" "),n("p",[s._v("额外补充(昨天有人问我的问题):")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[s._v("第一:"),n("strong",[s._v("就是不需要再对原数组进行排序了")]),s._v(",因为我们是把这样一个问题转化为二分查找的问题,而通过 canEat,计算在 mid 速度下吃完 piles 共需要多少小时。已经将 piles 利用进去了,所以此时并不需要对 piles 排序。")]),s._v(" "),n("li",[s._v("第二:就是昨天有人私下问我,对 (pile speed - 1)/speed 不能理解。这个其实就是向上取整的一个小技巧,相当于 Math.ceil(pile * 1.0 / speed)。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("留下一个问题,假如我们的阿珂就是笨笨的,将 low 初始化成了 0,此时的循环条件应该如何写?if 条件如果成立,low 和 high 又该如何进行调整?大家可以尝试一下!(一百个人有一百个二分,不要妄图和别人写出一模一样的代码,这是没有意义的。只有自己理解了,一步步的分析问题,写出自己的代码,才是真正属于你的)")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])])}),[],!1,null,null,null);t.default=A.exports},747:function(s,t,a){s.exports=a.p+"assets/img/1.fae9c798.gif"},748:function(s,t,a){s.exports=a.p+"assets/img/2.b3d11d61.jpg"},749:function(s,t){s.exports="data:image/jpeg;base64,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"},750:function(s,t){s.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/71.70e158f7.js b/learning/.vuepress/dist/assets/js/71.70e158f7.js deleted file mode 100644 index 1c00977d..00000000 --- a/learning/.vuepress/dist/assets/js/71.70e158f7.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[71],{1116:function(A,v,t){"use strict";t.r(v);var r=t(3),a=Object(r.a)({},(function(){var A=this,v=A.$createElement,r=A._self._c||v;return r("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[r("blockquote",[r("p",[A._v("今天为大家分享一道非常经典的面试题,和马有关。无论是校招,还是社招,在各大公司都出现过,我也曾经问过别人。")]),A._v(" "),r("p",[A._v("话不多说,直接看题吧。")])]),A._v(" "),r("h2",{attrs:{id:"_01、题目示例"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[A._v("#")]),A._v(" 01、题目示例")]),A._v(" "),r("table",[r("thead",[r("tr",[r("th",[A._v("25匹马的问题")])])]),A._v(" "),r("tbody",[r("tr",[r("td",[A._v("有一个赛场上共有25匹马,赛场有5个跑道,不使用计时器进行比赛(也就是每次比赛只能得到本次的比赛的顺序)")])])])]),A._v(" "),r("p",[A._v("试问最少比多少场才能选出最快的三匹马?并给出分析过程!")]),A._v(" "),r("h2",{attrs:{id:"_02、题目分析"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[A._v("#")]),A._v(" 02、题目分析")]),A._v(" "),r("p",[A._v("实在不想和那些答主一样,磨磨唧唧的分析完毕之后,再给你们扔出来正确答案。答案是7次,**懂得走人,今日合格,咱不浪费时间。**懵对的和猜错的往下看,"),r("strong",[A._v("只会3匹马的也请往下看")]),A._v("。")]),A._v(" "),r("br"),A._v(" "),r("p",[A._v("分析过程:")]),A._v(" "),r("ul",[r("li",[r("p",[A._v("5次:首先我们把25匹马分成5组(A、B、C、D、E),跑上五次,得到每组的第一名。")]),A._v(" "),r("img",{staticStyle:{zoom:"67%"},attrs:{src:t(791),alt:"PNG"}})]),A._v(" "),r("li",[r("p",[A._v("1次:然后我们让这5个第一名跑上一次,得到其中的前三名。"),r("strong",[A._v("注意:这里就可以得到所有马中跑的最快的第一名A1了。并且,D1和E1所在的组可以直接淘汰。第二名和第三名一定不会在其中产生!")])]),A._v(" "),r("img",{staticStyle:{zoom:"67%"},attrs:{src:t(792),alt:"PNG"}})]),A._v(" "),r("li",[r("p",[A._v("1次:因为我们已经跑出了第一名,所以A1不需要再参加比赛,同时,D1和E1所在的组已经淘汰。C1作为第三组的第一名,C组不会有跑的比C1快的。而B2有可能是比C1跑的快的第三名。同理,A2和A3也有可能是比B1和B2跑的快的。所以第7次比赛,我们让"),r("strong",[A._v("A2,A3,B1,B2,C1")]),A._v("来一起完成。(求大家不要怪我啰嗦,,,我是实在担心有那么几个同学听不懂...)")]),A._v(" "),r("img",{staticStyle:{zoom:"67%"},attrs:{src:t(793),alt:"PNG"}})])]),A._v(" "),r("p",[A._v("最终,我们"),r("strong",[A._v("通过7次比赛")]),A._v(",得到25匹马中的前三名。")]),A._v(" "),r("h2",{attrs:{id:"_03、升级版本"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_03、升级版本"}},[A._v("#")]),A._v(" 03、升级版本")]),A._v(" "),r("p",[A._v("还是25匹马,如果我们要找到其中跑的最快的"),r("strong",[A._v("前五名")]),A._v(",最少需要比赛几次呢?(这里我想说一下,我看到"),r("strong",[A._v("网上有不少地方把这个题讲错了")]),A._v(",所以不会的同学建议还是认真看一看)")]),A._v(" "),r("br"),A._v(" "),r("p",[A._v("在上面的的分析中,我们已经明确了第一名。**但是第二名和第三名,是可以在A2-A3-B1-B2-C1中产生的,**我们需要分别进行讨论。")]),A._v(" "),r("img",{staticStyle:{zoom:"80%"},attrs:{src:t(794),alt:"PNG"}}),A._v(" "),r("ul",[r("li",[r("p",[A._v("假若二三名分别为:A2,A3")]),A._v(" "),r("p",[A._v("对于这种情况,"),r("strong",[A._v("第四名可能是A4")]),A._v(",此时第五名是A5或者B1。"),r("strong",[A._v("第四名也可能是B1")]),A._v(",此时第五名是B2或者C1。所以我们只需要让[A4,B1,A5,B2,C1]参加一次比赛,就可以得到前五名。")])]),A._v(" "),r("li",[r("p",[A._v("假若二三名分别为:A2,B1")]),A._v(" "),r("p",[A._v("对于这种情况,第四名可能是A3、B2、C1。"),r("strong",[A._v("假设第4名为A3")]),A._v(",第5名可能为A4、B2、C1。"),r("strong",[A._v("假设第4名为B2")]),A._v(",第5名可能为A3、B3、C1。"),r("strong",[A._v("假设第4名为C1")]),A._v(",第5名可能为A3、B2、C2、D1。此时我们需要至少两次比赛,才能在[A3,A4,B2,B3,C1,C2,D1]中找到第四名和第五名,所以就需要9次。")])])]),A._v(" "),r("br"),A._v(" "),r("p",[A._v("其他的可能性还有:")]),A._v(" "),r("ul",[r("li",[A._v("假若二三名分别为:B1,A2")]),A._v(" "),r("li",[A._v("假若二三名分别为:B1,B2")]),A._v(" "),r("li",[A._v("假若二三名分别为:B1,C1")])]),A._v(" "),r("br"),A._v(" "),r("p",[A._v("上面这三种情况分析的方法一致,就不一一说明了,大概的思路就是,我们需要"),r("strong",[A._v("根据第三名,分析出可能的第四名")]),A._v("。"),r("strong",[A._v("再根据第四名,分析出对应情况下的第五名")]),A._v("。最终再在这些马匹里,抉择出真正的第四名和第五名。")]),A._v(" "),r("br"),A._v(" "),r("p",[A._v("因为题中问的是"),r("strong",[A._v("最少比多少场可以跑出前五名")]),A._v("。所以根据分析,假如"),r("strong",[A._v("第二名和第三名是A2和A3的话,只需要8次就可以跑出前五名")]),A._v("。最少次数是8。(这个题目其实是不严谨的,所以如果有面试官问到这个题,最好是给出所有可能性的推导过程)")]),A._v(" "),r("br"),A._v(" "),r("p",[A._v("我看到很多答主有讲这道题,上来就给一个8,但是都没有说清楚原因。之前我去成电校招的时候,也问过一个学生这个问题,对方上来就给我一个8,问其过程,一脸懵逼。我希望看过这篇文章的朋友,下次遇到这个问题,能直接给出所有的分析结果,"),r("strong",[A._v("挂掉面试官")]),A._v("。"),r("strong",[A._v("毕竟我们这些懂得人,就是这样朴实无华且枯燥。")])]),A._v(" "),r("br"),A._v(" "),r("p",[A._v("所以,今天的问题你听明白了吗?评论区留下你的想法吧!")])])}),[],!1,null,null,null);v.default=a.exports},791:function(A,v,t){A.exports=t.p+"assets/img/1.c0e67383.png"},792:function(A,v){A.exports="data:image/png;base64,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"},793:function(A,v,t){A.exports=t.p+"assets/img/3.57538b3d.png"},794:function(A,v,t){A.exports=t.p+"assets/img/4.ee799e61.png"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/72.af7e1095.js b/learning/.vuepress/dist/assets/js/72.af7e1095.js deleted file mode 100644 index a5055883..00000000 --- a/learning/.vuepress/dist/assets/js/72.af7e1095.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[72],{1133:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("这两天熟悉的朋友该知道我情绪不太好。但总不能借着由头,便拖期延稿诉衷肠。毕竟消除恐惧的最好方法就是面对恐惧。微笑着面对它,坚持才是胜利,加油!奥利给!")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("王者荣耀新赛季出了个“镜”,那我也出个“镜”呗。那个不会玩,这个总该会“玩”吧?")])]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第858题:镜面反射")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("有一个特殊的正方形房间,每面墙上都有一面镜子。除西南角以外,每个角落都放有一个接受器,编号为 0,1,以及 2。正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接收器 0 的距离为 q 。返回光线最先遇到的接收器的编号(保证光线最终会遇到一个接收器)。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: p = 2, q = 1\n输出: 2\n解释: 这条光线在第一次被反射回左边的墙时就遇到了接收器 2 。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[s._v("上面的题目绕得很,大概就是这么个意思:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(894),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("blockquote",[n("p",[s._v("这是一道数学题...不喜勿喷")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("我们知道光是由西南角发出的,也就是左下角。发出之后可能会出现多种情况(注意,下图略过了部分光线反射的情况)。看起来是十分复杂,无迹可寻。")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(895),alt:"PNG"}}),s._v(" "),n("p",[s._v("但是如果我们把光线的运动轨迹拆开来看,就可以观测到,"),n("strong",[s._v("光线每经过一次折反,都会在纵向距离上移动 q")]),s._v("(首次与东墙相距的距离)。同时,**一旦其向上行走的距离为 p 的整数倍,就一定会碰到某个接收点("),n("strong",[s._v("注意:这里我们不需要考虑北面墙是否存在,根据光的反射定律可得")]),s._v(")**可以参考一下下面这张图:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(896),alt:"PNG"}}),s._v(" "),n("p",[s._v("问题变得简单了,"),n("strong",[s._v("光线最终向上走的距离,其实就是 p 和 q 的最小公倍数")]),s._v("。我们设最小公倍数为 L,会发现如果 L 是 p 的"),n("strong",[s._v("奇数倍")]),s._v(",光线则到达"),n("strong",[s._v("北墙")]),s._v("(可以参考上面的图)当 L 是 p 的 "),n("strong",[s._v("偶数倍")]),s._v(",光线将会射到"),n("strong",[s._v("南墙")]),s._v("。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("问题来了,如果光线是射向南墙,因为只有一个接收器了,必定只能遇到接收器 0。但是如果射到了北墙,如何区分是 1 和 2。这回到了一个初中数学题,我们可以通过"),n("strong",[s._v("光线与东西墙的接触次数,来判断最终的落点是 1 还是 2。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("根据分析,得出代码(这道题应该不需要给多语言版本吧,都长一样....):")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("mirrorReflection")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" p"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" q"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" p"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" q"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n r "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n m "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("p "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("q "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("%")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(897),alt:"PNG"}}),s._v(" "),n("p",[s._v("这道题学会了吗?如果不会就不要玩镜了吧(皮一个)。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("快来评论区留下你的想法吧!")])])}),[],!1,null,null,null);t.default=r.exports},894:function(s,t,a){s.exports=a.p+"assets/img/1.c1a9953b.jpg"},895:function(s,t,a){s.exports=a.p+"assets/img/2.3fcd5ea8.jpg"},896:function(s,t,a){s.exports=a.p+"assets/img/3.b63f9142.jpg"},897:function(s,t,a){s.exports=a.p+"assets/img/4.0c5afe33.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/73.d8920180.js b/learning/.vuepress/dist/assets/js/73.d8920180.js deleted file mode 100644 index b610689c..00000000 --- a/learning/.vuepress/dist/assets/js/73.d8920180.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[73],{1057:function(s,t,a){"use strict";a.r(t);var e=a(3),n=Object(e.a)({},(function(){var s=this,t=s.$createElement,e=s._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[e("h2",{attrs:{id:"_01、哨兵节点"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_01、哨兵节点"}},[s._v("#")]),s._v(" 01、哨兵节点")]),s._v(" "),e("p",[s._v("在链表的题目中,十道有九道会用到"),e("strong",[s._v("哨兵节点")]),s._v(",所以我们先讲一下什么是哨兵节点。")]),s._v(" "),e("p",[s._v("哨兵节点,其实就是一个"),e("strong",[s._v("附加在原链表最前面用来简化边界条件的附加节点,它的值域不存储任何东西,只是为了操作方便而引入。")])]),s._v(" "),e("p",[s._v("比如原链表为a->b->c,则加了哨兵节点的链表即为x->a->b>c,如下图:")]),s._v(" "),e("img",{staticStyle:{zoom:"80%"},attrs:{src:a(495),alt:"PNG"}}),s._v(" "),e("p",[s._v("那我们为什么需要引入哨兵节点呢?举个例子,比如我们要删除某链表的第一个元素,"),e("strong",[s._v("常见的删除链表的操作是找到要删元素的前一个元素")]),s._v(",假如我们记为 pre。我们通过:")]),s._v(" "),e("blockquote",[e("center",[e("b",[s._v(" pre.Next = pre.Next.Next ")])])],1),s._v(" "),e("p",[s._v("来进行删除链表的操作。但是此时若是删除第一个元素的话,你就很难进行了,因为按道理来讲,此时第一个元素的前一个元素就是nil(空的),如果使用pre就会报错。那如果此时你设置了哨兵节点的话,此时的pre就是哨兵节点了。这样对于链表中的任何一个元素,你要删除都可以通过pre.Next=pre.Next.Next的方式来进行,这就是哨兵节点的作用。")]),s._v(" "),e("p",[s._v("下面我们看一道题目,看一下哨兵节点的应用")]),s._v(" "),e("h2",{attrs:{id:"_02、题目讲解"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目讲解"}},[s._v("#")]),s._v(" 02、题目讲解")]),s._v(" "),e("table",[e("thead",[e("tr",[e("th",[s._v("第19题:删除链表倒数第N个节点")])])]),s._v(" "),e("tbody",[e("tr",[e("td",[s._v("给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。")])])])]),s._v(" "),e("p",[e("strong",[s._v("示例:")])]),s._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[s._v("给定一个链表: 1->2->3->4->5, 和 n = 2.\n当删除了倒数第二个节点后,链表变为 1->2->3->5.\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br")])]),e("p",[s._v("说明:")]),s._v(" "),e("ul",[e("li",[s._v("给定的 n 保证是有效的。")])]),s._v(" "),e("p",[s._v("进阶:")]),s._v(" "),e("ul",[e("li",[s._v("你能尝试使用一趟扫描实现吗?")])]),s._v(" "),e("br"),s._v(" "),e("p",[s._v("思路分析:")]),s._v(" "),e("blockquote",[e("p",[s._v("首先我们思考,让我们删除倒数第N个元素,那我们"),e("strong",[s._v("只要找到倒数第N个元素就可以了")]),s._v(",那怎么找呢?我们**只需要设置两个指针变量,中间间隔N-1元素。当后面的指针遍历完所有元素指向nil时,前面的指针就指向了我们要删除的元素。**如下图所示:")])]),s._v(" "),e("img",{staticStyle:{zoom:"80%"},attrs:{src:a(496),alt:"PNG"}}),s._v(" "),e("p",[s._v("接下来,我们只要同时定位到要删除的元素的前1个元素,通过前面讲过的删除操作,就可以很顺利的完成这道题目啦。")]),s._v(" "),e("h2",{attrs:{id:"_03、解题过程"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_03、解题过程"}},[s._v("#")]),s._v(" 03、解题过程")]),s._v(" "),e("p",[s._v("现在我们来完整捋一遍解题过程:")]),s._v(" "),e("ol",[e("li",[s._v("首先我们定义好哨兵节点result,指向哨兵节点的目标元素指针cur,以及目标指针cur的前一个指针pre,此时pre指向nil。")]),s._v(" "),e("li",[s._v("接下来我们开始遍历整个链表。")]),s._v(" "),e("li",[s._v("当head移动到距离目标元素cur的距离为N-1时,同时开始移动cur。")]),s._v(" "),e("li",[s._v("当链表遍历完之后,此时head指向nil,这时的cur就是我们要找的待删除的目标元素。")]),s._v(" "),e("li",[s._v("最后我们通过pre.Next = pre.Next.Next完成删除操作,就完成了整个解题过程。")])]),s._v(" "),e("p",[s._v("下面是解题过程图,可以看得更清楚哦。")]),s._v(" "),e("img",{staticStyle:{zoom:"67%"},attrs:{src:a(497),alt:"PNG"}}),s._v(" "),e("h2",{attrs:{id:"_04、题目解答"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_04、题目解答"}},[s._v("#")]),s._v(" 04、题目解答")]),s._v(" "),e("p",[s._v("根据以上分析,我们可以得到下面的题解:")]),s._v(" "),e("div",{staticClass:"language-go line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-go"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("removeNthFromEnd")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("head "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("ListNode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" n "),e("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("ListNode "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n result "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("ListNode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" head\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("var")]),s._v(" pre "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("ListNode\n cur "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" result\n i "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" head "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" i "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n pre "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" cur\n cur "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" cur"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n head "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" head"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next\n i"),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n pre"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" pre"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Next\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br"),e("span",{staticClass:"line-number"},[s._v("4")]),e("br"),e("span",{staticClass:"line-number"},[s._v("5")]),e("br"),e("span",{staticClass:"line-number"},[s._v("6")]),e("br"),e("span",{staticClass:"line-number"},[s._v("7")]),e("br"),e("span",{staticClass:"line-number"},[s._v("8")]),e("br"),e("span",{staticClass:"line-number"},[s._v("9")]),e("br"),e("span",{staticClass:"line-number"},[s._v("10")]),e("br"),e("span",{staticClass:"line-number"},[s._v("11")]),e("br"),e("span",{staticClass:"line-number"},[s._v("12")]),e("br"),e("span",{staticClass:"line-number"},[s._v("13")]),e("br"),e("span",{staticClass:"line-number"},[s._v("14")]),e("br"),e("span",{staticClass:"line-number"},[s._v("15")]),e("br"),e("span",{staticClass:"line-number"},[s._v("16")]),e("br"),e("span",{staticClass:"line-number"},[s._v("17")]),e("br")])])])}),[],!1,null,null,null);t.default=n.exports},495:function(s,t){s.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoUAAAEqCAAAAABG4HWuAAAgI0lEQVR42u2deWBU1dnGn3tnJpkQEwgQ9r0gCMTKIqDIJrJKKbhbqFqrVlCwfF8tUj+1dUHrUu1i61KpFqpi5VP6ueICWgsIbUHUyBpkDRKQJSSZmbuc748k49xzLnPuTO7lQPP+/iFzeOY979z7zP7micZQSw0ypKxbptdwge3s7EMVs7yjD1USB9r5UKXmSBsfqlRVtfKhSmWihQ9VDrMiH6p8HS50/488AOH6Czmp/5NwXgRsM6xz19Y4iWXxkoQWkUnsrKpENOeKrufIJAk97FwwbV7C+F5EiYcqpi5U4RaYIVbhJIiH5FVCIeeKwfgqIb6KILFNeZWw7UcVoZdUjyWPh7OMxlUFdGGFW2CWB0mIs5gmlwi92NB5L0MqEXqx7RDvZU0qEXqxIK1iCTfR0GUSsYop3kRBwuRVeIlm6vIq/NYGpO4QJTovST31wskiiBMOuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQT3KyyznlyoSh1wS/kJUkzivkEthSiSmXuFSJ8e3LJbDkVUSJsGCaMok/VQxTXsUwpL0wP6oYx6vimHJ1jMkx8IN1jF+AJpV4qcJLXK4jl2gnUZWT6RaduF7kpz5tL0kXRlMVNVrUeRUrEREmGzmJafASoYpp5Aiz1lJJjZ7rXDBMXmLoUZnEpUouf6DEKrykRhgYtniJFYryEm6BxcIRiQQJvkrc5hbsOF9FkKDGlleJhGVVIvxKjAnuCIclEkTCfJUUA9HrQkI95EJCPeRCQj3kQkI95EJCPeRCQj3kQkI95EJCPeRCQj3kQkI95EJCPeRCQj3kQkI95EJCPeRCQj3JubA9qasmuHkxl0BJa49MYspjKZnpR5XK+c243pi0ioukevT53EbcUXDrhZfseLpAshGzxF74KonElAHpJczig0LFKuteyef6h7SKIEENpndveC/VOjdrXb9R+1QXOlKHhURhy4zwj5qHC2WSuCatwirlVXRumtO0eEn1QvhC4RRuoxzOPwmxF06C6mf96aX3KMdFw+amdFkixJ1oQYL9C/zpZWx/x8UE4zayjTB3vxIMBDtUcHxJ8pY4NC6z1jn8rLXGVTUNXhIWB6lz+VlrvUAmCbtMSXOSY7j0/oYf623jcpzNGGZUPmvNS5pgzk0N72XFdbnOXuJ2HnfkXGatOQmieOS7De9l0c/znL3EGLeRlYgIs9Z8LzVh7kynzlrzD5ynKIXfaniNRMNLAACKfOhlk0+9tPKhl2KfekkDvTsh1EMuJNRDLiTUQy4k1EMuJNRDLiTUQy4k1EMuJNRDLiTUQy4k1EMuJNRDLiTUQy4k1PMfkSgsBP9miRDAm0WisNB+lhj8TtnkEvvUS0Lai1+Jwo4HRZt/jGRMCBDWpBIPVfyRiOm1WeLcSWkv3OHN5kD59kTnRy8a75dUSdKFjlHSGo2bLHVLFOYkbonCgkRMFJZKPCQK8zPG2RJ2FsoqUTgH/sD1EucHqe14SJhy5Y+DX8OjEWfhGBPcISYKC71wNwixlNNGrwsJ9ZALCfWQCwn1kAsJ9ZALCfWQCwn1kAsJ9ZALG4pfX5b4gV9flpxoyIUNZe8Te72LK9591w6uFbZ5YYXqw5EV5MKGUvjm95/52qt4y/3zTa/azNEiL1zz0jHVByQLyIUNpdmVK26Z9LJHb8W/2hdkL51Hv/XDye+oPiKZ01hcyFhQlUNDRlatunTY29WW+l6iIwYcWz72gg9qPD/tB9dLJvyHpCWlp6r84KH8Zm2LQj7UEml/5epqrJ405oZBxREP8lhZRbxV+6Jg7v59LtwQx3urLry2X0svN/bA7gNWy/atfZtJypbG4MKjzy9YC7SdNLMkEBtGhp63DDDfXHnBRed2kprr6IKnS9H6kplnBHLq88a9vhao/uvyiVMGt5Oq1/9h6VdoOnFeSRCtZELShc4XNox7nWPDEh66M5dYMIUhM6nErRfuCSf9izL7jfuNmc33r3o6595maYWwnIVsmFyKJmxuKwZTQ+exaw4DOLLkw+HjR8uel/fMHTKresXjB56NptdxOzEIO7v0AvQd8Xk1gAN/fuf88SMkveye8/e+F0c+/GvF0iYZHReXU+/ai7OGdhxJONWF3LCsMDtr8TeJ+SFhWVWRHBSOyvd23Tmn4PDzv1h5TOLCN7N867CnroGKJR/27yATj7+7W/zV+5Z+MC69bOHq7HrZVncPLf/L+4PSP9Gxpz/q+MjA8Fuz3/10cPqaFn8G5CdNkNi24S4JH3fK1UMWMIRB2GwShe0sqogpvuknS3Mu7z+5KZq2za+UPU5tanB4ZcX7fWWS+/qi4LLXdi6XuPBf/2poL+Xvp79HHHnDvHxkCBM//vyQpBI35eolUVg+5ZoqcZ/4Fy4yYcBfkNheJHoWEr6sJqykfzGWN2rQ2hfLSj891FVysHHT3Y6LhjBIHdM5w9dK3rjjy7rLg38eHpN+jy7dARSe9d4Xkl4euN5xMWFzz+Aszs8310oW3nug7vL5d2y7Lt0O+45gSAjIu9uSzYdrkl8l8OAOceI/9TqN4N2JtXzuJ5FwiMnflUabOy56zbU+supLANCjJT+ZEl4p2aOlDgDNw7IvOZo4e/Gaa31gxQEA0PMG3j4G6b/U2Z9ATwCQvEA9ETQCF356z4Yh3xnQZeetR4Kpb695B4DWomTa1OZydZkFAPsNHwKn3Xp5+58AQi37Xz0pX6aN6th3BoDd1cVFwRwZzzQCF27+ouOTfcDW78vzoZgLR97cAhQPmjRZ/tEIgK83nQUcKa3pF0gv5W/uBtqdM3mCh0j09lEsHwUcmFd63/hgjoxnGoELmW2YsL9Y8lXHQL4nYBuXoHjEhDEdPerv+H2H2NJ1LSYE0Yv18XtoO3rCqLZexK2GbH59Ws/4y28d6O5FHiSNwIXdeqyeM7xiw5Ym+x+7rY3/5eMvHLn44nPkH1fX81q8o7F6509PD+KmHnjFvMrLx9UAgMiP3/90xplVKw7dLH3bFjSNwIUlN+5dvtY848FP/vj01QG4cNf+5wa19PLVHQBo2tnDnogj9yezgvgah5XlLOrXwnPlPov/e8VKu8mP5wbzzWYGNAIXRqeNXHf07E7Ry39wtHcA5Yv/lOv9O+HzVunh29YZZ7b265fnnZzxeE4G30+HBr29a0t+j1Z+hQpkTyNwIcKdOwNASPqBclY0y0QcPg0oHhvUDdUy6gXQ8nv1CqqXjGgsk13EyQy5kFAPuZBQD7mQUA+5kFAPuZBQDyUKp0CJwu6cUonC/OOqSxVhml8u8VDFtwd0PlFY6IU/CsH1omfcS3CJwlwv4kYeejlhicJheaKwdNZalLgkCvOSgFJ8DZMf6q7RhflCXuL1uzwZIS5RmClMFA5TojDxnw+5kFAPuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQT3IubHvqqgVuVJDZOj/lam2XSSxhEFaQsARXxWbSKqJkP5ZNavihOIYjzmY89cKPXZZj0ccN72U/DvK9CGdE3ksFHnmx4b3swFfSXoQDxRsIcf2Iu6RrqgsdETtxfoTVMoToiW3tZBIh+VSUsC+5KqYprWKafMSqjl27Gn60gXxnMy5ZrvxkqWHxGZQ7sXmzH70043vxmOWaShHWr/ejlxbOXoSNbGEGWjAQDoabHl/iPmstxk1rOdJZa0EiDlJrubJZ65AuSPhZa13njdpuC5d9Zpi58oltPqg1Vs5lV+mC3W0+y1UTZq0H7ujkXEhYXG4ii/EprIIERyvbcyshftaa8VUgzFp/p5xLh3JJhI2EJRIctLkwRCbMWoOvwuSz1oxmrYmTCnIhoR5yIaEeciGhHnIhoR5yIaEeciGhHnIhoR5yIaEeciGhHnIhoR5yIaEeciGhHo8u9OvvGAby9xCDgkkXTmwdNTfap27TVjnBicK8xJ9EYVMucanCZwEn5BIvicJyiUsVIQvYlEo8JAobHqo0IAs4oyomvCQKO2YDvcxaa5kP3IoSm5dkNWvNND+q6GIv/Eylh1nrkOZHFV2XVfEya61JexGriFPSOn8lD+dVrCL0kipJutAxvlmj8VPSibAw5cqPQNtiorAgEROFeYmYKMxLxERhTS5xqcLPp9q6WEWeKMxLDJfQYecCs0IRiQRhvkqccQsuicJMqGLJq4SFKVehCr8SY4I7QmGJBOEwXyXFQPTuhFAPuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQT3Iixzl/yrhxVAbT4q8ql4hVDH4y0GUjSKvwEpOX2PIqNgx5FWF205ZXESXC9K/FZBKhChOryCWWJa9i2TKJyWRVmIcqlnacKjmpLuQcJHjO5heYXCKvwkSJsMCkEksuOcWq2La8ivxw2x56OWFV0t2ipAsdIbExTZ4orEVlEg9VGF8lq0RhU4/KJEIVMS5Y46tklShsh6ISCRPmU8UsYCMelUi8JArHbFkVOyFMuTK+SoRfESQuicJClXCEr+KWKMyfEuEiP/EvLniQaPwzsriR5stGUomHjfzqRXoUtCzKsoCOgsaEX+1gfhwFLZ2E3p0Q6iEXEuohFxLqIRcS6iEXEuohFxLqIRcS6iEXEuohFxLqIRcS6iEXEuohFxLqIRcS6knO1HCDl8JF5iEXVybxUMXTRj71IruOB4mnvGDpTfS0USASL70wX3pxqVu7oKW60Bl7y4QUXCEzVpSIicJSCfNQxZZKTFESl1fhJQkPVSxhVFNMFI7JJB6qJEx5FTFRmJcY/lRh8ipiojAvMXGcKgoShflAWCaXCPm7LlW0zKsElQV8ohKFYQnpzEFV8SVRWOhFYaJwWJooLEjELGBBosklbrnE/PGXS06mRGFLlyYKhzxUCYVlVfxJFA6FKFGYOKkhFxLqIRcS6iEXEuohFxLqIRcS6iEXEuohFxLqIRcS6iEXEuohFxLqIRcS6iEXEuohFxLqIRcS6tHq57A3pq4K4ZYQkxQnckGtjGnCwJ4mkyAx4qeSjTz0cmg6P8LH+HuXSy+8hJmXXCPbGbIUUHxxKzf2l1Uvtj1jYqZHQZSseIQb+xM2Es+I2IvF7hrY8F7EYeU6Sa/UKdeeqYoYpHHB2A5fOMuxsVuiMJ9LLMYF7yvzpxfD2UtWicJfb/Onl4izl6wShf+91Z9emjl7ySpReH+kiDuWKR5LnnItFeclTdM0CEs4nzWcarGsfEHoBfihD72UetnaQy93+9DL63xdTzuL7S70oZfHfenFxVPJK9PrQuIkgFxIqIdcSKiHXEioh1xIqIdcSKiHXEioh1xIqIdcSKiHXEioh1xIqIdcSKiHXEiopwGJwv7A1c0qUdiv1sRehH08JOf61Uz6y14OVEDHJbteWCCJwj4hxPhmkSgsBP9miRAG7CFRWMgl9qkXg+8li1xiv06ZvBd5LrG3ROGw8yrcBKVth8S/Uu8LmnMncSNTiOgVJGH4g9ALX1joxWK8JAR/4NJRhY2YpXOvpk6mXgQDQdfDx5ckf3IMEZsaN1NsJUJ+3SS+O+dOYqKw0IsYF+yXC7lJasMO8/cIPsWXWeGA7hHcTjbjdhYThQWJfy50FrbAu0PIJbbEXvgx9dQq9O6EUA+5kFAPuZBQD7mQUA+5kFAPuZBQD7mQUM+p6cIq1Q2cnL2watUdZMmp6cKvv/+Z6haS7Lp5i3fxzgULLO/qTGHrf7ZT9eHIilPThR0x9OZNRkDzFZn2svu823eYHsXbfvVwgC7UO3w87MGvAtwgsMZVN5Adc/H46Ds/qVTdBgDkzaiaP+rBjSfFE3PbaRVzR/6+7JR7Yj5FXdhtOvY8cPEv/3HYo57FvD5aZYx+5mRsv33qY2uOer2G5dfcjUDk3OHYOPviJ9Z5vU+wROxkeEbx68t3jkMffdVzcA6OfFzec0DEh3o80Sv+thtl9y25cPzZTeXq8lVfVOW2GdIr10vpjCme+v5X2HjnyxeO75fv5dC8u9VsN7xXMMMh3SauOYT1X/S7cNyZXm7sho/22sXnDFL+UBSQC+2Vz7Rf1Mf6x08S8wcEUV/vM/W3ADaWvTXi4nOjEvG+X766A2hactvYIO4QCJ8zcjFgr9/0xqhLz5aaq3zO8n0o7Pc/owOZlMsZt/R9IL76s/+74PIzpeq//uaTSuT1uWtSEK1kQtKFzmlNxg1vMhgZPaUVTV7+8UPP7n/si2vOk5x5i9tYHM20xV6AvAteLwOQ+Hzb28Ou65B+h0XPtVrYoezFdxYObpm+F5PvRZy4FXpJAM3HfFgOoGbdptdH3iCbLD380vQJhxd8UL1c8rgp9CJO3Npcb4gDHS7492EAx9aUvjruWskp+/y2nWOm5T777qzzmqUXGpJeGEwL6SUwxSvVLuSmulC4SRyZTfzrg67e/sKkrcsHXd9WonyzUyZ1U45M3VuT2Ladrw5Oqzz86eHHrgidV7jxE9mr9qdfyK6X+LHaf6s3lb3SUya+6b48u+fsf718dXrZnQ9k10usrpdjpVtfbpVWyR7eccZTbbQuX5StHZO+JuPd4MEdtqCwjy9JujAv9f9rND5ROJGT2QuZ0FV//+ulaHnVENkTDz/Pz+SJ2kwDYCVvt51If58vnHfdty3DqIb0ox0zy15Mz70A+p2nITSsb+k/JS7MtpdESi/pP7M5sNa6pgMw8JZS2TnKcZgDMea8DCsR4V7ZCRJEwtxKaqJwQK8LgfzbV28PDZsufeE7+WXHRdPI5a5So3Ovsw0zV4f9zqzaD4tzWw+d3blduh0iHWr+XLpra1niW7JeZj3MbRTlzk9NiItxT1hRDfZf5u0BAETbjLqlamj6PXoUAAj1fU32UfeDsxwX4zZ3Eu14mHutE7fzAOvX9x4CADRpN37mumnpdtgXRwkAzJYdluAJzIVoXrQ991s5PhRy5chbWwAg0nXYZcOj5WmllS88tLt9qy5tPwmql/I39wBAtPuIK84JrZSIa60T1QP6tKbsjUMAkN9z1LR+WJdWethAO69lAyYwF1b/YVPh0aWjxgfzKQD7/H8BoMe4iec0k2k3PLnn+gu6Fn/+XwF9sGytXg5A7z1+4tmnydVfJnIAtjvePZBejLfXAcg5c/zE/tJPagrC2NoXYB/s79cjmCPjmaBcyN75S9Wjb7/7x+6nB1K+5qWdQJfLxn+7uVy7o6zb7O6wl+0u8lI5cype2Qf0uHJMiYdPLoFjK8cC+0rjg72IM2b7G18DJd87v7eH+0OHKN6bAmy/d/Mz/6ku3Lxg56U3DPps2YDZBUGU374Qbb932enSx0EAyM3dUdHd/OiJQwWBfE1gf/o3dLlmSjevt3PGq32OLVjbeXIQvRgrP8TpP5rQycun52h+0aa/XTG06tk1lWcF0UsmBOTCYy+8UXxHk34//skfzhkVxMezD9k/uqlHrrfKZ5S8O37Yru25zXf94Jlu/rdS80T0xus7ef9apmx4c1Yem98igKOCfc8XzbuqtccX4/qslzdO7lqzLfFES29XCI6AXFj6SuHPeiBv6pp3F/UL4IlwV83f5d8M1NP7tsObPsgZfseaX63z/FVvBuxs8ZH3Vx05zaaMnX+Atfz5tCBeL9s7z3q6s3d58errl23W2t96XUCBB94JyIWDat+QdlscTPmijOqOfmfTsb6tMfji6q4B9NLxqQzEQz8Crt1o9QjkZQq0fkMz0he+eGBHtPNpyk0Y4Cc1QeLhtXcqzWrfCgTzuUSGvQC53w7oqEBrkukViouD6iUjlI9TEAS5kDgJIBcS6iEXEuohFxLq8ThfaIszZj7B1WUus2vcChNW/GpN7EVLrwAEiW8pvpKZPoZ0A3snYS/iaaxd0L3PWvuXTit0y+8kbCT2kpBczhZLGg9sn7BeTH6nLNKNfUsUlvYiJgpLZ63rJXnHzXI1ICSHhgJ67uaSWi0hP9XQ+JxQ+wTlpwobMVPnE4UD64WLPjX5cFSxF/NEZbmaTOoOwUDQ+ejZVIl7rrV45q3AEoX5BG3hBvG9MEHimwudhZiYKMz3YoOX+HWYdEmWtG3qQorvCcq1FkKrLUsIrRZ7CaXJtaZ3J4R6yIWEesiFhHrIhYR6yIWEesiFhHrIhYR6yIWEesiFhHrIhYR6yIWEesiFhHrIhYR6yIWEesiFhHqSM14bMr7qCl8i849kvrHAAfxpYcOrMFT40Ms2/OLehlexsdeHXnbhBz/0o5cvfeiFabvd/+PMVBc6cl+8JAq344d/IfySBjSZBEZ3Z+CM1yxXB/vb84Ow2fTCrB7OXrxmuTpXfOnFZj2dvXjNcnWwrQN30rLqxcIZzl6yShTeH+ZC/vxJFH6nt/OyafBGFbwsWszeIk0j90DRCi6TUjSqi5d5/8TK/YixOWMlFxefsLgTwmK8fwQJjla296GXkWvbOBdcvMz7R/TyQTvwGBF6XUioh1xIqIdcSKiHXEioh1xIqIdcSKiHXEioh1xIqIdcSKiHXEioh1xIAPvr/jUD+etYcsiFBFj9n/MOa7EGlsoOcmGjxzFFE1ViiOREBRcMyl20XVJ7OQmTS2zYjL+SVAImbsT4K0klLu1amqSKy41m0httixJLXsWSVXHpX16FSSUMtqU7DlX4IP9n9HJqaq+kJ29qWDhQzNLtpEJjACytvmztD3ZUyGuurRJKdaEzCZcJwbhCZGxWEj7jlsklHqqYtryKXGKIkoS8SiKLKmIWMC8xrRNWZUN/4I4hrQcCeLRn7CK0qnTaMHRaTVwLRWrCoQdvrJ3U0yPL+tb9AUebQYvuKNZMPffRS9rm/uritkAOe2V0nmZH3uzRAWDQc2o0DbBQNf8Ot14yShTmM0v5KGAXiZDCKkqYL1U0voqnXGI+89YWq/ASQ0wUFiV+VAlzIb5ZJgrr8iqhAQCmnrVGA9Bv+Aca2LHWTs1HPcMHW1d/b2HOmhm119aqF/257v8O7++Gis6rzgqFsNkMo8yIQAvhEgAWJgDA5o6hf7P+a/vpIc3eeVyPeU4U1oV4Wj4hVpAYooTPArblEqEXA7yEyUOH3XKJZXHBokS8R4CXhFxCh7myhi6TQNdkccFeEoV1qcQ2mQZgIDsXAM5no8GWadyAbe9NG99blL8UeKV+5a1I+dUAetzz9dwOj+rFXxavHRrCeU1DGFoUBspvfHLVc09U3W09tuIp4C/FA/b97vW30QZ5i5yHO+VGn5p/jZHwjapcAPXvT7Sbx40Zq8Nw3od7lIzC/fH+kx+IwdjyEmA/e33bZQBQNb/VPTrQ6aGuIeAqANPxYf+KPy7F1KnAc8AlPUsAoM2s7+BhjOn6FFB60SS3JsiFRJLyjb8DY0AEYN88xOfECgr+/Y9b2+Pjm6OIADiCCwCAbZzbZ14hAP3mYy+v/eUNXw6cP2Mb/th+KmbtqL3mC1v/PhOIRbWuKKksMFfdgJLerhuTCxs5Kb8atOPYqOTPWmX9n3CuKjDsxIpbRgCDz639lZREQR4AJG65+srax8z13aZcAjzZFfh9d2AgfltfJQxgT27kcAuM21+YyBt3vCbo88JGTs7K5I87+sD+fhzA85cBBfWfqyT+vOn+6H+NAXBbHlB2yF6J2l8k0ydP0wG8dhMWf+WsecPYWqpMAO1KF111FGgVLVx03CbosbCxk3wcWvh94JOFS6YCwy4HsK/uj5oXXfhpvOzGpPzGduW9ax8mIzcD2Jg3aRLQVAOGFwDDCwEAT9WLwwC04We3yF+yvdekpVsAvP+S2181Jxc2dgb/4q7aHzoB6GdexICODEC7pKLPSCz7Rm91Dx3YdxVww9hLAODGzgCKQ8B0AFdiQ2EX4KYva6Uv1X6CnDepsutpAw49ObEHUOIapUAubOxoc+c8CtR/ORNmqH/LHK83TBQrRtb9WB7vEmpZiTbLAMQKltTX2PpsybWTjIHzZ2zD7C7A4/Xrde4yZjzWH38qnqnbx3kBSC5s9ER/Wfuv8PcT61yo5e+cP3TDPABYvLp8pkuF4o4Ph48Zr+XUvjvBxsV3LVgP3PPZYowAACxlhTj64m06llzq3gK5kKjKYVf3uiGfz2SofyjMw72jIxhxe+qak3nmUzM+a5P84q/XXbgWAIYOBXa0zEfsmdk5+FPnEag6b/1ZrgXIhUT5M8OeQ+WhAc7Vpd+t+yG6qnw+CrsJV/tmCGLv7VOx+Oy6C1tnDplbejuA51f/BsBD38bzrceATZqpIz//jT4Rtw7IhYQ+OwcoLMSTP0pd7VX/Q+L+K1qiRw+AG+ypqPtgm5XPGX3Rps9vqlvuvgwVD/e/swkQvfAWAKh66dYw9uzdVFa298aJ741364BcSNT77Yfz7v9m8Zlk5tyzp10CvPYbAJixsSmAUgDbFld/Vv89yCMdLtszZ0J34GgNALZt0crRP9IA1H2KuLDDSJRf27Zj17HtO61ZPMbtz+WSC4l6wj+/7YH6nzddm1we3SsX2HrVdAD4fS8A5gSgY0nBlD61/6/NKdKN8TMAlLfKA7QtRb87PcYAbKm16fQRIbRdbISbA2j/HdffKdBcV73kF5YGkhyXVX6hsSOQ5Lis8gurDgaSHJdVfuGheKbJcZ/97sKxun1PzU9TpruE5Dj/8wuTLnT8woGX/MuybjKJl7TInV18qGLu7eRDlURFex+q1Bxu60OVqqpWPlQ5mmiZcRXrkNGkQK/49c+a1K8cZkU+9HIw3NRdEk19RhZG8SFbkEs8VDmJJIx6AaC3AMBa3vPNOgv+TCdd6HgE9fKMrHGPudk9I4tVsnlG1vNkEg/PyJpYJYtnZDuUx0uyeEY24txKVs/IMVteRZ7lWs2vZPWMHAnzVVKekWmmhlAPuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQD7mQUA+5kFAPuZBQD7mQUI+mKMmYIL6BHgsJ9ZALCfWQCwn1/D9tvRrVdGQhhwAAAABJRU5ErkJggg=="},496:function(s,t,a){s.exports=a.p+"assets/img/2.6ab27c2d.png"},497:function(s,t,a){s.exports=a.p+"assets/img/3.5be4a6f5.jpeg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/74.18b8450c.js b/learning/.vuepress/dist/assets/js/74.18b8450c.js deleted file mode 100644 index 26f0666e..00000000 --- a/learning/.vuepress/dist/assets/js/74.18b8450c.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{1070:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("穿插着为大家分享一道经典面试题目。额外说明的一点是,这道题本身很简单,但是却可以作为很多 中等/困难 题目的基础,比如 超级次方,实现pow(x,n) 等等,在面试时需要额外小心。建议大家掌握!话不多说,直接看题。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("本题原始版本出自《剑指offer》,leetcode或许是因为自身原因,并没有很好的进行移植。当然,这道题本身也确实不太好移植,尤其是测试样例的构建,很容易把系统搞崩掉,所以一些测试样例处理成内存溢出,也是情有可原。")])]),s._v(" "),n("br"),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("题目:大数打印")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: n = 1 \n输出: [1,2,3,4,5,6,7,8,9]\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("br"),s._v(" "),n("p",[n("strong",[s._v("说明:")])]),s._v(" "),n("ul",[n("li",[s._v("用返回一个整数列表来代替打印")]),s._v(" "),n("li",[s._v("n 为正整数")])]),s._v(" "),n("h2",{attrs:{id:"_02、简单解法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、简单解法"}},[s._v("#")]),s._v(" 02、简单解法")]),s._v(" "),n("blockquote",[n("p",[s._v("如果是第一次看到本题,应该是会想到👇👇👇的解法。")])]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("直接通过 Math.pow 函数,计算出最大的 n 位十进制数,通过遍历求解")]),s._v("。因为过于简单,所以直接上代码:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("printNumbers")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Math")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("pow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("p",[s._v("补一个c++版本的:")]),s._v(" "),n("div",{staticClass:"language-c++ line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("//c++ \nclass Solution { \n public: \n vector printNumbers(int n) { \n vector res; \n if (n == 0) return res; \n //打印到数组中 \n for (int i=1,max=pow(10,n);i=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//取第i位的数字转化位int")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" nSum "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" number"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'0'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" carryFlag"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" l "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//最低位加1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("nSum"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nSum "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n isBreak "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//进位之后减10,并把进位标识设置为1")]),s._v("\n nSum "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n carryFlag "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n number"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'0'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" nSum"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n number"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nSum "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("break")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" isBreak"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("saveNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" number"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" isBegin0 "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),s._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" number"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("isBegin0 "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n isBegin0 "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("isBegin0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 到这里并没有继续往下实现一个存储数组的版本,是因为原题其实就是要求打印数值。")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 这道题目在leetcode上被改动成返回int数组的形式,也只是为了测试方便,")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 本身leetcode并没有提供对应的大数测试样例,也是担心其内存溢出。")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 总之大家知道本题的考察点所在就可以了。")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("print")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br"),n("span",{staticClass:"line-number"},[s._v("45")]),n("br"),n("span",{staticClass:"line-number"},[s._v("46")]),n("br"),n("span",{staticClass:"line-number"},[s._v("47")]),n("br"),n("span",{staticClass:"line-number"},[s._v("48")]),n("br"),n("span",{staticClass:"line-number"},[s._v("49")]),n("br"),n("span",{staticClass:"line-number"},[s._v("50")]),n("br"),n("span",{staticClass:"line-number"},[s._v("51")]),n("br"),n("span",{staticClass:"line-number"},[s._v("52")]),n("br"),n("span",{staticClass:"line-number"},[s._v("53")]),n("br"),n("span",{staticClass:"line-number"},[s._v("54")]),n("br"),n("span",{staticClass:"line-number"},[s._v("55")]),n("br")])]),n("p",[s._v("上面的代码强调两点:")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[s._v("对最低位 nSum 的值递增(也就是字符串加1运算),当大于等于10时,我们把进位标识改为1,同时恢复对 nSum 减10(29-31)")]),s._v(" "),n("li",[s._v("通过判断首位是否进位来判断到达最大的n位数情况。比如 n=4,只有对 9999 加 1,才会对第一个字符进位。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("同样,我也实验了一下,如果我硬性的把代码改成数组的形式,然后在leetcode测试用例中构造 n = 10,就会出现这个:")]),s._v(" "),n("img",{attrs:{src:a(552),alt:"PNG"}}),s._v(" "),n("p",[s._v("所以建议大家是在IDE里练习,今天的题目到这里就结束了。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);t.default=r.exports},550:function(s,t){s.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAZkAAAA+CAAAAADcoDnwAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADsQAAA7EAZUrDhsAABW8SURBVHja7Zx3dJRV+sc/72QmM5mQkN4IgVQSEnrvoQREiogUEXAFRRQVcVlWdMHCrspvdy0oCoqKwA+RphCMSO81IbSEkoSEkJDek0lmMuX9/fFOpgTCsqDHnPPL95ycPHPLc5/7fu997r3z3meEelrQLCH7ow1oQRNoYaa5ooWZ5ooWZpor5L+Jlsr0+hC/P7orD4Hcm+pwF0BMz/eMcJTSirOl/x3VcDPHNVwNGLN17Z0A8Wgf1e9t02/CzKlNOoRHJvzetv5eEDceA/Wszmg+vwFez7cD4OpGKXepWv9tMrjOiaBqhbZ10bwQOJc85He3yuzNTIBRfEAd2ev1XQYqdp/572vq9U2kG+5ZzWRvqd5kk1XbVCVDk907eMx5WFTdN+Wsu+E7ql3Jl1pzesjw4UMFVMQnOw8PrVpTyw6Pf/x15AYwxT/eyKA7jWqA7gEfasOc+ftiJZ/O8AYgd9+sM/WAU09u7TcXCxsspoK/J/DuEodGOs6Y4iYR8e3JPv916zt9B0nCreybiqlJt/N03WIBtoX1su13hbtgV21938ijWQ4Y24wAIEH1iCXr9q55Fjkn4QUpvxCCh27uEgPkXDdn+naylDvGvDC+Tkzud0m9yIV/5FzrKqVHjyXlUHsvjrPIn4+vXemZ/ohAp+216uNt2tv341/zXNgZ0AfgTKo5bVA4gPF/Xm39UMyAtlB7u1btDSXfzUEmk6ZTuXI8Z6riyEweLK6LywobANRrlY1cYBWhEEZVw+dfjHEnC/37KS+ky7uEAJoTRS7+3RSNWk47C+eiswEmKzc+1ldBwlMj1ZD4K4aytF8BFqkA/XfXXSuHjrHnhpwuoeSeQvchYChNBnrF1WqgTFcMeKM9ChUFeyEoktSX9LUJQzN8qwho7ySNvvLdEy2qxEKnMOiWWKheDRCRI3Uk+IlQOMYgqmsD/KHrtUIcRDAg6HcvsLNFl6+rNrpdjClA4cmtjtF83zeEfcXhpO6G2g9dYbr/AzKTtqd01ajr1ali9Ytkrn+6vtAyYh2UyB2UKACXkcd0G4DqjT272+ton3g0SnEAyzjap0sqgJNuF2HPtCEULdcAbi+3ta/VJpZfYnuIekdQgC6Frk4RAL168fXovtbntkb1vmP1SuehlhTtmtz8OC7mUgnKN6k8H0vhrV7AoTQ/qov3w+kVOASAQhUArQHlqmeowMWw51m8vABOnbKxRlDUFfpSibSmVySaO9K2LVReUvbCiCOgwEjkpf6yxCCnPdG+dj3J/DFmt7Kn43kMN98EhRKZQokDUB0xCoC1D+LS5AAREe++qIzKGqnfCYoF6g+mHAKgTzBnr1JrSqY+QurDHGDpsw4ASe29GnQMOX3ldUW1y3iLUiMzKg9kZ3fsf+3Etm6uCZrufTTn69o0atnZObvoOVnO3hcAxGxOdSn7ApjkQ1Jizm4QB8UBFN9YrsBlZibsPW7oPQFQvfJd38jrJhERoHjVNPCK1/cH+vYjZ9c0SAVFDORcjbE292t179Ir0trOSqfXbLdWwdd+iKvaRVegdFWuOCLIknPC1EtpU3D8F0uU2nm1B99o1JXQielndjzrS93HwNZ4KjIdqXkCkEu1G7v/+2cGqNfo9Eo90Fbc0CuwAlKFjs7QbzLHqsaQfhwK3tCNuabt2lBxx3DLKJap0Nbj6GjVOj0CU4JqnqJX/o2bnasZEMMAwx0nJ9266ZY0+QSu02oUa+a0Jnunx7tASjoAuYEKIDCQxOPz5F8fGC5RXzusDGgNuauf8gOH2KPiAFvdhtVAXdFKoOtAAH1m0C2dhzn39gd2hkz66MoVCAsBDEUi7pYM8TgDbQuqFxbUByh+7ONWfV3s4Grfm1F6EAVgWhe+GRzOzwDJRQBkPTgzFbp/jo2vUWsAccPJhS79QCPrZ1/Sd+lxvdfnnRse5ltWIn5Oj5rqFH9iwwsWpeEQlRCugKgbFUSnrvR18Y9tPGcMqwpCt9TX3PpfOpq9o2MoilDyvpz7zVagRDoglbpD0jlUfzo/xo/HEoYDuqrvet8AYETPjU/rVy+UnT3z4kc+4TbKHUYDhSdGA24AKBZcShUajlyN1qy2b1/U79KOBfD95Op328LNU4srpW2C7UoK/lBx5u2cFUGOm14KtSSfSdXHdPs0trOp0eirC+oCQDefB2Xm8KG6t906LN48wgTnjTZbLO2pq2iM59CFgSAT8Ao92TCIbGbIJab4MznxisUwmQAOyM3qh1cfLihIP76gg33LW9w8CTeWlkfiAxXvUCJK286L09s5dASyJefsewECxMp9FPqATyFQ/p5sRnSaf3L9EBxZKOfCz4N3LJK/pIbvt2DSvwZ1CKG7xuHoHEqKsydoTaDuslr/UhMPwW1IojY0SjI9uvf+6w3MHLOfMuZxOEz9ZZ/J/LLF6tN6T01PZObHoSYZaDfvpCxTSdVEKOvc5QEosWVmQOy7TtzqUX/aZBI6dV9vzS0dPYiTVY+QkWhOeDThLrbWCI4gV9Qam/iqZ8JjdaUHTiU2Ymao79t0IyerJyC2Wgh6ySmPBozmP6BtrsY5ICCpHR4VUOEBuL23SSmPn6/MOCMfhBymvH9pjDvO0HpOZ3J2zYMvgORxAOR4BkO+K+CkVDg39RTEBMaA7ooqCpypM6dWXVT0AZyEUpOMYtQAFKYu4+ZI6JAgWqaeIJOB+6hzneRQOsef9f3D+BUo7ceDQwagADjf75mh2qzddpvbghCVSqFQqZRA8T/3gMfMhqzTRZZSwWKC1rBHE6i4exMHt9ar2/o3PGlAnwbgb8NjqZ9Sqaxq1fDRlJGRkZEnye491tZQ/FMPog7ojfuiAEEJhtwiTEZJZYmipEQPMLCzuf48ewPm5wWVP42uqqLJU2hSfnA0KNatSKHkpGWTecLUzRlQ+lSfEssSkXZzOx9V4FgLVXKrTzTU6YABg+sdoaydSuWgVKnkYLrt/RDMmHcARtJvzhRctWkNiyQioEmbIX247QDuzybLAdF8bN8zzOI8J6aePCfXCE/evYXSXbUHfWuqhZ6WlOytfzP3SI/WWAeq5BAgy6JQPtG6A+CptUvU2kf6MDTvDSFCmggmDgxK8IkYDlB0InFyx53LRvZQN2q3hHJdCbWecPPA89/M9l3ZSf7xAmfMJ3Y7iAmMBWTjN3/mWSZGdObAvnEDrOv/hC/Xx1eZOnQAyM59DmLOdeGszb7vYl5dKECRCyle5gF324sLEU2M1ftnJmurTLF5rgw6HXxLSj6SdnUO3Ih1BBdZxQrTkwhzPOMgc6fWTdoDvmUdMj6Lv8+sbzs17O4teL7zU3q+4D8u2pKSH2UWzu8HPoH5OdOAK3bfRX2fOdhs4RxjuacAwoxpojSOVqWN27GwMj7jnLHjuBU1fZaomTLo+LKx9n5W3A7q7RS0RbdtvtezW4OjH8Fxx3TI+rE2uJGJ5/LbxwAMU+4qVfaYKqAt18G1Eh/psNB9zo+lil7SwPvpMRlM/HoxfnMt1Z1GjCovgEt7NLO4NhbwVl3YqYjk7EQeAkI9YKpxEeodAfQKKG2lRFPj3ArzNtAWplpa3U2NweR4r1a0DrajZ0vnSACyG1ZajA6AXi6QFwBQ5AOlMvemtNUoFYaG3X61S4NlRgWAtsh8GskNBKBC3gqDHIwmhbl7Yq3JhSZRq7rrYlmnlJINV2MEgBrxTh2iQWH/xHRKHgLCH3APoNKl5a3Qf8YfwUwL7gcto7e5ooWZ5ooWZporWphprmhhprmihZnmihZmmitamGmuaGGmuaKFmeaKFmaaK1qYaa5oYaa5ooWZ5ooWZporfpv4GXSXhe4Nb/O0aRWBIZaci/pu0uvpolt+gVzUAwrvgD+62/dC+Q3nKKD4hhDmCXYSgCatpl2QvVR+270NwC1N1AO2eRf8Rswc+qlrD7OY+VU5dHmu4e3zhurZ0gW2TVdGBbKhGoCuM1wesKHfHxfXadpHwe54E/JJQ7GVAFK/0UDfP8lspEPbO2R2mg3i2qd+Qzus3sxovRbdKNTEfNfkHvE1un2MNYvar8ojRrhe3GnNPABA3hXp0+PTpo10u/Dd3bRoTU1ov3dgT6NaWhu5vsk3tvom1a0BIGWHrG8PcXOmrQRQsUYTGas+vc9GKtn6l1eWX0mGM57hdppEEbh7JJDx3gFC2M2ZaxemS/pgY9fOAAKbeof+PNzpnSWKLZNkmj1BHWUlxZm5Y8Lv0HK4pkvD3frU8sjXGPz2ycmWzOz0cAs/MMAFYv92xXCXyfrRs9Ide9P1vKzw3kl5haZxoQD/fNn2soZO1+hG8ZJ/yDYZob5fFID46SSrKz3KCIt8gOEA4lqgf+T7r6uASw2X5iIDLeU6jXsXOM7UwSTEnw6xkQCS63rOoee/T42ySpmu7VFGpHc37Gp0zy015Um0y98B0G8wp7WaAsDZW1Pvj5nMGsiovATOoXX/pr7yVjzAzPaPfj0kZNNs2OvtoFtXmH7Rq+Zm3BPCHUpspgyFdAZfv/xqq786EA7VthFpnm4V9Y2YOZZNfeE+gNbj6rY9PUzIvjA+QAHbrqLVrATwfR6gaF2RWvdk10YGXPsLHCklfStQ82VrYFJEhR5qKAaFG3kpkI4RuvqIhQv0FwoDq5Mh0sNVmo2ZZyOtuuZWARTQHbrFF9pKUnoPCHcuFAWLJBMBg8CRMPur2yXJQXl+KW0KwF1pzH2Nkm0vwAdTYE0lpls5EPzEf2ZmZ2grctUlaNIWOi3lh0Dz1S1R92q9g7bCWKnujjL2jF9MEBvcbxvbNVZypLqLJbJBQRaYagTrLSflhRIvjuqVVm+ZVB7Q+N5edLD41SwvA3IU4FBW5qz0bgcwCd3y+dZwlZoVcUOEW594W59Bxu6qlZM5ApndCX+T9PpoLngFAmtbO5FDHdqyhagDoIgAUIGs/HB7/dUwh9yiKOk2pn5X/pt3LHtGlCDHaCtJ6Y6AQmMjhWmy21Vde06796/2Kr5tV/bZ4iMBR0kb3xlBiUJmvuV0a4lEcvx9zBn6e5HeuzOlaUBO1tTFItBzcuUXM8IO73Ft9bUuYxZZ5XjXnk9JDu7dDvv4mfq9FC1tM1G6Ytmey3tDD1Z3tN616nf44BTDYVmfowB87kB5qeLpxnZ4eByI7Mp+2TCAumxTxtTLZSB/HrYVfwGIM8MBLvjHQtDMqjaG7y+3HtULCHvlzZdliObl5vLO+dB+zZNtgcc82c8Iyr8FNzcowHqrUvzVp4/BS/KR5Z/1nSfwEHCb8WG7rIGdd3X3bJQx1jn7osc02CJAwXsYqt6Trr4iPRvHe6u1OBVNelkHJYDuu8nCcsjYPhC3F79YzPARkHmE+v61bUOz25WNNntxm/iZY9XUVRXdWOYEEN7v1HZglLWJQSdPjE+u6mkmMgugtecdhuQf/JtF9ptg+IigETlX4uBYWtRLwI/SWp4TAtANNuuWFq/ykWavxnmmDkIC4OzuWa1ANe6HqUG2urN3ASVcA8YGAWQE3jCVmW9qFrcd+TC8AH0753u4Vx9byo18861OC1qPKvVEFMB/CUUbX4M3AVHa/9TdW6uFmf0DvNbOBUxr8j2AlF0vuYLvEgUnM0DjQeaukqvHX1LfEHMzu7rax88cZNqQyo8Kz/cH4JmeObcTQ20cd6u+R0+cZESa9Ol9FyrPxq9Y2siOshV+uh+5LeQRa16MXUONucGcOThn1VYgXYokKGsHu/IIiTu/xNV10KV2QEX9v2KkjdNs1e5XDyVNZJv3rE/fcLJR7j0aSKQX4AOiQFifrVk3Gi7qP/xhWx0KvwxyWX+5a0Lw89bkD4Ty2aUbFslMjaaksZv0/94nhwZmLp98yzk9oR9cUEVzw8jlkIICHzcuONKpP+RcJrLDu8MGXsy8mtQm2ITdXNSWuAwW3PrtKDZ/jol+x7ohABh2LF4bEmxmxtER7zGXbhbZB/uIK/tlKSPRyyJxofb6O6KzUbIsdT4uHYFyqZxvMYT7Xc2p1bqBdyqQtF33d9mVDhuGtUEl+5t83PIoY+5TskVOsEyGngRMQajbHIsji1D291ebKHVCcOqRWOfFb4jS8++kn/pQbXgtxeozX3f+hJCQPaNNDmgLlmGoWAYi6NT3FVVjZiZ7y8vOTP8gBLp1Wc2JOoqECga6se/F8orbUAyc1x/zSGnjNzaksQoHGYDBylVSQUhH2wL+HVOJs6viSKk9M8Jzyix1TypkPYGK/o8juyIFu8ymXDRaDy2BR0UhkrQ2Tg4aZyo8gU7dlyj1v3RTpOR6xyBH/uzn4ssyXMBndmv2M4KqeKhPkdpP7ak2R9NErr23D1NTHCDFzFglAGeKQVvjJNhIAPFxquz2auSht6zMyGQCTPg8ziinNHoWxZtfhmVQdn8RaOap3ObPbUG5yBcEB3h67tz+A+bOjSbdw52qvLy8Eig93efRfVOGukNeGXbxMwq/6qNiyWka9kvmmAcbDMfTdp+rO5mmsAYOVOUC2H5fU9RWqVRUW8KQNBkZGRnmOdNNm6An5VyMELVHrDkRCShlkF2hs0bT6PXSz5JMN8fhu86w7/Crt9yCB1Biyr/n+bUtB+q1R2hrK0npp6pMhwyBthJwO2MIjhqgymZdr6szgmKBvF5BQTuVSumgUqmAzPv7bso8Z+ReAM7llnQpfuzAMIgeAWknyHg8Sf6yHIwkB3rYx89M+GJTQrUY2kkKOyEpv320fSPRH8ktzvwtAZ2BEdbYgOMa86G03oheVodMmTwJyLJEvvtPBH6UZOWL3+5XKJ73ZebqvzJMmpkm9sRtqBsZCIiZB0teUX1/YkR0o+OSvgQNJeiBI5VuX/+l7LNnTqx/WsAa29YIo88eTzZpWw2zld5Uvk2PX7MXt6pkPDYSsGOcnMgfMkOy8m28xRoHKTqryJWj5oNlngwOz+N+YNuDcwfKzDEruXtTngPqqiIADF/ljKKPVDj0G2disY+f6TJ3e4mq5xRz2MmdUwZswvBqQRnU2xrdT35D7P+uNCAZz+dk/kDmNJv6pQkp5lLer9fp3ADnhfUKAaBonVOBauS1/RsFw5g2n3j16yVj/tUT378SaGdA0XZgO4WQlvaqIvbX7BmRMd8k9YKj54rv6tY8F23MJnSms61U5gSyBZsuVXpNjbCV4EZpH/CZ+UnrimnWCeE32SlJBatLgtyr3ENA4cuKksHkBDQZfmIHKRag2F0OGHUOSqDIQ24oVrdGip/RmtSUKVyAKsemf59Iq3zgI8HyPzsCGIosfTI6SMEnOo0HYKzwxFTcqqkYS7HaRbgzmkYrmVqKtD03Fkk/YpHvLRdNDuZoGpNJDgatTN2EZj2KOyQAk86psZQn9wEwlbnfGfpvMskfKKzmj4/SKL+/IfT/Dn88My24O1reaTZXtDDTXNHCTHNFCzPNFS3MNFe0MNNc0cJMc0ULM80V/wcl2DpUORn4CAAAAABJRU5ErkJggg=="},551:function(s,t,a){s.exports=a.p+"assets/img/2.f30b0c60.jpg"},552:function(s,t){s.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/75.a640c292.js b/learning/.vuepress/dist/assets/js/75.a640c292.js deleted file mode 100644 index 33ce3847..00000000 --- a/learning/.vuepress/dist/assets/js/75.a640c292.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[75],{1068:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("**今天是小浩算法 “365刷题计划”- 储备日。**难顶,我本来今天在写最长回文子串这个题目。然后我突然在想,直接讲这个会不会仍然有同学看不懂,为什么不从最简单的讲起呢。于是,今天的文章诞生了。于是,小浩又熬夜到了凌晨。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("见微知著,发现一组数据很有趣,分享给大家。leetcode 第一题通过次数为 993,335,第二题通过次数为 396,160,第三题通过次数为 69,508。我想说什么,请自己悟。")])]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第125题:验证回文串")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。")])])])]),s._v(" "),n("p",[s._v("**说明:**本题中,我们将空字符串定义为有效的回文串。")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: "A man, a plan, a canal: Panama"\n输出: true\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: "race a car"\n输出: false\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("h2",{attrs:{id:"_02、图解教程"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、图解教程"}},[s._v("#")]),s._v(" 02、图解教程")]),s._v(" "),n("blockquote",[n("p",[s._v("经典题目,你需要像掌握反转字符串一样掌握本题。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("首先,我想确保你知道什么是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("当然,对于本题而言,因为原字符串还包括了除字母,数字之外的一些幺蛾子,所以我们第一步可以考虑将其替换。因为使用正则实在是方便,所以直接用正则替了。")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA")]),s._v("\ns "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("toLowerCase")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("replaceAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"[^0-9a-z]"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[s._v("假若原字符串为:")]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("A man, a plan, a canal: Panama\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[s._v("替换完就是这样:")]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("amanaplanacanalpanama\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[s._v("剩下的就很简单了,我们同时遍历两边的字符,如果不等直接就返回 false,代码基本就是这样(因为实在简单到无地自容,所以我不知道如何画图....)")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isPalindrome")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("toLowerCase")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("replaceAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"[^0-9a-z]"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("toCharArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(542),alt:"PNG"}}),s._v(" "),n("p",[s._v("然后上面的代码大家肯定也觉得简单的一批。但是既然我们都知道哪些字符是幺蛾子("),n("strong",[s._v("除了字母和数字,都是幺蛾子")]),s._v("),为啥子不直接遍历的时候跳过嘞?这样是不是就不用先做一个替换的预处理了。")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isPalindrome")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("toLowerCase")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("toCharArray")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'0'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'9'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'a'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'z'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("continue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'0'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'9'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'a'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'z'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("continue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(543),alt:"PNG"}}),s._v(" "),n("p",[s._v("好吧,那既然我们都可以把幺蛾子跳过了,那有木有现成的跳过幺蛾子的API来用嘞?我找了找,java 中没有特别现成的拿来主义,但是我又不想造轮子,那就去别的语言里找找呗。")]),s._v(" "),n("div",{staticClass:"language-cpp line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-cpp"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//CPP")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("bool")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isPalindrome")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("string s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" j "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isalnum")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isalnum")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" j"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("toupper")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("toupper")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("j"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("p",[s._v("提示:isalnum() 方法检测字符串是否由字母和数字组成,是c++标准库函数。当然,c库也有")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("但是这样感觉代码还是好长好难受,有没有更加简洁的写法?祭出大杀器!")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("//")]),s._v("py3\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" isPalindrome"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("str")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("bool")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("list")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("filter")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("str")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("isalnum"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("lower"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" \n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br")])]),n("p",[s._v("然后,我还想祭出终极大杀器 之 战斗魔鬼!")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(544),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_03、总结"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、总结"}},[s._v("#")]),s._v(" 03、总结")]),s._v(" "),n("blockquote",[n("p",[s._v("万丈高楼平地起,盘龙卧虎高山齐。希望大家对于回文串的判断烂熟于心,为后面的题目做好准备~")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("今天的题目到这里就结束了。你学会了吗?快来评论区留下你的想法吧!")])])}),[],!1,null,null,null);t.default=r.exports},542:function(s,t){s.exports="data:image/jpeg;base64,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"},543:function(s,t){s.exports="data:image/jpeg;base64,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"},544:function(s,t,a){s.exports=a.p+"assets/img/3.65076092.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/76.cb3e391a.js b/learning/.vuepress/dist/assets/js/76.cb3e391a.js deleted file mode 100644 index 682b97c2..00000000 --- a/learning/.vuepress/dist/assets/js/76.cb3e391a.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[76],{1075:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天是小浩算法 “365刷题计划” 第107天。满血,复活!")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("即日起,我们从这个题目开始,把 leetcode 前 200 道题,还没有讲过的,全部讲一遍。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("暂定的目标是一周 3-5 篇题解。希望大家支持!一起进步!奥利给!")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(617),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("这是一道简单题,只需要普通的遍历就可以完成。不过会遇到一些坑,如果不注意,还是挺容易出错的。")])]),s._v(" "),n("br"),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第58题:最后一个单词的长度")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: "Hello World" \n输出: 5\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[s._v("**说明:**一个单词是指仅由字母组成、不包含任何空格字符的 "),n("strong",[s._v("最大子字符串")]),s._v("。")]),s._v(" "),n("br"),s._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[s._v("#")]),s._v(" 02、题解分析")]),s._v(" "),n("blockquote",[n("p",[s._v("因为我们要获取的是"),n("strong",[s._v("最后一个单词的长度")]),s._v(",不难想到可以从尾开始遍历。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("题中的陷阱在于,"),n("strong",[s._v("结尾处仍然可能有空格")]),s._v("。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("所以一般的解题思路为,先去掉末尾的空格,然后从尾向前开始遍历,直到遇到第一个空格处结束。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("但这里可以取一个巧,我们可以通过一个 count 来记数,"),n("strong",[s._v("从第一个不为空格的数开始记起")]),s._v("。换句话说,如果末尾处为空格,此时 count 值为 0,可以直接略过。")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(618),alt:"PNG"}}),s._v(" "),n("p",[s._v("实现代码如下:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("lengthOfLastWord")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" count "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("' '")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("count "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("continue")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("break")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n count"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" count"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br")])]),n("p",[s._v("当然,并不是说我们不能直接用 API,来进行一些“机智”的解题,大不了就是被挂。")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("lengthOfLastWord")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n s "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("trim")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" start "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("lastIndexOf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('" "')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("substring")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("start"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])]),n("p",[s._v("这个代码应该大家都能看懂,首先 trim 掉两边的空格,然后直接定位到最后一个单词的位置,将其截取下来获取长度。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("额。既然我们 trim 都用了,那为什么我们不直接使用 split 得到最后一个单词的长度呢?")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("lengthOfLastWord")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" words "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("split")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('" "')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("words"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" words"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("words"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("length")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])]),n("h2",{attrs:{id:"_03、函数学习"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、函数学习"}},[s._v("#")]),s._v(" 03、函数学习")]),s._v(" "),n("blockquote",[n("p",[s._v("上面的题解中用到了 trim,那 trim 除了去除两边的空格,是否还会去除其他字符呢?一起来看下 trim 的源码。")])]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("trim")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" st "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("char")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" val "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/* avoid getfield opcode */")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("st "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("st"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("' '")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n st"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("st "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("' '")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n len"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("--")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("st "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("len "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("substring")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("st"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" len"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("p",[s._v("可以看到,Java 中的 trim 函数除了去除空格之外,还去除了所有在 ASCII 码表中排行小于等于空格的字符。")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(619),alt:"PNG"}}),s._v(" "),n("p",[s._v("空格在 ASCII 码表中排行是 32位,可以看到 tab,换行,回车等都在 trim 的控制范围内。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("今天的题目到这里就结束了,你学会了吗?快来评论区留下你的想法吧!")])])}),[],!1,null,null,null);t.default=r.exports},617:function(s,t,a){s.exports=a.p+"assets/img/1.3cb2cf78.jpg"},618:function(s,t,a){s.exports=a.p+"assets/img/2.8946b15e.jpg"},619:function(s,t,a){s.exports=a.p+"assets/img/3.ad8c5615.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/77.d2c8e10b.js b/learning/.vuepress/dist/assets/js/77.d2c8e10b.js deleted file mode 100644 index bfa67013..00000000 --- a/learning/.vuepress/dist/assets/js/77.d2c8e10b.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[77],{1081:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("在之前的系列中,我们已经学习了"),n("strong",[s._v("二叉树的深度")]),s._v("以及"),n("strong",[s._v("DFS")]),s._v(",如果不会可以先查看之前的文章。今天我们将对其进行应用,直接看题目。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第110题:平衡二叉树")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个二叉树,判断它是否是高度平衡的二叉树。")])])])]),s._v(" "),n("p",[s._v("本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("给定二叉树 [3,9,20,null,null,15,7]\n\n 3\n / \\\n 9 20\n / \\\n 15 7 \n\n返回 true 。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("给定二叉树 [1,2,2,3,3,null,null,4,4]\n\n 1\n / \\\n 2 2\n / \\\n 3 3\n / \\\n 4 4\n \n返回 false 。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("h2",{attrs:{id:"_02、图解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、图解分析"}},[s._v("#")]),s._v(" 02、图解分析")]),s._v(" "),n("p",[s._v("首先分析题目,这道题思路很简单,我们想判断一棵树是否满足平衡二叉树,无非就是判断当前结点的两个孩子是否满足平衡,同时两个孩子的高度差是否超过1。那只要我们可以得到高度,再基于高度进行判断即可。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("我们先复习一下之前对于树高度的求解:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(645),alt:"img"}}),s._v(" "),n("p",[s._v("这里唯一要注意的是,当我们判定"),n("strong",[s._v("其中任意一个节点如果不满足平衡二叉树时,那说明整棵树已经不是一颗平衡二叉树")]),s._v(",我们可以"),n("strong",[s._v("对其进行阻断,不需要继续递归下去")]),s._v("。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("另外,需要注意的是,下面这棵并不是平衡二叉树:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(646),alt:"img"}}),s._v(" "),n("h2",{attrs:{id:"_03、代码分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、代码分析"}},[s._v("#")]),s._v(" 03、代码分析")]),s._v(" "),n("p",[s._v("根据分析,逻辑非常清晰,顺利得出代码:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBalanced")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("TreeNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("bool")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBalanced")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBalanced")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n leftH "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxDepth")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n rightH "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxDepth")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("abs")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("leftH"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("rightH"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxDepth")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("TreeNode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("nil")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxDepth")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxDepth")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" b "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" a\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" b\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("abs")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("a "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("a\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" a \n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(647),alt:"img"}})])}),[],!1,null,null,null);t.default=r.exports},645:function(s,t,a){s.exports=a.p+"assets/img/1.f2fa777d.jpg"},646:function(s,t,a){s.exports=a.p+"assets/img/2.a57eb659.jpg"},647:function(s,t,a){s.exports=a.p+"assets/img/3.ee5b366a.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/78.f6987552.js b/learning/.vuepress/dist/assets/js/78.f6987552.js deleted file mode 100644 index 0da9072d..00000000 --- a/learning/.vuepress/dist/assets/js/78.f6987552.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[78],{1093:function(t,_,v){"use strict";v.r(_);var s=v(3),a=Object(s.a)({},(function(){var t=this,_=t.$createElement,s=t._self._c||_;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("blockquote",[s("p",[t._v("长时间的二分估计大家也看的头晕眼花了,所以今天为大家分享一个非常有趣的概率题目。")])]),t._v(" "),s("h2",{attrs:{id:"_01、生娃的问题"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_01、生娃的问题"}},[t._v("#")]),t._v(" 01、生娃的问题")]),t._v(" "),s("blockquote",[s("p",[t._v("问:国家开放二胎的意义是什么?")]),t._v(" "),s("p",[t._v("答:大号练废了,重新开小号。")]),t._v(" "),s("p",[t._v("回:滚!")])]),t._v(" "),s("br"),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("题目:国家为了调控男女比例,制定了一个政策:新婚夫妇都必须生娃(接地气),如果生出的是男娃就不能再生了,如果生出的是女娃就必须继续生下去,直到生出第一个男娃为止(出题人牛P)。")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("问题是:若干年后,该国的男女比例会发生怎样的变化?")])])])]),t._v(" "),s("h2",{attrs:{id:"_02、题目分析"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),s("blockquote",[s("p",[t._v("“娃”字最初的意思是成熟美丽的女人。《说文解字》中对于“娃”的解释是“圜深目皃(貌)。或曰,吴楚之闲(间)谓好曰娃。从女,圭声。”“好”的本义也是美貌。在汉代,大约是最初使用“娃”这个字的时候,它的意思是“美女”,是形容成熟的女人。明以后的“娃”字的年龄降得更低。到了今天的俗语中,除了亲昵的小名,“娃”字则更多地用于婴幼儿。在我国一些地区,“娃”就是孩子的方言。")])]),t._v(" "),s("br"),t._v(" "),s("p",[t._v("其实这个问题答案是比较反直觉的:"),s("strong",[t._v("没有变化")]),t._v("。原因是因为:"),s("strong",[t._v("生男生女的概率永远都是百分之50")]),t._v("。不相信的话,你可以尝试去当一下妇产科大夫,若干年后一定可以得出这个结论。")]),t._v(" "),s("img",{staticStyle:{zoom:"67%"},attrs:{src:v(690),alt:"PNG"}}),t._v(" "),s("p",[t._v("或者我们也可以换一种思路:我们不妨假设把一大批新婚夫妇关在一个超大的屋子里,逼着他们进行一轮一轮的生孩子游戏。第一轮里,有一半的夫妇生了男娃,退出了游戏;另一半夫妇得到的是女娃,进入第二轮。在第二轮里面,又有一半由于生出男娃而退出,自然,另一半生出女娃的夫妇进入第三轮……注意到,在每一轮里,新生男娃和新生女娃都是一样多的,因此把所有轮数合在一起看,男娃的总数和女娃的总数也一定是相同的。")]),t._v(" "),s("h2",{attrs:{id:"_03、小知识"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_03、小知识"}},[t._v("#")]),t._v(" 03、小知识")]),t._v(" "),s("blockquote",[s("p",[t._v("既然科学上生男生女几率是一样的,那为什么很多国家男女比例还失衡呢?以下知识本人未核实,特此说明!")])]),t._v(" "),s("br"),t._v(" "),s("p",[t._v("1、"),s("strong",[t._v("气候变暖促使染色体活动变强")]),t._v("。孩子的性别是由染色体决定。男的有X和Y,女的只有X。随着全球气候变暖,染色体Y的活动会更加活跃,所以男宝宝出生的概率也随之升高。(我有点好奇,难道说X就不会受到温度影响???)")]),t._v(" "),s("br"),t._v(" "),s("p",[t._v("2、**身体酸碱度。**酸性体质容易疲惫,让人感觉到累。所以很多养生专家建议让身体处于碱性环境。前面这个,我觉得还是没问题的。但是养生专家同时也说:碱性环境下生孩子的几率会大一点。(这个我就搞不懂了??)")]),t._v(" "),s("img",{staticStyle:{zoom:"50%"},attrs:{src:v(691),alt:"PNG"}}),t._v(" "),s("p",[t._v("3、先有人后,才做数据统计,其他自己悟。如果悟不出来,可以看看家后面的那口井,只能说细思极恐。(并且我个人认为这是主要原因。。)")]),t._v(" "),s("img",{staticStyle:{zoom:"67%"},attrs:{src:v(692),alt:"PNG"}}),t._v(" "),s("p",[t._v("4、突然写到这里就不想写了,看到上面结论有点难受。。。就这样吧。。")]),t._v(" "),s("br"),t._v(" "),s("p",[t._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);_.default=a.exports},690:function(t,_,v){t.exports=v.p+"assets/img/1.7d598a13.jpg"},691:function(t,_,v){t.exports=v.p+"assets/img/2.fe0036fa.jpg"},692:function(t,_,v){t.exports=v.p+"assets/img/3.ff524e61.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/79.6ae32026.js b/learning/.vuepress/dist/assets/js/79.6ae32026.js deleted file mode 100644 index b2a83388..00000000 --- a/learning/.vuepress/dist/assets/js/79.6ae32026.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[79],{1099:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天为大家分享一道本应很简单的题目,但是却因增加了特殊条件,而大幅增加了难度。话不多说,直接看题。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("该题很容易出现在各大厂的面试中,属于必须掌握的题型。")])]),s._v(" "),n("br"),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("连续n个数的和")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("求 1 2 ... n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: n = 3 输出: 6\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: n = 9 输出: 45\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("p",[n("strong",[s._v("限制:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("1 <= n <= 10000\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("blockquote",[n("p",[s._v("这道题目出自《贱指offer》,因为比较有趣,就拿来分享给大家。")])]),s._v(" "),n("p",[s._v("题目上手,因为不能使用公式直接计算(公式中包含乘除法),所以考虑使用递归进行求解,但是"),n("strong",[s._v("递归中一般又需要使用if来指定返回条件(这里不允许使用if)")]),s._v(",所以没办法使用普通的递归思路。那该怎么办呢?这里我们直接上代码(本题将展示多个语言),再进行分析。")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sumNums")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("boolean")]),s._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sumNums")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br")])]),n("p",[s._v("首先我们了解一下 && 的特性,比如有 A&&B")]),s._v(" "),n("ul",[n("li",[s._v("如果A为true,返回B的布尔值(继续往下执行)")]),s._v(" "),n("li",[s._v("如果A为false,直接返回false(相当于短路)")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("利用这一特性,我们"),n("strong",[s._v("将递归的返回条件取非然后作为 && 的第一个条件,递归主体转换为第二个条件语句")]),s._v("。我知道肯定有人又会懵圈了,所以我们绘图说明。假若这里n=3,大概就是下面这样:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(716),alt:"PNG"}}),s._v(" "),n("p",[s._v("这里还有一点要强调的就是,受制于各语言的语法规则,我们需要做一些额外的处理。比如Java,这里如果去掉前面的变量申明,就会直接报错。")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(717),alt:"PNG"}}),s._v(" "),n("p",[s._v("但是如果是C 就没有这样的问题:")]),s._v(" "),n("div",{staticClass:"language-c line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-c"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//c ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sumNums")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sumNums")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br")])]),n("p",[s._v("python就是下面这样:")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("//")]),s._v("py3\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" sumNums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("and")]),s._v(" n self"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sumNums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br")])]),n("p",[s._v("Go怎么搞?")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//go ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("plus")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("bool")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("a "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" b \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v(" \n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" \n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sumNums")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("_")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("plus")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sumNums")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" n10"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])]),n("p",[s._v("什么,还要我给一个PHP的?惹不起..惹不起...大佬请拿走...")]),s._v(" "),n("div",{staticClass:"language-php line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//PHP")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sumNums")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$n")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$n")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$n")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$this")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sumNums")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$n")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$n")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br")])]),n("h2",{attrs:{id:"_03、额外福利"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、额外福利"}},[s._v("#")]),s._v(" 03、额外福利")]),s._v(" "),n("blockquote",[n("p",[s._v("另外,我还看到这样一个解法,感觉很有趣(思想很简单)。因为不是自己写的,所以这里得额外说明,咱不能白嫖,对不?(所以你们这些白嫖的不去给我点个star嘛...)")])]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//go")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sumNums")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("math"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Pow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(718),alt:"PNG"}})])}),[],!1,null,null,null);t.default=e.exports},716:function(s,t,a){s.exports=a.p+"assets/img/1.01bdd0e0.jpg"},717:function(s,t,a){s.exports=a.p+"assets/img/2.394d94e3.jpg"},718:function(s,t,a){s.exports=a.p+"assets/img/3.330ade79.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/8.cb530e31.js b/learning/.vuepress/dist/assets/js/8.cb530e31.js deleted file mode 100644 index 05927b8a..00000000 --- a/learning/.vuepress/dist/assets/js/8.cb530e31.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{1e3:function(t,s,_){t.exports=_.p+"assets/img/14.79bfef1d.jpg"},1001:function(t,s,_){t.exports=_.p+"assets/img/15.161e5f96.jpg"},1002:function(t,s,_){t.exports=_.p+"assets/img/16.30313cbf.jpg"},1003:function(t,s,_){t.exports=_.p+"assets/img/17.8417ebd0.jpg"},1004:function(t,s,_){t.exports=_.p+"assets/img/18.4a63b81e.jpg"},1144:function(t,s,_){"use strict";_.r(s);var v=_(3),a=Object(v.a)({},(function(){var t=this,s=t.$createElement,v=t._self._c||s;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("img",{staticStyle:{zoom:"67%"},attrs:{src:_(987),alt:"PNG"}}),t._v(" "),v("blockquote",[v("p",[t._v("今天和大家聊聊关于图的一些知识。")])]),t._v(" "),v("h2",{attrs:{id:"_01、图是什么"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_01、图是什么"}},[t._v("#")]),t._v(" 01、图是什么")]),t._v(" "),v("blockquote",[v("p",[t._v("图(Graph)是表示物件与物件之间的关系的数学对象,是图论的基本研究对象。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("在数据结构中,图是什么呢?喏,就是这样:")]),t._v(" "),v("img",{attrs:{src:_(988),alt:"PNG"}}),t._v(" "),v("p",[t._v("Emmmm.....或者说常见一点的:")]),t._v(" "),v("img",{attrs:{src:_(989),alt:"PNG"}}),t._v(" "),v("p",[t._v("图是一个比树形关系复杂一点点,比线性关系复杂两点点的东东。")]),t._v(" "),v("br"),t._v(" "),v("ul",[v("li",[t._v("线性关系是一对一:一个前驱一个后继。")]),t._v(" "),v("li",[t._v("树形结构是一对多:一个父多个子")]),t._v(" "),v("li",[t._v("图形结构是多对多:任意两个顶点(图中的节点叫做顶点)都有可能相关,是一种多对多的关系。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("图我们一般表示为 G = (V,E)")]),t._v(" "),v("ul",[v("li",[t._v("V:代表点")]),t._v(" "),v("li",[t._v("E:代表边")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("啥意思嘞,比如就上面那个绿油油的图,就可以表示为:")]),t._v(" "),v("ul",[v("li",[t._v("V={1,2,3,4,5,6}")]),t._v(" "),v("li",[t._v("E={(1,2),(1,5),(2,3),(2,5),(3,4),(4,5),(4,6)}")])]),t._v(" "),v("h2",{attrs:{id:"_02、图的术语"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_02、图的术语"}},[t._v("#")]),t._v(" 02、图的术语")]),t._v(" "),v("blockquote",[v("p",[t._v("然后我们介绍一下图的一些术语。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("图里最基本的单元是顶点(vertex),相当于树中的节点。顶点之间的关联关系,被称为边(edge)。而边可以分配一个数值(正负都ok),这个数值就叫做权重。")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(990),alt:"PNG"}}),t._v(" "),v("center",[t._v("(数据取自真实数据.....)")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(991),alt:"PNG"}}),t._v(" "),v("p",[t._v("当然,这里值得一提的是,树也可以被当做简单的图,而链表也可以被当做简单的树。")]),t._v(" "),v("h2",{attrs:{id:"_03、无向图和有向图"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_03、无向图和有向图"}},[t._v("#")]),t._v(" 03、无向图和有向图")]),t._v(" "),v("blockquote",[v("p",[t._v("有方向的图就是有向图,无方向的图就是无向图。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("**边没有方向的图称为无向图。**比如说我微信里同时加了这5个妹子,这5个妹子也都认识我。")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(992),alt:"PNG"}}),t._v(" "),v("p",[t._v("突然有一天,除了小花,其他四个妹子同时间都把我拉黑了。我的微信里能看到她们,她们却看不到我。")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(993),alt:"PNG"}}),t._v(" "),v("p",[t._v("然后嘞,无向图就变成了有向图:")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(994),alt:"PNG"}}),t._v(" "),v("h2",{attrs:{id:"_04、完全图"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_04、完全图"}},[t._v("#")]),t._v(" 04、完全图")]),t._v(" "),v("blockquote",[v("p",[t._v("所有的顶点互相连接在一起,那就是完全图。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图。大概就是这样:")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(995),alt:"PNG"}}),t._v(" "),v("p",[t._v("而在有向图中,若每对顶点之间都有二条有向边相互连接,也算是完全图。")]),t._v(" "),v("h2",{attrs:{id:"_05、循环图-和-dag"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_05、循环图-和-dag"}},[t._v("#")]),t._v(" 05、循环图 和 DAG")]),t._v(" "),v("blockquote",[v("p",[t._v("所有的这些概念,都是顺利成章产生的。")])]),t._v(" "),v("br"),t._v(" "),v("p",[v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(996),alt:"PNG"}}),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(997),alt:"PNG"}})]),t._v(" "),v("p",[t._v("循环图中的循环二字,指的是"),v("strong",[t._v("起点和终点是同一节点时")]),t._v("产生的路径。所以,"),v("strong",[t._v("循环图和有向图或无向图并没有什么关系,因为都有可能产生循环")]),t._v("。有向图,那就遵循边的方向。无向图,那只要成环就行。")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(998),alt:"PNG"}}),t._v(" "),v("p",[t._v("这三个:")]),t._v(" "),v("ul",[v("li",[t._v("第一个就是无向循环图")]),t._v(" "),v("li",[t._v("第二个就是有向非循环图")]),t._v(" "),v("li",[t._v("第三个就是有向循环图")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("那第二个,更多的是被称为,有向无环图 DAG(Directed Acyclic Graph。那下面这个也是 :")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(999),alt:"PNG"}}),t._v(" "),v("p",[t._v("那上面这个像不像一棵树。。。。。所以计算机结构中的树(大多都是有向的),其实就是一个DAG。")]),t._v(" "),v("h2",{attrs:{id:"_06、加权图"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_06、加权图"}},[t._v("#")]),t._v(" 06、加权图")]),t._v(" "),v("blockquote",[v("p",[t._v("用数学语言讲,设G为图,对图的每一条边e来说,都对应于一个实数W(e)(可以通俗的理解为边的“长度”,只是在数学定义中图的权可以为负数),我们把W(e)称为e的“权”。把这样的图G称为“加权图”。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("这个没啥好说的了,就是边有长度的图("),v("strong",[t._v("这个长度可以是各种含义")]),t._v(")。大部分我们接触到的图,都是加权图。")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(1e3),alt:"PNG"}}),t._v(" "),v("p",[t._v("但是这里如果细分的话,又分出来了。**顶点加权图和边加权图。**说白了,就是有人发现如果只给边加上权值(就是长度)并不够用,有时候也需要给顶点加上权值。")]),t._v(" "),v("img",{staticStyle:{zoom:"67%"},attrs:{src:_(1001),alt:"PNG"}}),t._v(" "),v("h2",{attrs:{id:"_07、连通图"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_07、连通图"}},[t._v("#")]),t._v(" 07、连通图")]),t._v(" "),v("blockquote",[v("p",[t._v("在图论中,连通图基于连通的概念。在一个无向图 G 中,若从顶点i到顶点j有路径相连(当然从j到i也一定有路径),则称i和j是连通的。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("连通的图,就是连通图:")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(1002),alt:"PNG"}}),t._v(" "),v("p",[t._v("如果不通了,就是非连通图:(这是一个图)")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(1003),alt:"PNG"}}),t._v(" "),v("p",[t._v("那没有连通在一起的这两坨(或者说移动的这两坨),我们叫作"),v("strong",[t._v("岛")]),t._v("。(画外音,也许当年给联通移动起名的,就是程序员。从这里看,联通和移动本身就是对立的)")]),t._v(" "),v("img",{staticStyle:{zoom:"50%"},attrs:{src:_(1004),alt:"PNG"}}),t._v(" "),v("p",[t._v("所以,如果我们的图里包含岛,那就是非连通图。")]),t._v(" "),v("h2",{attrs:{id:"_08、稠密图和稀疏图"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_08、稠密图和稀疏图"}},[t._v("#")]),t._v(" 08、稠密图和稀疏图")]),t._v(" "),v("blockquote",[v("p",[t._v("终于出现一个有学问的。你看 连通图-非连通图,加权图-非加权图,循环图-非循环图。。。。。人家稠密,终于知道对应一个稀疏了。")])]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("如何定义稠密和稀疏?"),v("strong",[t._v("梵蒂冈也有人觉得他们的圣彼得大教堂拥挤")]),t._v(",所以稠密稀疏本身就是一个主观定义。")]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("我们可以简单的认为,稀疏图的边数远远少于完全图,反之,稠密图的边数接近于或等于完全图。")]),t._v(" "),v("br"),t._v(" "),v("p",[t._v("本文主要介绍了图的基础知识,下一章会继续讲解图算法。希望大家多多支持!周末写文不容易,求个转发,来个评论。感谢~")])],1)}),[],!1,null,null,null);s.default=a.exports},987:function(t,s,_){t.exports=_.p+"assets/img/1.309ccfa3.gif"},988:function(t,s,_){t.exports=_.p+"assets/img/2.be442deb.jpg"},989:function(t,s,_){t.exports=_.p+"assets/img/3.74675f3c.jpg"},990:function(t,s,_){t.exports=_.p+"assets/img/4.f3d885a0.jpg"},991:function(t,s,_){t.exports=_.p+"assets/img/5.404ed413.jpg"},992:function(t,s,_){t.exports=_.p+"assets/img/6.4c450ae2.jpg"},993:function(t,s,_){t.exports=_.p+"assets/img/7.c99ba323.jpg"},994:function(t,s,_){t.exports=_.p+"assets/img/8.29b9373e.jpg"},995:function(t,s,_){t.exports=_.p+"assets/img/9.360c4c9d.jpg"},996:function(t,s,_){t.exports=_.p+"assets/img/10.b3a11a41.jpg"},997:function(t,s,_){t.exports=_.p+"assets/img/11.ec2b1f7f.jpg"},998:function(t,s,_){t.exports=_.p+"assets/img/12.af85a7e4.jpg"},999:function(t,s,_){t.exports=_.p+"assets/img/13.7a6723fa.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/80.e7e8ebda.js b/learning/.vuepress/dist/assets/js/80.e7e8ebda.js deleted file mode 100644 index 3ec554ef..00000000 --- a/learning/.vuepress/dist/assets/js/80.e7e8ebda.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[80],{1104:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("上一篇题目的难度可能对很多同学引起了不适,今天将回归一道比较简单的题目,大概耗时2-3分钟即可学习!")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("有兴趣回顾上一篇题目的:")]),s._v(" "),n("br"),s._v(" "),n("p",[n("RouterLink",{attrs:{to:"/1.8.位运算系列/learning/1.8/805.html"}},[s._v("只出现一次的数字Ⅱ(137)")])],1),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("本题比较简单哈~尽可能多的给出解法吧!")])]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第268题:缺失数字")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。")])])])]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: [3,0,1]\n输出: 2\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: [9,6,4,2,3,5,7,0,1]\n输出: 8\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("说明:")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没什么意思了。")])]),s._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("blockquote",[n("p",[s._v("说高斯公式,估计大家听着懵逼,其实就是那个 1 2 3 ... n = (1 n) * n / 2,即:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(744),alt:"PNG"}})]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("首先求出数组的和,然后再利用公式求出前n 1项之和,最终求差值,即为缺失的值!比如下面长度为4的数组,缺失4。")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(745),alt:"PNG"}}),s._v(" "),n("ul",[n("li",[s._v("2 + 3 + 1 + 5 = 11")]),s._v(" "),n("li",[s._v("(1 5) * 5 / 2=15")]),s._v(" "),n("li",[s._v("15 - 11 = 4")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("根据分析完成题解:(翻一个CPP牌子吧)")]),s._v(" "),n("div",{staticClass:"language-c line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-c"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//CPP ")]),s._v("\nclass Solution "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n public"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("missingNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" length"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" result"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" e"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" \n result"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-=")]),s._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("p",[s._v("时间复杂度O(N),空间复杂度O(1)")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(746),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_03、位运算求解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、位运算求解"}},[s._v("#")]),s._v(" 03、位运算求解")]),s._v(" "),n("blockquote",[n("p",[s._v("位运算的方式,本质和数学法一样,都是通过与无序序列抵消,然后找到缺失值。所以不能说哪个更好,都掌握最好~")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("直接使用“异或”进行求解。这个其实讲了好多次了,就是利用“"),n("strong",[s._v("两个相同的数,使用异或可以相消除")]),s._v("”的原理。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("先给一个Go语言的示例:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//Go")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("missingNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("range")]),s._v(" nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n result "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("^=")]),s._v(" k "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("^")]),s._v(" i\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("^")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])]),n("p",[s._v("再给一个Java的版本:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//java")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("missingNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("^=")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("^")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("^")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("p",[s._v("为了照顾各语言大爷们的情绪,我还是会尽可能的多给出几种语言示例,但是,请记住:"),n("strong",[s._v("算法思想才是最重要的。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("最后再补一个python的吧,毕竟这种语言,对于这种短短的题目,往往都可以弄出来一行代码求解的骚操作....")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#python")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" missingNumber"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" List"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("sum")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("sum")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])])}),[],!1,null,null,null);t.default=r.exports},744:function(s,t){s.exports="data:image/jpeg;base64,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"},745:function(s,t){s.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAa8AAACKCAMAAAAqozUCAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACmlBMVEX////o6Oj7+/u/v786OjpAQEA/Pz8wMDAPDw8QEBCurq4AAACPj4+8vLznx6WEYUI5JAAAABgpQWNznrXe7////+/etpRrVTkhAAAYLEJSaZS12+/eploYAABSpuf//86EGAAAVaXn////886UVSEAGEqMz/f/78aEQRhCfb3v///3x4Q5AAD/46VSAAD//96lXRg5YZStz97v7+/v386tkmNCGAAAADmMz/+MOABKeaW91+fez62MVSE5hs73///vw4T/w3sAAEJ7qr29vr29y+fvsms5gsb315QASZze///nplJapt4AAEqc2///++e9hkremkIAAHvG/////+elVQAAMIzO///OijGcRQD/25xCAABaquf///fnvoxSJAC9dQAAXa3/77VrAAAxjs7/x4SEx/+lfWtSRTlCjs4Yhs4YQXOtvpyMMAD/36VjRUJCLBgAACFSir3n+///561aAABzuvcAADG1dRj/y4xagq3W7/+UvsalimtSQSkhOFJrkrX/88Z7MAD/+/fex6WEVSHeolIAGEKEw+/Ggjn//8aEAAAAJFKMvudjkq3O3+/n172lglKEx/cYXaUhSXOl0++1eUJCQSkYOITG7/8AOIzeqmMAOITG8///9+fOz97OjjneoloAOGu13/9aGAAAGHO98/8AgsbGhkIAOHu96//enkprsu//+96lYSEYTYzO8/8hYaXe+//3+///971zAAAAdb2EOAD/26VCLCH/z4wxAABCmt5Kjs4Ydb3GgjG9dRi1aRjvunsYXa29eRgxgsYAAFKMtr3O4/dSgqWccUIAJGOt3///461CcZyUZUL/361rOAAYQXv/37XO7/+1aQD/++/OrowAGClCYXOctt5rVUIpGACcvufNrLBIAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAOxAAADsQBlSsOGwAABalJREFUeNrtnfd3FGUUhjdls5Ar6qIrURmjooiaXdRVogYVEcUGGLvgKiau3SD2rrGhYMFeQCliL9gL2HvvUiz/iyc7sxs3G8j99nw33Jvz3p/mMAnPe79n6jdzJrFYedXE+q/aWm8rwPDA0JABDD5DQwYw+AwNGcDgMzRkAIPP0JABDD5DQwYw+AwNGcDgMzRkAIPP0JABDD5DQwYw+AwNGcDgMzRkAIPP0JABDD5DQwYw+AwNGcDgMzRkAIPP0JABDD4jqrr6eP/V0OBtRWLY8AQYvBXx+nhdH4Fl1UgoZdVYJqjv/kUUl64EGPwiqtvo8XCA9T5qMzDYNZAP+NLFgC9bDPiyxYAvWwz4ssWAL1sM+LLFgC9bDPiyxYAvWwz4ssWAL1sM+LLFgC9bDPiyxYAvWwz4ssWAL1sM+LLFgC9bDPiyxaj0UVtWI4ZIn0OFUUc0okwQfKlmVPqqWD8k+hwqDJy/bDHgyxYDvmwx4MsWA75sMeDLFgO+bDHgyxYDvmwx4MsWA75sMeDLFgO+bDHgyxbDt6/Nt9iSkiO32lqwz9Q2o5po2+22d+qzmrEcHewgyGjesfQFlJ12Zv+WX19jdokS7DpWrM/dxoWI5O57iDEKtWcLSfpKZza5r/F7Ee29T3bf/SZQ6/5CfTYfQMkD27ITDyI6+BCpseypSRNI1NehNPmwKWEdzm/Eq68jAppaQB+ZoaOOlunzGEoeGwu3jWnT+aPj6mvGcQHJ+mqn409w+u8L5dPXiSfRyaeEi6fSZP5guvQ5/rTiljBzFp3O79NtLHNnnFk4UAn6ys2ms/iHwVL59NXRSWdHi3mic0T6HHPueeeHS+kMXcDv081XnoguvCgj6av54tJguZRPX11zLik2KOartyT3rzzNvfSytKivy6+gK92blrr/aqer+BccVflKXS14/rrm2usKO7CgrzxNu/6GGwO66Wanex+Z90W7bymdybyPZaFuve326LpDjiHr647S1fy8Ox0YIu+L5u5yOlU7j+X8BUR09z1iYxmWqK/cbKJ5996XXXh/E7U+wGeIvC86OqAH+Zfz7mPZ0dmzXT70sNBYRiXqK/XIo489Xlia1EJP8I9FEuevRU20+EmhPgv11JLwntxhu9Tm63+1lByuPAR8LQto+dPyfXatoGeelWQMlq+Zs+g59g9795V6PqAXXhyMPl8ielmSMVi+5i9wmED07euVV4lWvuYWuMo+u1xumOGr3+oeR/T6G46Bq+wznXE4jqjzlcu+GS299Ta9w57w9eur+12iqS6POZz7fG/O+8WJk1Wr6QMRRlSivvK9dzyrVjtwfD9PSX7o8JCjij7TGfooJOQ+Fp5DEfXV0Vmct8594jJR49XXUoqep7iV033Lp9Qazgd81kKf8ye4tfnKfVGcn1kW0Jeb5vlXOkNffT2lWN+I9NlzGT/327bswu8C+v4HmbHsbUfw/PXjCkr+1Jad+HPgdLPq01d72Z9l4ffqNpa//BoBfnO5a1DnK/Z7sY+VfzgwPPpK/TkovmJr1o5qonXr/3K6rtHnK7Zm7d//0Lr1/zqdQfA+my0GfNliwJctBnzZYsCXLQZ82WLAly0GfNliwJctBnzZYsCXLQa+L2qLge+L2mLg+6K2GDh/2WLAly0GfNliwJctBnzZYsCXLQZ82WLAly0GfNliwJctBnzZYsCXLQZ82WLAly0GfNliwJctBnzZYsCXLQZ82WLAly0GfNliwJctBsNXXLoSYPCrwldNWTUSSlk1lgnqu3/Vb8BzQ4O3FYlhwxNg8FbE6+MbP+bWbODfK94Ern4FGB4YGjKAwWdoyAAGn6EhAxh8hoYMYPAZGjKAwWdoyAAGn6EhAxh8hoYMYPAZGjKAwWdoyAAGn6EhAxh8hoYMYPAZGjKAwWdoyAAGn6EhAxh8hoYMYAzM+A8kHTJLXh1BAQAAAABJRU5ErkJggg=="},746:function(s,t){s.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/81.65140f29.js b/learning/.vuepress/dist/assets/js/81.65140f29.js deleted file mode 100644 index c8f7f8da..00000000 --- a/learning/.vuepress/dist/assets/js/81.65140f29.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[81],{1110:function(s,t,n){"use strict";n.r(t);var a=n(3),e=Object(a.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("blockquote",[a("p",[s._v("当然不能让你真的去修供暖器,但是如果你真的很有兴趣,可以参考下面步骤:")])]),s._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:n(767),alt:"PNG"}}),s._v(" "),a("p",[s._v("今天为大家分享一道腾讯校招面试题,话不多说,一起来看题吧。")]),s._v(" "),a("h2",{attrs:{id:"_01、题目示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),a("blockquote",[a("p",[s._v("这道题的重点在于对"),a("strong",[s._v("题意的理解")]),s._v(",建议先自行思考,再看题解。")])]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("第475题:供暖器")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("冬季已经来临。你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径。所以,你的输入将会是房屋和供暖器的位置。你将输出供暖器的最小加热半径。")])])])]),s._v(" "),a("p",[a("strong",[s._v("说明:")])]),s._v(" "),a("ul",[a("li",[a("p",[s._v("给出的房屋和供暖器的数目是非负数且不会超过 25000。")])]),s._v(" "),a("li",[a("p",[s._v("给出的房屋和供暖器的位置均是非负数且不会超过10^9。")])]),s._v(" "),a("li",[a("p",[s._v("只要房屋位于供暖器的半径内(包括在边缘上),它就可以得到供暖。")])]),s._v(" "),a("li",[a("p",[s._v("所有供暖器都遵循你的半径标准,加热的半径也一样。")]),s._v(" "),a("br")])]),s._v(" "),a("p",[a("strong",[s._v("示例 1:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("输入: [1,2,3],[2]\n输出: 1\n解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖。\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("p",[a("strong",[s._v("示例 2:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("输入: [1,2,3,4],[1,4]\n输出: 1\n解释: 在位置1, 4上有两个供暖器。我们需要将加热半径设为1,这样所有房屋就都能得到供暖。\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("h2",{attrs:{id:"_02、题目分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),a("blockquote",[a("p",[s._v("这道题目容易进入两个极端,要么就是没有读懂题意完全不知所云,要么就是觉得非常简单没什么可说的。")])]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("这个题目还是比较有趣的,解题的关键在于读懂题意:我们要对任意一个房屋供暖,要么用前面的暖气,要么用后面的暖气,两者之间取最近的,这就是距离。同时,如果要覆盖到所有的房屋,我们要选择上述距离中最大的一段,这就是最小的加热半径。")]),s._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(768),alt:"PNG"}}),s._v(" "),a("p",[s._v("当然,我们可以采用暴力题解,通过双层遍历,第一层:遍历所有的房子,第二层:遍历加热器,找出距离该房子的最小距离。但是我们其实可以通过二分搜索来优化这个过程。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("根据分析,得出代码:(再不写CPP,有读者就要给我寄刀片了)")]),s._v(" "),a("div",{staticClass:"language-c++ line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("//c++\nclass Solution {\npublic:\n int findRadius(vector& houses, vector& heaters) {\n //找到每个房屋位置所需要的最小半径的最大值\n int res = 0;\n int n = heaters.size();\n sort(heaters.begin(), heaters.end());\n for (auto house : houses)\n {\n //二分法找不小于house的第一个值\n int left = 0, right = n;\n while (left < right)\n {\n int mid = left + (right - left)/2;\n if (house > heaters[mid]) left = mid + 1;\n else right = mid;\n }\n int dist1 = (right == 0) ? INT_MAX : abs(house - heaters[right - 1]);\n int dist2 = (right == n) ? INT_MAX : abs(house - heaters[right]);\n res = max(res, min(dist1, dist2));\n }\n return res;\n }\n};\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br")])]),a("p",[s._v("这个代码逻辑还是比较简单的,不需要额外补充。另外,其实本题还可以使用滑动窗口来进行求解,但是考虑到输入规模,"),a("strong",[s._v("房屋数量有可能远远大于供暖器数量")]),s._v(",所以还是建议使用二分。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("最后还有一点要强调的就是:代码在刚开始的时候进行了一次排序。这个也是容易进入的误区,题目给的样例给人一种错觉 “提供的就是有序数组”,其实题中并没有说明,我第一次就犯了这样的错误。如果去掉排序的代码,就会报错:")]),s._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(769),alt:"PNG"}}),s._v(" "),a("h2",{attrs:{id:"_03、其他"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、其他"}},[s._v("#")]),s._v(" 03、其他")]),s._v(" "),a("blockquote",[a("p",[s._v("大家可以尝试用滑动窗口的方式来解答本题,也是很容易的。提供一个思路:首先还是保证数组"),a("strong",[s._v("有序")]),s._v(",同时维护一个双指针,记录每一个房子左边的暖气,并且让其成为下一个房子左边的起始值,最后滑动窗口即可。")])]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("今天看到很多IT行业的自媒体,都发表了 “前端大佬司徒正美去世” 的相关推文,这个行为我不做评论,说不上好或坏,因为是我的话,我不太愿意炒作去世的人。但是,换个角度,也许这样的炒作又可以为其家人带来一些体恤。“逝者已矣,生者如斯”,想说的是:这个行业还是蛮不容易的,钱一辈子挣不完,健康才是第一位,希望大家都能照顾好自己的身体,珍惜眼前人,幸福安康。")]),s._v(" "),a("br"),s._v(" "),a("p",[s._v("所以,今天的问题你学会了吗,评论区留下你的想法!")])])}),[],!1,null,null,null);t.default=e.exports},767:function(s,t,n){s.exports=n.p+"assets/img/1.6b32d5f0.jpg"},768:function(s,t,n){s.exports=n.p+"assets/img/2.48a1792a.jpg"},769:function(s,t,n){s.exports=n.p+"assets/img/3.acd93ea4.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/82.154e9eba.js b/learning/.vuepress/dist/assets/js/82.154e9eba.js deleted file mode 100644 index 365c915b..00000000 --- a/learning/.vuepress/dist/assets/js/82.154e9eba.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[82],{1120:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天为大家分享一道非常经典的题目,"),n("strong",[s._v("猜数字")]),s._v("。话不多说,直接看题。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第299题:猜数字(Bulls and Cows)游戏")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。")])])])]),s._v(" "),n("p",[s._v("请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("请注意秘密数字和朋友的猜测数都可能含有重复数字。")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: secret = "1807", guess = "7810"\n输出: "1A3B"\n解释: 1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7。\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: secret = "1123", guess = "0111"\n输出: "1A1B"\n解释: 朋友猜测数中的第一个 1 是公牛,第二个或第三个 1 可被视为奶牛。\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("br"),s._v(" "),n("p",[n("strong",[s._v("说明:")]),s._v(" 你可以假设秘密数字和朋友的猜测数都只包含数字,并且它们的长度永远相等。")]),s._v(" "),n("h2",{attrs:{id:"_02、题目图解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[s._v("#")]),s._v(" 02、题目图解")]),s._v(" "),n("p",[s._v("这道题,虽然被评定为“简单”,但是其实非常有趣。基本拿到题目,我们就能想到可以使用hashmap进行求解,一起来分析一下。")]),s._v(" "),n("ul",[n("li",[n("p",[s._v("因为secret数字和guess数字长度相等,所以我们遍历secret数字。")])]),s._v(" "),n("li",[n("p",[s._v("如果当前索引两个数字相同,就将公牛数加1。")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(806),alt:"PNG"}})]),s._v(" "),n("li",[n("p",[n("strong",[s._v("如果不相同,我们将secret和guess当前索引位置处的数字通过map记录下来,统计他们出现的次数。"),n("strong",[s._v("当然,之前我们讲过。有限的map,比如数字 0-10,字母 a-z,都可以通过")]),s._v("数组")]),s._v("来进行替换,用以压缩空间。")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(807),alt:"PNG"}})]),s._v(" "),n("li",[n("p",[s._v("最后,如果记录的两个map中,"),n("strong",[s._v("数字出现重叠")]),s._v("(可以通过最小值来判断),则意味着该数字在两边都出现过,就将母牛数加一(我就想说是母牛,不服来辩)")])])]),s._v(" "),n("h2",{attrs:{id:"_03、go语言示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[s._v("#")]),s._v(" 03、GO语言示例")]),s._v(" "),n("p",[s._v("根据分析,完成代码(这次翻Go的牌子):")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getHint")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("secret "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" guess "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\ta"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" b "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n\tmapS"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" mapG "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("range")]),s._v(" secret "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//注意:这里是获取对应数字的ASCII码")]),s._v("\n\t\ttmp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" charGuess "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" secret"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" guess"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" tmp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" guess"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\ta"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t\tmapS"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("tmp"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n\t\t\tmapG"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("charGuess"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//找到重叠的")]),s._v("\n\t\tb "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapS"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" mapG"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//strconv.Itoa : 整数转字符串")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" strconv"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Itoa")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"A"')]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" strconv"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Itoa")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"B"')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("min")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" b "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" b\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" a\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(808),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_04、奇怪的知识"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、奇怪的知识"}},[s._v("#")]),s._v(" 04、奇怪的知识")]),s._v(" "),n("p",[n("strong",[s._v("奶牛包不包括公牛?"),n("strong",[s._v("为了研究这个问题,我google了好一会儿。首先,国际定义,"),n("strong",[s._v("奶牛包括公牛")]),s._v("。那公奶牛能不能产奶呢?答案是")]),s._v("不能")]),s._v("。那现在就有意思了,为什么公牛不产奶,还可以被称为奶牛?这是因为公奶牛是用来交配的,他们要保证所有的母奶牛都在哺乳期,所以他们需要不停的交配。一般一个养殖场,公母的比例大约是8:100。母牛当然舒服了,挤挤奶就成。但是这些公牛,却是相当辛苦。正所谓,“吃水不忘挖井人”,如此含辛茹苦的公牛,凭什么就不能被称为奶牛呢?")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("所以,今天的问题你听明白了吗?评论区留下你的想法吧!")])])}),[],!1,null,null,null);t.default=e.exports},806:function(s,t,a){s.exports=a.p+"assets/img/1.1afc39f1.png"},807:function(s,t,a){s.exports=a.p+"assets/img/2.915bf0c2.jpg"},808:function(s,t){s.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/83.09191e62.js b/learning/.vuepress/dist/assets/js/83.09191e62.js deleted file mode 100644 index f479651f..00000000 --- a/learning/.vuepress/dist/assets/js/83.09191e62.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[83],{1141:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("问:程序员最讨厌康熙的哪个儿子。")]),t._v(" "),n("p",[t._v("答:胤禩。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("今天依旧给大家分享一个面试的高频题目。话不多,来看题吧。")]),t._v(" "),n("br"),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题目非常的高频!看起来是在考察矩阵搜索,其实和矩阵一点关系都没有....")])]),t._v(" "),n("br"),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第74题:搜索二维矩阵")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。")])])])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("该矩阵具有如下特性:")]),t._v(" "),n("ul",[n("li",[t._v("每行中的整数从左到右按升序排列。")]),t._v(" "),n("li",[t._v("每行的第一个整数大于前一行的最后一个整数。")])]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:\nmatrix = [\n [1, 3, 5, 7],\n [10, 11, 16, 20],\n [23, 30, 34, 50]\n]\ntarget = 3\n\n输出: true\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])]),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入:\nmatrix = [\n [1, 3, 5, 7],\n [10, 11, 16, 20],\n [23, 30, 34, 50]\n]\ntarget = 13\n\n输出: false\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])]),n("br"),t._v(" "),n("p",[t._v("题目本身还是比较容易理解的,没有太多额外补充。")]),t._v(" "),n("br"),t._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[t._v("#")]),t._v(" 02、题解分析")]),t._v(" "),n("blockquote",[n("p",[t._v("说白了,这就是一道考察二分的题目。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("最重要的是题中给出的两个条件:")]),t._v(" "),n("br"),t._v(" "),n("ul",[n("li",[n("p",[t._v("每行的第一个整数大于前一行的最后一个整数。")])]),t._v(" "),n("li",[n("p",[t._v("每行中的整数从左到右按升序排列。")]),t._v(" "),n("br")])]),t._v(" "),n("p",[t._v("第一个条件意味着可以通过二分搜索确定哪行;")]),t._v(" "),n("p",[t._v("第二个条件意味着可以在行里进行二分搜索确定哪个元素;")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(962),alt:"PNG"}}),t._v(" "),n("p",[t._v("如何使用二分查找找到哪行呢?只需要一个上下边界,再每次拿着中间行最大的值和目标值比一比。")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//二分法找到target所在的行 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" top "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bottom "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" col "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("top "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" bottom"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("top "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" bottom"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("col"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n top "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n bottom "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" top"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])]),n("p",[t._v("找到是哪行之后,就和正常的二分查找没有什么区别了:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//二分查找")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" r "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n r "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])]),n("p",[t._v("然后再把代码拼凑到一起:")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//java")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("searchMatrix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" row "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("row"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" top "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bottom "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" col "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("top "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" bottom"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("top "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" bottom"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("matrix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("col"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n top "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n bottom "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" top"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" r "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" r"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" target"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n l "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n r "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br")])]),n("h2",{attrs:{id:"_03、小知识"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、小知识"}},[t._v("#")]),t._v(" 03、小知识")]),t._v(" "),n("blockquote",[n("p",[t._v("斐波那契数列是以兔子繁殖为例子而引入的,所以又称为“兔子数列”。指的是这样一个数列:从第3项开始,每一项都等于前两项之和。")])]),t._v(" "),n("br"),t._v(" "),n("p",[n("strong",[t._v("1,1,2,3,5,8,13,21,34,55,89,144........")])]),t._v(" "),n("img",{attrs:{src:a(963),alt:"PNG"}}),t._v(" "),n("center",[t._v("(1+1=2,2+1=3,2+3=5.....21+5+8=21+13=34)")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(964),alt:"PNG"}}),t._v(" "),n("br"),t._v(" "),n("p",[t._v("今天的题目到这里就结束了,你学会了吗?快来评论区留下你的想法吧!")])],1)}),[],!1,null,null,null);s.default=r.exports},962:function(t,s,a){t.exports=a.p+"assets/img/1.167e9c39.jpg"},963:function(t,s,a){t.exports=a.p+"assets/img/2.d4084b13.jpg"},964:function(t,s,a){t.exports=a.p+"assets/img/3.5fcd1024.gif"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/84.7155dbc0.js b/learning/.vuepress/dist/assets/js/84.7155dbc0.js deleted file mode 100644 index 6e10562e..00000000 --- a/learning/.vuepress/dist/assets/js/84.7155dbc0.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[84],{1035:function(t,e,n){"use strict";var a=n(411);n.n(a).a},1159:function(t,e,n){"use strict";n.r(e);var a={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:function(t,e){var n=e.props,a=e.slots;return t("span",{class:["badge",n.type],style:{verticalAlign:n.vertical}},n.text||a().default)}},i=(n(1035),n(3)),r=Object(i.a)(a,void 0,void 0,!1,null,"312e2a2a",null);e.default=r.exports},411:function(t,e,n){}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/85.41496216.js b/learning/.vuepress/dist/assets/js/85.41496216.js deleted file mode 100644 index 16b0ed41..00000000 --- a/learning/.vuepress/dist/assets/js/85.41496216.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[85],{1050:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),n("p",[s._v("首先还是看下题目:")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("题目14: 最长公共前缀")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v('编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,则返回""')])])])]),s._v(" "),n("p",[n("strong",[s._v("示例1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: ["flower","flow","flight"]\n输出: "fl"\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v('输入: ["dog","racecar","car"]\n输出: ""\n')])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[s._v("解释:")]),s._v(" "),n("ul",[n("li",[s._v("输入不存在公共前缀。")])]),s._v(" "),n("p",[s._v("说明:")]),s._v(" "),n("ul",[n("li",[s._v("所有输入只包含小写字母 a-z")])]),s._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[s._v("#")]),s._v(" 02、题解分析")]),s._v(" "),n("blockquote",[n("p",[s._v("我们要想寻找最长公共前缀,那么"),n("strong",[s._v("首先这个前缀是公共的,我们可以从任意一个元素中找到它")]),s._v('。假定我们现在就从一个数组中寻找最长公共前缀,那么首先,我们可以将第一个元素设置为基准元素x0。假如数组为["flow","flower","flight"],flow就是我们的基准元素x0。')])]),s._v(" "),n("p",[s._v("然后我们只需要"),n("strong",[s._v("依次将基准元素和后面的元素进行比较")]),s._v("(假定后面的元素依次为x1,x2,x3....),"),n("strong",[s._v("不断更新基准元素,直到基准元素和所有元素都满足最长公共前缀的条件")]),s._v(",就可以得到最长公共前缀。")]),s._v(" "),n("p",[s._v("具体比对过程如下:")]),s._v(" "),n("ul",[n("li",[s._v("如果strings.Index(x1,x) == 0,则直接跳过(因为此时x就是x1的最长公共前缀),对比下一个元素。(如flower和flow进行比较)")]),s._v(" "),n("li",[s._v("如果strings.Index(x1,x) != 0, 则截取掉基准元素x的最后一个元素,再次和x1进行比较,直至满足string.Index(x1,x) == 0,此时截取后的x为x和x1的最长公共前缀。(如flight和flow进行比较,依次截取出flow-flo-fl,直到fl被截取出,此时fl为flight和flow的最长公共前缀)")])]),s._v(" "),n("p",[s._v("具体过程如下图所示:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(470),alt:"PNG"}}),s._v(" "),n("blockquote",[n("p",[s._v("我们需要注意的是,在处理基准元素的过程中,"),n("strong",[s._v("如果基准元素和任一一个元素无法匹配,则说明不存在最长公共元素。")])])]),s._v(" "),n("p",[s._v("最后,我们记得处理一下临界条件。如果给定数组是空,也说明没有最长公共元素。")]),s._v(" "),n("p",[s._v("然后我们就可以开始写我们的代码了。")]),s._v(" "),n("h2",{attrs:{id:"_03、代码分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、代码分析"}},[s._v("#")]),s._v(" 03、代码分析")]),s._v(" "),n("p",[s._v("根据分析,我们很容易得到下面的题解:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//GO")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("longestCommonPrefix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("strs "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("strs"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n prefix "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" strs"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("k "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("range")]),s._v(" strs "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" strings"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Index")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("k"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n prefix "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" prefix\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br")])]),n("p",[s._v("运行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"50%"},attrs:{src:a(471),alt:"PNG"}}),s._v(" "),n("p",[s._v("当然,我们也可以用分治法或者其他方法来解答这道题目。你可以自己尝试尝试哈。我们下期见!")])])}),[],!1,null,null,null);t.default=r.exports},470:function(s,t,a){s.exports=a.p+"assets/img/1.ca86a52f.png"},471:function(s,t,a){s.exports=a.p+"assets/img/2.f9414b45.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/86.ad8a1ea5.js b/learning/.vuepress/dist/assets/js/86.ad8a1ea5.js deleted file mode 100644 index 8645f13b..00000000 --- a/learning/.vuepress/dist/assets/js/86.ad8a1ea5.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[86],{1049:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("p",[t._v("在leetcode上,股票相关的题目有8道之多:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(468),alt:"PNG"}}),t._v(" "),n("p",[t._v("而且这一类型的题,面试时出现的频率非常的高。稍微改一改条件,就让我们防不胜防。那我们如何攻克这一类题型呢?我们从最简单的一道开始看起:")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("第122题:买卖股票的最佳时机 II")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。")])])])]),t._v(" "),n("p",[t._v("如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。")]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [7,1,5,3,6,4]\n输出: 7\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[t._v("解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。")]),t._v(" "),n("p",[t._v("​ 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。")]),t._v(" "),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [1,2,3,4,5]\n输出: 4\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[t._v("解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。")]),t._v(" "),n("p",[t._v("​ 注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。")]),t._v(" "),n("p",[t._v("​ 因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。")]),t._v(" "),n("p",[n("strong",[t._v("示例 3:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [7,6,4,3,1]\n输出: 0\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[t._v("解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。")]),t._v(" "),n("p",[t._v("题目分析:首先我们看一下题目中给出的两个条件:")]),t._v(" "),n("p",[t._v("1、"),n("strong",[t._v("不能参与多笔交易")]),t._v("。换句话讲,我们只能在手上没有股票的时候买入,也就是"),n("strong",[t._v("必须在再次购买前出售掉之前的股票")]),t._v("。像我们平时买股票时的追涨杀跌是不可以的。")]),t._v(" "),n("p",[t._v("2、"),n("strong",[t._v("尽可能地多进行交易")]),t._v("。这个非常好理解。像是黄金,一年基本上都有2-3次涨跌。我们只要把握住机会,在每一次涨跌的时候,低价卖入高价卖出,就可以使利益达到最大化。这个条件也是相当重要的,如果我们把这里变成,最多完成两笔交易,就变成另一道题。")]),t._v(" "),n("p",[t._v("现在题目搞清楚了,我们来思考一下。")]),t._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[t._v("#")]),t._v(" 02、题解分析")]),t._v(" "),n("p",[t._v("假设给定的数组为:[7, 1, 5, 3, 6, 4] 我们将其绘制成折线图,大概是下面这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(469),alt:"PNG"}}),t._v(" "),n("p",[t._v("如我们上面分析,我们要在满足1和2的条件下获取最大利益,其实就是尽可能多的低价买入高价卖出。而"),n("strong",[t._v("每一次上升波段,其实就是一次低价买入高价卖出")]),t._v("。而我们没有限制交易次数,也就是我们需要"),n("strong",[t._v("求出所有的上升波段的和")]),t._v("。上图里就是A+B,也就是(5-1)+(6-3) = 7,就是我们能获取到的最大利益。")]),t._v(" "),n("p",[t._v("其实也就是尽可能多的低价买入,高价卖出啦。")]),t._v(" "),n("h2",{attrs:{id:"_03、代码分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、代码分析"}},[t._v("#")]),t._v(" 03、代码分析")]),t._v(" "),n("p",[t._v("根据以上分析,我们很容易得到下面的题解:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//GO")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxProfit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("prices "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("prices"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n dp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("prices"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("prices"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("prices"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("prices"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("prices"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("prices"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("b "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" b "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" a\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" b\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br")])]),n("h2",{attrs:{id:"_04、题目扩展"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、题目扩展"}},[t._v("#")]),t._v(" 04、题目扩展")]),t._v(" "),n("p",[t._v("图解的方式其实在各种算法题中,屡见不鲜。而我们通过图解的方式,也可以抽丝剥茧一样,一层一层剥掉算法题目的外壳,寻找到最直观的解题思路,直捣黄....咳咳,直奔核心。那我们又如何用图解的观察方式,来对本系列的其他题目寻找到一种通用解法,来规避题目中的陷阱呢?浩仔讲算法,我们下期再见喽!")])])}),[],!1,null,null,null);s.default=r.exports},468:function(t,s,a){t.exports=a.p+"assets/img/1.d58fcd9b.jpg"},469:function(t,s,a){t.exports=a.p+"assets/img/2.6915c926.png"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/87.c0c21a1d.js b/learning/.vuepress/dist/assets/js/87.c0c21a1d.js deleted file mode 100644 index a89362d2..00000000 --- a/learning/.vuepress/dist/assets/js/87.c0c21a1d.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[87],{1052:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("题目189: 旋转数组")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。")])])])]),t._v(" "),n("p",[n("strong",[t._v("示例 1:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [1,2,3,4,5,6,7] 和 k = 3\n输出: [5,6,7,1,2,3,4]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[t._v("解释:")]),t._v(" "),n("ul",[n("li",[t._v("向右旋转 1 步: [7,1,2,3,4,5,6]")]),t._v(" "),n("li",[t._v("向右旋转 2 步: [6,7,1,2,3,4,5]")]),t._v(" "),n("li",[t._v("向右旋转 3 步: [5,6,7,1,2,3,4]")])]),t._v(" "),n("p",[n("strong",[t._v("示例 2:")])]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("输入: [-1,-100,3,99] 和 k = 2\n输出: [3,99,-1,-100]\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[t._v("解释:")]),t._v(" "),n("ul",[n("li",[t._v("向右旋转 1 步: [99,-1,-100,3]")]),t._v(" "),n("li",[t._v("向右旋转 2 步: [3,99,-1,-100]")])]),t._v(" "),n("p",[t._v("说明:")]),t._v(" "),n("p",[t._v("尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。")]),t._v(" "),n("p",[n("strong",[t._v("要求使用空间复杂度为 O(1) 的 原地 算法。")])]),t._v(" "),n("br"),t._v(" "),n("blockquote",[n("p",[t._v("这道题如果不要求原地翻转的话,其实相当简单。但是原地翻转的方法却并不容易想到,我们直接看题解。")])]),t._v(" "),n("h2",{attrs:{id:"_02、题目图解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[t._v("#")]),t._v(" 02、题目图解")]),t._v(" "),n("blockquote",[n("p",[t._v("这个方法基于这个事实:"),n("strong",[t._v("若我们需要将数组中的元素向右移动 k 个位置, 那么 k%l (l为数组长度) 的尾部元素会被移动到头部,剩下的元素会被向后移动。")])])]),t._v(" "),n("p",[t._v("假设 我们现在数组为[1,2,3,4,5,6,7], l=7 且 k=3 。")]),t._v(" "),n("p",[t._v("如下图可以看到5,6,7 被移动到 数组头部。")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(474),alt:"PNG"}}),t._v(" "),n("p",[t._v("通过观察我们可以得到,我们要得到最终的结果。"),n("strong",[t._v("我们只需要将所有元素反转,然后反转前 k 个元素,再反转后面l-k个元素,就能得到想要的结果。")])]),t._v(" "),n("p",[t._v("如下图:")]),t._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(475),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、题目解答"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、题目解答"}},[t._v("#")]),t._v(" 03、题目解答")]),t._v(" "),n("p",[t._v("根据分析,我们可以得到下面的题解:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//GO")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("rotate")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("reverse")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("reverse")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("k"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("reverse")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("k"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("reverse")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tarr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br")])])])}),[],!1,null,null,null);s.default=r.exports},474:function(t,s,a){t.exports=a.p+"assets/img/1.c67a662e.png"},475:function(t,s,a){t.exports=a.p+"assets/img/2.cbeec2a0.png"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/88.3c06c1dc.js b/learning/.vuepress/dist/assets/js/88.3c06c1dc.js deleted file mode 100644 index 7a9a4a87..00000000 --- a/learning/.vuepress/dist/assets/js/88.3c06c1dc.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[88],{1051:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("题目27:移除元素")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。")])])])]),s._v(" "),n("p",[s._v("不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。")]),s._v(" "),n("p",[s._v("元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。")]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("给定 nums = [3,2,2,3], val = 3,\n函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。\n你不需要考虑数组中超出新长度后面的元素。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("blockquote",[n("p",[s._v("这道题比较简单哦,只要把握好“原地删除”这个关键字,就可以顺利求解啦!")])]),s._v(" "),n("p",[s._v("具体过程如下图所示:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(472),alt:"PNG"}}),s._v(" "),n("p",[s._v("根据分析,我们可以得到下面的题解:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//GO")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("removeElement")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" val "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" val "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n nums "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n retunums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("br"),s._v(" "),n("p",[s._v("和这道题类似的还有LeetCode 26题,大家可以尝试自己先做一做,然后再看答案哦。")]),s._v(" "),n("h2",{attrs:{id:"_02、类似题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、类似题目分析"}},[s._v("#")]),s._v(" 02、类似题目分析")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("题目26:删除排序数组中的重复项")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次。")])])])]),s._v(" "),n("p",[s._v("返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。")]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("给定数组 nums = [1,1,2],\n函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。\n你不需要考虑数组中超出新长度后面的元素。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("给定 nums = [0,0,1,1,1,2,2,3,3,4],\n函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。\n你不需要考虑数组中超出新长度后面的元素。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("br"),s._v(" "),n("blockquote",[n("p",[s._v("这道题的重点是原地两个字,也就是要求必须在O(1)的空间下完成。并且题中已经告知了数组为有序数组,这样重复的元素一定是连在一起的,我们只需要一个一个移除重复的元素即可,具体方案方案怎么做,我们看看下面就会明白了。")])]),s._v(" "),n("p",[s._v("移除的具体过程:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(473),alt:"PNG"}}),s._v(" "),n("p",[s._v("根据分析,我们可以得到下面的题解:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//GO")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("removeDuplicates")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n nums "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("br"),s._v(" "),n("p",[s._v("好啦,关于数组原地操作的两道题就讲到这里啦,如果大家有兴趣的话,可以参考做一下LeetCode 283题(移动O),也是一样的做法哦!")])])}),[],!1,null,null,null);t.default=e.exports},472:function(s,t,a){s.exports=a.p+"assets/img/1.df8eb526.jpg"},473:function(s,t,a){s.exports=a.p+"assets/img/2.07279503.jpeg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/89.dc7b2d6f.js b/learning/.vuepress/dist/assets/js/89.dc7b2d6f.js deleted file mode 100644 index 656eca8d..00000000 --- a/learning/.vuepress/dist/assets/js/89.dc7b2d6f.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[89],{1054:function(s,n,a){"use strict";a.r(n);var t=a(3),e=Object(t.a)({},(function(){var s=this,n=s.$createElement,t=s._self._c||n;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("blockquote",[t("p",[s._v("看到这个标题,大家肯定会觉得,不就是“加1”嘛,这么简单的问题我可以!但是就是这么简单的“加1”可是面试的高频题哦,所以我们就一起来看看吧。按照往例,我们还是从一道LeetCode题开始吧。")])]),s._v(" "),t("h2",{attrs:{id:"_01、题目分析"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),t("table",[t("thead",[t("tr",[t("th",[s._v("第66题:加一")])])]),s._v(" "),t("tbody",[t("tr",[t("td",[s._v("给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。")])])])]),s._v(" "),t("p",[s._v("最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。")]),s._v(" "),t("p",[t("strong",[s._v("示例 1:")])]),s._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("输入: [1,2,3]\n输出: [1,2,4]\n解释: 输入数组表示数字 123。\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("p",[t("strong",[s._v("示例 2:")])]),s._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("输入: [4,3,2,1]\n输出: [4,3,2,2]\n解释: 输入数组表示数字 4321。\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("br"),s._v(" "),t("blockquote",[t("p",[s._v("题目分析:")])]),s._v(" "),t("p",[s._v("根据题目,我们需要加一!没错,加一很重要。因为它只是加一,所以我们会考虑到两种情况:")]),s._v(" "),t("ul",[t("li",[t("p",[t("strong",[s._v("普通情况,除9之外的数字加1。")])])]),s._v(" "),t("li",[t("p",[t("strong",[s._v("特殊情况,9加1。(因为9加1需要进位)")])])])]),s._v(" "),t("p",[s._v("所以我们只需要模拟这两种运算,就可以顺利进行求解!")]),s._v(" "),t("h2",{attrs:{id:"_02、题目图解"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[s._v("#")]),s._v(" 02、题目图解")]),s._v(" "),t("p",[s._v("假设我们的数为[1,9,9]")]),s._v(" "),t("p",[s._v("大概是下面这样:(这个图解...真的有点太简单了...)")]),s._v(" "),t("img",{staticStyle:{zoom:"80%"},attrs:{src:a(484),alt:"PNG"}}),s._v(" "),t("p",[s._v("当然,这里我们需要考虑一种特殊情况,就是类似99,或者999,我们需要进行拼接数组。具体如下图:")]),s._v(" "),t("img",{staticStyle:{zoom:"80%"},attrs:{src:a(485),alt:"PNG"}}),s._v(" "),t("p",[s._v("通过以上分析,我们最后只需要将其转换成代码即可!这样看来,“加1”是不是也不像想象中的那么简单?")]),s._v(" "),t("h2",{attrs:{id:"_03、go语言示例"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[s._v("#")]),s._v(" 03、GO语言示例")]),s._v(" "),t("p",[s._v("根据以上分析,我们可以得到下面的题解:")]),s._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("func plusOne(digits []int) []int {\n var result []int\n addon := 0\n for i := len(digits) - 1;i >= 0; i-- {\n digits[i]+=addon\n addon = 0\n if i == len(digits) - 1 {\n digits[i]++\n }\n if digits[i] == 10 {\n addon = 1\n digits[i] = digits[i] % 10\n }\n }\n if addon == 1 {\n result = make([]int, 1)\n result[0] = 1\n result = append(result,digits...)\n }else{\n result = digits\n }\n return result\n}\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br")])]),t("p",[t("strong",[s._v("提示:")])]),s._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("append(a,b...) 的含义是:将b切片中的元素追加到a中。\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])}),[],!1,null,null,null);n.default=e.exports},484:function(s,n,a){s.exports=a.p+"assets/img/1.7c9cc0a7.png"},485:function(s,n,a){s.exports=a.p+"assets/img/2.eac5c299.png"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/9.4aa8aaeb.js b/learning/.vuepress/dist/assets/js/9.4aa8aaeb.js deleted file mode 100644 index 7d6572a9..00000000 --- a/learning/.vuepress/dist/assets/js/9.4aa8aaeb.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{1135:function(t,s,a){"use strict";a.r(s);var n=a(3),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("blockquote",[n("p",[t._v("今天为大家分享经典的荷兰国旗问题。最近折腾了挺多事情,状态有点乱糟糟的。这两天刚刚调整好,全副武装,横戈马上行!")])]),t._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),n("blockquote",[n("p",[t._v('"荷兰国旗问题" 是计算机科学中的一个经典题目,它是由Edsger Dijkstra提出的。荷兰国旗由红、白、蓝三色组成。')])]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("荷兰国旗问题:现在有若干个红、白、蓝三种颜色的球随机排列成一条直线。现在我们的任务是把这些球按照红、白、蓝排序。")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("这个问题之所以叫荷兰国旗,是因为我们可以将红白蓝三色小球想象成条状物,有序排列后正好组成荷兰国旗。")])])])]),t._v(" "),n("p",[t._v("大概就是这么个意思:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(904),alt:"PNG"}}),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(905),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_02、题解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题解分析"}},[t._v("#")]),t._v(" 02、题解分析")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题很经典,很高频。")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("便于分析,我们把上面的图稍微改一下:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(906),alt:"PNG"}}),t._v(" "),n("p",[t._v("改成这样:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(907),alt:"PNG"}}),t._v(" "),n("p",[t._v("好了,这道题结束了。O(∩_∩)O")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("Emmmm....不开玩笑,现在我们讲解如何完成这个过程。")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("首先,用脚趾头都可以想到的是,最终排序完成后的数组是分成三份的:")]),t._v(" "),n("br"),t._v(" "),n("center",[t._v("红-白-蓝")]),t._v(" "),n("p",[t._v("红-白-蓝")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("那总共就三个颜色,我们要区分开来,是不是最少需要两条分隔线?A线的左侧为0,右侧为1。B线的左侧为1,右侧为2。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(908),alt:"PNG"}}),t._v(" "),n("p",[t._v("但是刚开始的时候,红-白-蓝 三色是乱序的,所以此时的两条线我们是不是可以看成在最两侧?")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(909),alt:"PNG"}}),t._v(" "),n("p",[t._v("那我们剩下的是不是只需要把 A线 和 B线 间的数据维护成满足 AB 线的规则就可以了?那要维护 AB 线间的数据,是不是至少你得遍历下 AB 线间的数据?")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(910),alt:"PNG"}}),t._v(" "),n("p",[t._v("我们从 C 位置处开始,"),n("strong",[t._v("我们发现此时 C 等于0。是不是意味着,我们应把这个元素放到 A 的左侧,所以我们移动 A线。当然,我们也需要移动一下 C 的位置。(CASE-1)")])]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(911),alt:"PNG"}}),t._v(" "),n("p",[t._v("然后我们发现"),n("strong",[t._v("新的 C 位置处等于2,那是不是说明这个元素应该位于 B 的右侧。所以我们要把该位置的元素 和 B位置处的元素进行交换,同时移动B。(CASE-2)")])]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(912),alt:"PNG"}}),t._v(" "),n("p",[t._v("但是这里要注意,"),n("strong",[t._v("C 交换完毕后,C 不能向前移")]),t._v("。因为C指向的元素可能是属于前部的,若此时 C 前进则会导致该位置不能被交换到前部。继续向下遍历。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(913),alt:"PNG"}}),t._v(" "),n("p",[t._v("有意思了,**我们发现 C 指向位置处等于1。有没有发现这种本身就满足规则了?所以我们忽略就可以了。(CASE-3)**继续移动 C。")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(914),alt:"PNG"}}),t._v(" "),n("p",[t._v("主要就这三种 CASE,我们把剩下的图都绘制出来:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(915),alt:"PNG"}}),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(916),alt:"PNG"}}),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(917),alt:"PNG"}}),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(918),alt:"PNG"}}),t._v(" "),n("p",[n("strong",[t._v("总结一下:")])]),t._v(" "),n("br"),t._v(" "),n("ul",[n("li",[n("p",[t._v("1)若遍历到的位置为0,则说明它一定位于A的左侧。于是就和A处的元素交换,同时向右移动A和C。")])]),t._v(" "),n("li",[n("p",[t._v("2)若遍历到的位置为1,则说明它一定位于AB之间,满足规则,不需要动弹。只需向右移动C。")])]),t._v(" "),n("li",[n("p",[t._v("3)若遍历到的位置为2,则说明它一定位于B的右侧。于是就和B处的元素交换,交换后只把B向左移动,C仍然指向原位置。(因为交换后的C可能是属于A之前的,所以C仍然指向原位置)")])])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("大概就是这么一个分析过程,代码其实就很简单了(注意体会一下下面两种代码 C 的处理逻辑):")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("python版本:")]),t._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("//")]),t._v("py3 \n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" sortColors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("self"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" List"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" \n a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" \n b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" \n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])]),n("p",[t._v("go版本:")]),t._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//go ")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("sortColors")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n a "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" \n b "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" c "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("a"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" \n a"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("b"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n c"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("\n b"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br")])]),n("p",[t._v("执行结果:")]),t._v(" "),n("img",{attrs:{src:a(919),alt:"PNG"}}),t._v(" "),n("h2",{attrs:{id:"_03、总结"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、总结"}},[t._v("#")]),t._v(" 03、总结")]),t._v(" "),n("blockquote",[n("p",[t._v("这道题目限制了最大数为 3999,时间复杂度也就被限制成了O(1)。(这句话忽略!上次的文章忘记删除了。。)")])]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("好吧,基本就是这样了。这道题目在 leetcode 上对应的是:")]),t._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(920),alt:"PNG"}}),t._v(" "),n("p",[t._v("我觉得我讲的还是可以的。大家要是认为ok的话,给我来个转发吧~感谢!")]),t._v(" "),n("br"),t._v(" "),n("p",[t._v("今天的题目到这里就结束了,你学会了吗?快来评论区留下你的想法吧!")])],1)}),[],!1,null,null,null);s.default=r.exports},904:function(t,s){t.exports="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAUEAAADlCAMAAAD6KrVPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAh1BMVEX////8/Pzw8PC+Jia8JCTrv7/u7u6yAADgtLTYDwC6AwDlFAD5+fnpvb1zXV1yV1dzV1fIp6dmZmZ6c3PR0dF8fHzJqKh9fX319fXY2Nh7e3vNzc3W1tZda3Onu8g1fKUZa5woiLkccaKovMkmhLsAbq8UlNUboeIEdre/2uu92Okkgrm0z+CZQGbdAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAxJJREFUeNrt3dtO21AURdEkUNILhdYlvVPohZak/P/39TUoUY6lnHqtxZ7zMURbW0O2X45MZrPt5vPZnhZ7Ptv7zfEfPr2ZvpulzPTdLGWm72YpM303S5npu1nKTN/NUmb6bpYy03ezlJm+m6XM9N0sZabvZikzfTdLmem7WcpM381SZvpuljLTd7OUmb6bpcz03Sxl5qG/nZye9C9m5rOm0mK7s7PFbqfLyj3fBXmsNOYaXL4o28tl+xocJfiqaggiqA5BBNUhiKA6BBFUhyCC6hBEUB2CCKpDEEF1CE4hON/u/Hy+W23B17sgj5UQPFqQu/iwIM9BBBHMDkEE1SGIoDoEEVSHIILqEERQHYIIqkMQQXUITiHIOclhQU6a/r8gd/FhQZ6DCCKYHYIIqkMQQXUIIqgOQQTVIYigOgQRVIcgguoQnEKwfU5ycfmmbpdvO5w0XQyVawu27+J3w1XZVsP7Ds/BD8PVx6qthk8IIohgdAgiqA5BBNUhiKA6BBFUhyCC6hBEUB2CCKpDcArB9u80fS4t+KXD7zRxDXIXI4hgbggiqA5BBNUhiKA6BBFUhyCC6hBEUB2CCKpDcArB9hs5tQW/dninCcFj32mqLchzEEEEs0MQQXUIIqgOQQTVIYigOgQRVIcgguoQRFAdglMIts9JrodV3YZvHU6artX/wE5aW7B9F9/cfi/bj9ufHZ6Dv+5+/6na/d0aQQQRjA5BBNUhiKA6BBFUhyCC6hBEUB2CCKpDEEF1YwTb5yS1BTcdTpoQPPakqbYgz0EEEcwOQQTVIYigOgQRVIcgguoQRFAdggiqQxBBdQgiqG6MYPt3mv6WFnzo8DtNXIPcxQgimBuCCKpDEEF1CCKoDkEE1SGIoDoEEVSHIILqEJxCcMwbOfd16/ROU+V6vNO0fljvttkc9WHQzA7Pwdli7DfHf/j0ZvpuljLTd7OUmb6bpcz03Sxlpu9mKTN9N0uZ6btZykzfzVJm+m6WMtN3s5SZvpulzPTdLGWm72YpM303S5npu1nKTN/NUmb6bmY/8x8tLlFlMZp2egAAAABJRU5ErkJggg=="},905:function(t,s,a){t.exports=a.p+"assets/img/2.a8d7369c.jpg"},906:function(t,s,a){t.exports=a.p+"assets/img/3.c301cca8.jpg"},907:function(t,s,a){t.exports=a.p+"assets/img/4.cf1947cb.jpg"},908:function(t,s,a){t.exports=a.p+"assets/img/5.ab912240.jpg"},909:function(t,s,a){t.exports=a.p+"assets/img/6.c7796e6a.jpg"},910:function(t,s,a){t.exports=a.p+"assets/img/7.3e8ddcf3.jpg"},911:function(t,s,a){t.exports=a.p+"assets/img/8.2d128253.jpg"},912:function(t,s,a){t.exports=a.p+"assets/img/9.b5669156.jpg"},913:function(t,s,a){t.exports=a.p+"assets/img/10.75d5930d.jpg"},914:function(t,s,a){t.exports=a.p+"assets/img/11.fda608bf.jpg"},915:function(t,s,a){t.exports=a.p+"assets/img/12.0f33a19f.jpg"},916:function(t,s,a){t.exports=a.p+"assets/img/13.e94b5ec0.jpg"},917:function(t,s,a){t.exports=a.p+"assets/img/14.6eb82e3c.jpg"},918:function(t,s,a){t.exports=a.p+"assets/img/15.b59c6be6.jpg"},919:function(t,s,a){t.exports=a.p+"assets/img/16.da98407a.jpg"},920:function(t,s,a){t.exports=a.p+"assets/img/17.45ce22f3.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/90.6f49bf17.js b/learning/.vuepress/dist/assets/js/90.6f49bf17.js deleted file mode 100644 index 0f352e18..00000000 --- a/learning/.vuepress/dist/assets/js/90.6f49bf17.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[90],{1061:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h2",{attrs:{id:"_01、概念讲解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、概念讲解"}},[s._v("#")]),s._v(" 01、概念讲解")]),s._v(" "),n("blockquote",[n("p",[s._v("关于动态规划的资料很多,官方的定义是"),n("strong",[s._v("指把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解")]),s._v("。概念中的"),n("strong",[s._v("各阶段之间的关系")]),s._v(",其实指的就是"),n("strong",[s._v("状态转移方程")]),s._v("。很多人觉得DP难(下文统称动态规划为DP),根本原因是因为"),n("strong",[s._v("DP跟一些固定形式的算法不同")]),s._v("(比如DFS、二分法、KMP),它没有实际的步骤规定第一步、第二步来做什么,所以准确来说,"),n("strong",[s._v("DP其实是一种解决问题的思想")]),s._v("。")])]),s._v(" "),n("p",[n("br"),s._v("这种思想的本质是:"),n("strong",[s._v("一个规模比较大的问题")]),s._v("(可以用两三个参数表示的问题),可以"),n("strong",[s._v("通过若干规模较小的问题的结果来得到")]),s._v("的(通常会寻求到一些特殊的计算逻辑,如求最值等),如下图所示,一个大规模的问题由若干个子问题组成。")]),s._v(" "),n("p",[n("br"),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(510),alt:"img"}})]),s._v(" "),n("p",[n("br"),s._v("那么我们应该如何通过子问题去得到大规模问题呢?这就用到了"),n("strong",[s._v("状态转移方程")]),s._v("(上面有介绍状态转移方程哦,不懂的请往上翻哦),我们一般看到的状态转移方程,基本都是这样:")]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("opt :指代特殊的计算逻辑,通常为 max or min。\n\ni,j,k 都是在定义DP方程中用到的参数。\n\ndp[i] = opt(dp[i-1])+1\n\ndp[i][j] = w(i,j,k) + opt(dp[i-1][k])\n\ndp[i][j] = opt(dp[i-1][j] + xi, dp[i][j-1] + yj, ...)\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("p",[n("br"),s._v("每一个状态转移方程,多少都有一些细微的差别。这个其实很容易理解,世间的关系多了去了,不可能抽象出完全可以套用的公式。所以我个人其实"),n("strong",[s._v("不建议去死记硬背各种类型的状态转移方程")]),s._v("。但是DP的题型真的就完全无法掌握,无法归类进行分析吗?我认为不是的。在本系列中,我将由简入深为大家讲解动态规划这个主题。")]),s._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("p",[s._v("我们先看一道最简单的DP题目,熟悉DP的概念:")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",{staticStyle:{"text-align":"left"}},[s._v("第70题:爬楼梯")])])]),s._v(" "),n("tbody",[n("tr",[n("td",{staticStyle:{"text-align":"left"}},[s._v("假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? **注意:**给定 "),n("em",[s._v("n")]),s._v(" 是一个正整数。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。\n1. 1 阶 + 1 阶\n2. 2 阶\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。\n1. 1 阶 + 1 阶 + 1 阶\n2. 1 阶 + 2 阶\n3. 2 阶 + 1 阶\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br")])]),n("h2",{attrs:{id:"_03-、图解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03-、图解分析"}},[s._v("#")]),s._v(" 03 、图解分析")]),s._v(" "),n("p",[s._v("通过分析我们可以明确,该题可以被分解为一些包含最优子结构的子问题,即它的"),n("strong",[s._v("最优解可以从其子问题的最优解来有效地构建")]),s._v("。满足“"),n("strong",[s._v("将大问题分解为若干个规模较小的问题")]),s._v("”的条件。所我们令 "),n("strong",[s._v("dp[n] 表示能到达第 n 阶")]),s._v("的方法总数,可以得到如下状态转移方程:")]),s._v(" "),n("blockquote",[n("center",[n("b",[s._v(" dp[n]=dp[n-1]+dp[n-2] ")])])],1),s._v(" "),n("ul",[n("li",[n("p",[s._v("上 1 阶台阶:有1种方式。")])]),s._v(" "),n("li",[n("p",[s._v("上 2 阶台阶:有1+1和2两种方式。")])]),s._v(" "),n("li",[n("p",[s._v("上 3 阶台阶:到达第3阶的方法总数就是到第1阶和第2阶的方法数之和。")])]),s._v(" "),n("li",[n("p",[s._v("上 n 阶台阶,到达第n阶的方法总数就是到第 (n-1) 阶和第 (n-2) 阶的方法数之和。")])])]),s._v(" "),n("p",[n("br"),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(511),alt:"img"}})]),s._v(" "),n("h2",{attrs:{id:"_04、go语言示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、go语言示例"}},[s._v("#")]),s._v(" 04、GO语言示例")]),s._v(" "),n("p",[s._v("根据以上分析,可以得到代码如下:")]),s._v(" "),n("div",{staticClass:"language-go line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("func")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("climbStairs")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" n "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\tdp "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\t\tdp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" dp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])])])}),[],!1,null,null,null);t.default=r.exports},510:function(s,t,a){s.exports=a.p+"assets/img/1.04bdda04.png"},511:function(s,t,a){s.exports=a.p+"assets/img/2.93e61020.png"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/91.d20dff4e.js b/learning/.vuepress/dist/assets/js/91.d20dff4e.js deleted file mode 100644 index a83356cd..00000000 --- a/learning/.vuepress/dist/assets/js/91.d20dff4e.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[91],{1062:function(t,s,n){"use strict";n.r(s);var a=n(3),r=Object(a.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("blockquote",[a("p",[t._v('在上一篇中,我们了解了什么是DP(动态规划),并且通过DP中的经典问题 "最大子序和",学习了'),a("strong",[t._v("状态转移方程")]),t._v("应该如何定义。在本节中,我们将沿用之前的分析方法,通过一道例题,进一步巩固之前的内容!")])]),t._v(" "),a("h2",{attrs:{id:"_01、题目分析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[t._v("#")]),t._v(" 01、题目分析")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("第300题:最长上升子序列")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("给定一个无序的整数数组,找到其中最长上升子序列的长度。")])])])]),t._v(" "),a("p",[a("strong",[t._v("示例:")])]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("输入: [10,9,2,5,3,7,101,18]\n输出: 4 \n解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("p",[t._v("说明:")]),t._v(" "),a("ul",[a("li",[t._v("可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。")])]),t._v(" "),a("blockquote",[a("p",[a("b",[t._v(" 这道题有一定难度哦!如果没有思路请回顾上一篇的学习内容!")]),t._v(" "),a("b",[t._v(" 不建议直接看题解!")])])]),t._v(" "),a("h2",{attrs:{id:"_02、题目图解"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目图解"}},[t._v("#")]),t._v(" 02、题目图解")]),t._v(" "),a("p",[t._v("首先我们分析题目,要找的是"),a("strong",[t._v("最长上升子序列")]),t._v("(Longest Increasing Subsequence,LIS)。因为题目中没有要求连续,所以**LIS可能是连续的,也可能是非连续的。**同时,"),a("strong",[t._v("LIS符合可以从其子问题的最优解来进行构建")]),t._v("的条件。所以我们可以尝试用动态规划来进行求解。首先我们定义状态:")]),t._v(" "),a("br"),t._v("\n> "),a("center",[a("b",[t._v(" dp[i] :表示以nums[i]结尾的最长上升子序列的长度 ")])]),t._v(" "),a("p",[t._v("我们假定nums为[1,9,5,9,3],如下图:")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(512),alt:"PNG"}}),t._v(" "),a("p",[t._v("我们分两种情况进行讨论:")]),t._v(" "),a("ul",[a("li",[t._v("如果nums[i]比前面的所有元素都小,那么dp[i]等于1(即它本身)(该结论正确)")]),t._v(" "),a("li",[t._v("如果nums[i]前面存在比他小的元素nums[j],那么dp[i]就等于dp[j]+1("),a("strong",[t._v("该结论错误,比如nums[3]>nums[0],即9>1,但是dp[3]并不等于dp[0]+1)")])])]),t._v(" "),a("br"),t._v("\n我们先初步得出上面的结论,但是我们发现了一些问题。**因为dp[i]前面比他小的元素,不一定只有一个!**\n"),a("p",[t._v("可能除了 nums[j],还包括 nums[k],nums[p] "),a("strong",[t._v("等等等等")]),t._v("。所以 dp[i] 除了可能等于 dp[j]+1,还有可能等于 dp[k]+1,dp[p]+1 "),a("strong",[t._v("等等等等")]),t._v("。所以我们求 dp[i],需要找到 dp[j]+1,dp[k]+1,dp[p]+1 "),a("strong",[t._v("等等等等")]),t._v(" 中的最大值。(我在3个等等等等上都进行了加粗,主要是因为初学者非常容易在这里摔跟斗!这里强调的目的是希望能记住这道题型!) 即:")]),t._v(" "),a("br"),t._v("\n> "),a("center",[a("b",[t._v(" dp[i] = max(dp[j]+1,dp[k]+1,dp[p]+1,.....) ")])]),t._v("\n> "),a("center",[a("b",[t._v(" 只要满足:")])]),t._v("\n> "),a("center",[a("b",[t._v(" nums[i] > nums[j] ")])]),t._v("\n> "),a("center",[a("b",[t._v(" nums[i] > nums[k] ")])]),t._v("\n> "),a("center",[a("b",[t._v(" nums[i] > nums[p] ")])]),t._v("\n> "),a("center",[a("b",[t._v(" .... ")])]),t._v(" "),a("br"),t._v("\n最后,我们只需要找到dp数组中的最大值,就是我们要找的答案。\n"),a("p",[t._v("分析完毕,我们绘制成图:")]),t._v(" "),a("img",{staticStyle:{zoom:"67%"},attrs:{src:n(513),alt:"PNG"}}),t._v(" "),a("h2",{attrs:{id:"_03、go语言示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_03、go语言示例"}},[t._v("#")]),t._v(" 03、Go语言示例")]),t._v(" "),a("p",[t._v("根据以上分析,可以得到代码如下:")]),t._v(" "),a("div",{staticClass:"language-go line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("lengthOfLIS")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tdp "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tresult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tdp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" nums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tdp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\tresult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("int")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" b "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" a\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" b\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])])],1)}),[],!1,null,null,null);s.default=r.exports},512:function(t,s){t.exports="data:image/png;base64,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"},513:function(t,s,n){t.exports=n.p+"assets/img/2.c5b636d0.jpeg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/92.2b29456e.js b/learning/.vuepress/dist/assets/js/92.2b29456e.js deleted file mode 100644 index 91031734..00000000 --- a/learning/.vuepress/dist/assets/js/92.2b29456e.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[92],{1079:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("在上一节中,我们学习了"),n("strong",[s._v("二叉搜索树")]),s._v("。那我们如何"),n("strong",[s._v("在二叉搜索树中查找一个元素")]),s._v("呢?和普通的二叉树又有何不同?我们将在本节内容中进行学习!")]),s._v(" "),n("p",[s._v("下面我们仍然通过例题进行讲解。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目分析"}},[s._v("#")]),s._v(" 01、题目分析")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第700题:二叉搜索树中的搜索")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定二叉搜索树(BST)的根节点和一个值。你需要在 BST 中找到节点值等于给定值的节点。返回以该节点为根的子树。如果节点不存在,则返回 NULL 。")])])])]),s._v(" "),n("p",[n("strong",[s._v("示例:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("给定二叉搜索树:\n\n 4\n / \\\n 2 7\n / \\\n 1 3\n \n和值: 2\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("p",[s._v("你应该返回如下子树:")]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v(" 2 \n / \\ \n 1 3\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("p",[s._v("在上述示例中,如果要找的值是 5 ,但因为没有节点值为 5 ,我们应该返回 NULL 。")]),s._v(" "),n("br"),s._v(" "),n("blockquote",[n("p",[n("b",[s._v(" 本题为必须掌握! 需要非常熟悉")])]),s._v(" "),n("p",[n("b",[s._v(" 为后续题目打基础!")])])]),s._v(" "),n("h2",{attrs:{id:"_02、复习巩固"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、复习巩固"}},[s._v("#")]),s._v(" 02、复习巩固")]),s._v(" "),n("p",[s._v("先复习一下,"),n("strong",[s._v("二叉搜索树")]),s._v("(BST)的特性:")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[n("strong",[s._v("若它的左子树不为空,则所有左子树上的值均小于其根节点的值")])]),s._v(" "),n("li",[n("strong",[s._v("若它的右子树不为空,则所有右子树上的值均大于其根节点得值")])]),s._v(" "),n("li",[n("strong",[s._v("它的左右子树也分别为二叉搜索树")])])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("如下图就是一棵典型的BST:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(634),alt:"img"}}),s._v(" "),n("h2",{attrs:{id:"_03、图解分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、图解分析"}},[s._v("#")]),s._v(" 03、图解分析")]),s._v(" "),n("p",[s._v("假设目标值为 val,根据BST的特性,我们可以很容易想到查找过程")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[s._v("如果val小于当前结点的值,转向其左子树继续搜索;")]),s._v(" "),n("li",[s._v("如果val大于当前结点的值,转向其右子树继续搜索;")]),s._v(" "),n("li",[s._v("如果已找到,则返回当前结点。")])]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(635),alt:"img"}}),s._v(" "),n("blockquote",[n("center",[n("b",[s._v(" 很简单,不是吗?")])])],1),s._v(" "),n("h2",{attrs:{id:"_04、代码示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_04、代码示例"}},[s._v("#")]),s._v(" 04、代码示例")]),s._v(" "),n("p",[s._v("给出递归和迭代两种解法:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//递归 ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TreeNode")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("searchBST")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TreeNode")]),s._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("val "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("searchBST")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("val "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("searchBST")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//迭代")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TreeNode")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("searchBST")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TreeNode")]),s._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("val "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v(" val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("val "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" val"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n root "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br")])]),n("br"),s._v(" "),n("blockquote",[n("p",[n("b",[s._v(" 递归与迭代的区别")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("递归:重复调用函数自身实现循环称为递归;")]),s._v(" "),n("p",[s._v("迭代:利用变量的原值推出新值称为迭代,或者说迭代是函数内某段代码实现循环;")])]),s._v(" "),n("p",[n("strong",[s._v("特别说明")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("本题确实很简单!专门拉出来讲解的目的有二。第一BST确实很重要,第二希望通过重复,能加深大家对BST的印象,不至于和后面的内容出现交叉感染!")])])}),[],!1,null,null,null);t.default=r.exports},634:function(s,t,a){s.exports=a.p+"assets/img/1.03e01a60.jpg"},635:function(s,t,a){s.exports=a.p+"assets/img/2.92dd024b.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/93.d66b344b.js b/learning/.vuepress/dist/assets/js/93.d66b344b.js deleted file mode 100644 index e7f74c15..00000000 --- a/learning/.vuepress/dist/assets/js/93.d66b344b.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[93],{1089:function(t,_,v){"use strict";v.r(_);var r=v(3),e=Object(r.a)({},(function(){var t=this,_=t.$createElement,r=t._self._c||_;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("blockquote",[r("p",[t._v("本系列主要为大家带来一整套的"),r("strong",[t._v("博弈论问题(广义)")]),t._v("。因为在面试的过程中,除了常规的算法题目,我们经常也会被问到一些趣味题型来考察思维,而这类问题中,很多都有博弈论的影子存在。这些公司里以FLAG(Facebook, LinkedIn, Amazon, Google)为典型,特别喜欢考察本类题型。同时,本系列将不一定都是算法问题,不是IT行业的小伙伴也可以进行学习,来提高分析问题的能力~")])]),t._v(" "),r("h2",{attrs:{id:"_01、辛普森悖论"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_01、辛普森悖论"}},[t._v("#")]),t._v(" 01、辛普森悖论")]),t._v(" "),r("table",[r("thead",[r("tr",[r("th",[t._v("辛普森悖论")])])]),t._v(" "),r("tbody",[r("tr",[r("td",[t._v("羊羊医院里统计了两种胆结石治疗方案的治愈率。在统计过程中,医生将病人分为大胆结石和小胆结石两组。统计结果如下:")])])])]),t._v(" "),r("img",{staticStyle:{zoom:"50%"},attrs:{src:v(682),alt:"img"}}),t._v(" "),r("ul",[r("li",[r("p",[t._v("对于小胆结石而言,手术A的治愈率(93%)高于 手术B(87%)")])]),t._v(" "),r("li",[r("p",[t._v("对于大胆结石而言,手术A的治愈率(73%)高于 手术B(69%)")]),t._v(" "),r("center",[r("b",[t._v("羊羊医院的医生得出结论: ")])]),t._v(" "),r("center",[t._v(" 无论是对于大小胆结石,手术A的治愈率都胜过手术B。")])],1)]),t._v(" "),r("br"),t._v(" "),r("p",[t._v("但是真的是这样吗?当然不是,我们根据样本统计出大小胆结石总计的治愈率,发现"),r("strong",[t._v("手术B(治愈率83%)其实是要高于手术A(治愈率78%)")]),t._v("。")]),t._v(" "),r("img",{staticStyle:{zoom:"50%"},attrs:{src:v(683),alt:"img"}}),t._v(" "),r("p",[t._v("为什么会出现这样的结果?这就是著名的"),r("strong",[t._v("辛普森悖论。")])]),t._v(" "),r("h2",{attrs:{id:"_02、直觉的缺陷"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_02、直觉的缺陷"}},[t._v("#")]),t._v(" 02、直觉的缺陷")]),t._v(" "),r("p",[t._v("得到了结论,我们来思考背后的东西。在我们的直觉里有这样一个逻辑:**如果一个事物的各部分都分别大于另一个事物的各部分,那么这个事物大于另一个事物。**比如:我们的直觉告诉我们如果手术A在两组病人中都更好,那么在所有病人中也应该更好。")]),t._v(" "),r("br"),t._v(" "),r("p",[t._v("我们可以将其公式化("),r("strong",[t._v("该公式错误")]),t._v("),假设:")]),t._v(" "),r("blockquote",[r("center",[r("b",[t._v("A=A1+A2+....+An ")])]),t._v(" "),r("center",[r("b",[t._v("B=B1+B2+....+Bn")])]),t._v(" "),r("center",[r("b",[t._v("如果对i=1,2...,n都有Ai>Bi,则A>B")])])],1),t._v(" "),r("p",[t._v("乍一看,我们觉得该公式没有问题~所以这个公式也就代表了我们大部分人的思维工作。其实在这个公式中,隐藏掉了一个很重要的条件:"),r("strong",[t._v("A1、A2、An 以及 B1、B2、Bn 并不能简单的通过“加”来得到 A 或者 B")]),t._v("。这就是"),r("strong",[t._v("可加性")]),t._v("的前提。在大脑的思维过程中,因为我们很难直接看到这个前提,进而就导致了我们错误的思考!")]),t._v(" "),r("h2",{attrs:{id:"_03、辛普森悖论举例"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_03、辛普森悖论举例"}},[t._v("#")]),t._v(" 03、辛普森悖论举例")]),t._v(" "),r("p",[t._v("下面我们举一些在生活中常见的辛普森悖论例子:")]),t._v(" "),r("br"),t._v(" "),r("ul",[r("li",[t._v("打麻将的时候,把把都赢小钱,造成赢钱的假象,其实不如别人赢一把大的。")]),t._v(" "),r("li",[t._v("在苹果和安卓的竞争中,你听见身边的人都在逃离苹果,奔向安卓。但是其实苹果的流入率还是要高于安卓。(有数据证明,很经典的案例)")]),t._v(" "),r("li",[t._v("你男票,这里比别人差,那里比别人差,但是其实他真的比别的男生差吗?(这个纯属本人胡扯了..)")])]),t._v(" "),r("br"),t._v(" "),r("p",[t._v("好啦,这篇内容就到这里了,你学会了吗?")])])}),[],!1,null,null,null);_.default=e.exports},682:function(t,_,v){t.exports=v.p+"assets/img/1.1fdf7c8b.jpg"},683:function(t,_,v){t.exports=v.p+"assets/img/2.deff66b7.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/94.86fe33e7.js b/learning/.vuepress/dist/assets/js/94.86fe33e7.js deleted file mode 100644 index 452cd67d..00000000 --- a/learning/.vuepress/dist/assets/js/94.86fe33e7.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[94],{1095:function(t,_,v){"use strict";v.r(_);var r=v(3),a=Object(r.a)({},(function(){var t=this,_=t.$createElement,r=t._self._c||_;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("blockquote",[r("p",[t._v("这次小浩又出去面试了,面试官说想和我画圈圈(原题为狼厂校招面试题),想起来还有点羞羞的。")])]),t._v(" "),r("h2",{attrs:{id:"_01、题目示例"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[t._v("#")]),t._v(" 01、题目示例")]),t._v(" "),r("table",[r("thead",[r("tr",[r("th",[t._v("面试题:小浩出去面试时,面试官拿出一张纸,在纸上从左到右画了一百个小圆圈(手速快,没办法)接下来,面试官要求两人轮流涂掉其中一个或者两个相邻的小圆圈。")])])]),t._v(" "),r("tbody",[r("tr",[r("td",[t._v("规定:谁涂掉最后一个小圆圈谁就赢了(换句话说,谁没有涂的了谁就输了)。问题是:小浩应该选取先涂还是后涂?如何才能有必胜策略?")])])])]),t._v(" "),r("h2",{attrs:{id:"_02、题目分析"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[t._v("#")]),t._v(" 02、题目分析")]),t._v(" "),r("blockquote",[r("p",[t._v("策梅洛定理(英语:Zermelo's theorem)是博弈论的一条定理,以恩斯特·策梅洛命名。策梅洛的论文于1913年以德文发表。表示在二人的有限游戏中,如果双方皆拥有完全的资讯,并且运气因素并不牵涉在游戏中,那先行或后行者当一必有一方有必胜/必不败的策略。")])]),t._v(" "),r("br"),t._v(" "),r("p",[t._v("作为聪明机智的小浩(没见过这么夸自己的),最后当然是小浩获胜。获胜的方法:"),r("strong",[t._v("小浩强烈要求先手进行游戏,并且在游戏开始时,先把正中间的两个小圆圈涂黑,于是左右两边各剩下了49个圆圈")]),t._v("。像是下面这样:")]),t._v(" "),r("img",{staticStyle:{zoom:"80%"},attrs:{src:v(697),alt:"PNG"}}),t._v(" "),r("p",[t._v("然后小浩开始模仿(逼死)面试官,面试官在左边涂掉哪些圆圈,小浩就对称地在右边涂掉哪些圆圈;面试官在右边涂掉哪些圆圈, 小浩就对称地在左边涂掉哪些圆圈。因此,只要面试官有走的,小浩就一定有走的,最终保证能获胜。")]),t._v(" "),r("img",{staticStyle:{zoom:"80%"},attrs:{src:v(698),alt:"PNG"}}),t._v(" "),r("h2",{attrs:{id:"_03、改编版"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_03、改编版"}},[t._v("#")]),t._v(" 03、改编版")]),t._v(" "),r("blockquote",[r("p",[t._v("大概的思想还是一致,想办法找到可以使用 “对称大法”的时机,就可以必胜。")])]),t._v(" "),r("br"),t._v(" "),r("p",[t._v("假若刚开始的时候,100小圆圈成环排列,游戏规则完全相同,此时如何可以让小浩有必胜策略?评论区留下你的想法吧!(为了让大家不对纯粹的算法题产生疲惫,以后采取 算法题 - 逻辑题 穿插的形式来进行讲解)")]),t._v(" "),r("h2",{attrs:{id:"_04、补充说明"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_04、补充说明"}},[t._v("#")]),t._v(" 04、补充说明")]),t._v(" "),r("blockquote",[r("p",[t._v("在组合博弈论里,无偏博弈是一类任意局势对于游戏双方都是平等的回合制双人游戏。这里平等的意思是所有可行的走法仅仅依赖于当前的局势,而与现在正要行动的是哪一方无关。换句话说,两个游戏者除了先后手之外毫无区别。")])]),t._v(" "),r("br"),t._v(" "),r("p",[t._v("有兴趣的可以看一下 掰巧克力 的题目:")]),t._v(" "),r("p",[r("RouterLink",{attrs:{to:"/1.6.博弈论系列/1.9.二分法系列/907.html"}},[t._v("巧克力问题")])],1),t._v(" "),r("p",[t._v("本题,以及之前的掰巧克力题目,其实都属于博弈论中的一类问题,它们有三个共同特征:")]),t._v(" "),r("ul",[r("li",[t._v("游戏信完全透明的,每个人都知道对方可以怎么走,结果会怎么样;")]),t._v(" "),r("li",[t._v("下一步可以怎么走与下一步是谁走没有关系,换句话说我能以哪些方式操作哪些棋子,你就能以哪些方式操作哪些棋子(排除了象棋之类的游戏);")]),t._v(" "),r("li",[t._v("整个游戏必然会在有限步之内结束,谁先没走的了谁就输了。")])]),t._v(" "),r("br"),t._v(" "),r("p",[t._v("在博弈论中,这类游戏就叫做“"),r("strong",[t._v("无偏博弈")]),t._v("”(impartial game)。"),r("strong",[t._v("在无偏博弈中,如果对于某个棋局状态,谁遇到了它谁就有办法必胜,我们就把它叫做“必胜态”;如果对于某个棋局状态,谁遇到了它对手就会有办法必胜,我们就把它叫做“必败态”")]),t._v("。")]),t._v(" "),r("br"),t._v(" "),r("p",[t._v("一般而言,根据题意我们可以立即判断出,那些不能走的状态就是必败态了。从这些必败态出发,我们可以按照下面两条规则,自底向上地推出其他所有状态的性质:有办法走到必败态的状态就是必胜态,只能走到必胜态的状态就是必败态。最终,我们总会得出初始状态的性质:它要么是必胜的,要么是必败的。因而,我们可以证明,在一切无偏博弈中,总有一个玩家有必胜策略。")]),t._v(" "),r("br"),t._v(" "),r("p",[t._v("如果后面再给大家分享博弈论的问题,我将会讲解一些“非无偏”类型的题目,供大家学习和参考。")])])}),[],!1,null,null,null);_.default=a.exports},697:function(t,_,v){t.exports=v.p+"assets/img/1.d9839c79.jpg"},698:function(t,_,v){t.exports=v.p+"assets/img/2.652e2a32.gif"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/95.015011f3.js b/learning/.vuepress/dist/assets/js/95.015011f3.js deleted file mode 100644 index 974e6649..00000000 --- a/learning/.vuepress/dist/assets/js/95.015011f3.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[95],{1101:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("今天仍然分享一道关于位运算颇为简单的题型,同时,从明天开始将会提高难度,大家做好准备。")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("blockquote",[n("p",[s._v("这道题,大家先想一想是用什么思路进行求解?")])]),s._v(" "),n("br"),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第136题:只出现一次的数字")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。")])])])]),s._v(" "),n("p",[n("strong",[s._v("说明:")])]),s._v(" "),n("p",[s._v("你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例 1:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: [2,2,1]\n输出: 1\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("p",[n("strong",[s._v("示例 2:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("输入: [4,1,2,1,2]\n输出: 4\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("br"),s._v(" "),n("p",[n("strong",[s._v("PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没什么意思了。")])]),s._v(" "),n("h2",{attrs:{id:"_02、题目分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、题目分析"}},[s._v("#")]),s._v(" 02、题目分析")]),s._v(" "),n("blockquote",[n("p",[s._v("位运算的题目我们已经讲了好几道了,这道也不例外,也是其中一个非常典型的例子!属于必须掌握的题型。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("直接分析,"),n("strong",[s._v("我们要找只出现一次的数字,并且已知了其他的数字都只出现了两次。"),n("strong",[s._v("那么这种一听其实就应该想到需使用")]),s._v("位运算")]),s._v("来进行求解。最好的,就是在读完题目的瞬间,直接条件反射!(当然,如果你现在第一反应是想到 通过遍历统计,或者其他如使用hashmap 等方式来进行求解,那我觉得你的位运算这块,是有必要加强练习力度的。如果你第一反应,连思路都没有,那我觉得对于整个算法的能力这块,都是比较欠缺的,需要下苦功!)")]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("回到题目,如何使用位运算进行求解呢?对于任意两个数a和b,我们对其使用 “"),n("strong",[s._v("异或")]),s._v("”操作,应该有以下性质:")]),s._v(" "),n("ul",[n("li",[s._v("任意一个数和0异或仍然为自己:")])]),s._v(" "),n("center",[s._v(" a⊕0 = a ")]),s._v(" "),n("ul",[n("li",[n("p",[s._v("任意一个数和自己异或是0:")]),s._v(" "),n("center",[s._v(" a⊕a=0 ")])],1),s._v(" "),n("li",[n("p",[s._v("异或操作满足交换律和结合律:")]),s._v(" "),n("center",[s._v(" a⊕b⊕a=(a⊕a)⊕b=0⊕b=b ")])],1)]),s._v(" "),n("p",[s._v("可能有人直接都不知道异或是什么,所以还是举个例子,比如5异或3,也就是5⊕3,也就是5^3,是下面这样:")]),s._v(" "),n("img",{staticStyle:{zoom:"67%"},attrs:{src:a(724),alt:"PNG"}}),s._v(" "),n("p",[s._v("根据分析,得出代码:(c 版本)")]),s._v(" "),n("div",{staticClass:"language-c line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-c"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//CPP")]),s._v("\nclass Solution "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\npublic"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("singleNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("vector"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" ans "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" num "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ans "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("^=")]),s._v(" num"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" ans"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("p",[s._v("(java版本)")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("singleNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" ans "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ans "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ans "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("^")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" ans"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br")])]),n("p",[s._v("(python版本)")]),s._v(" "),n("div",{staticClass:"language-python line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-python"}},[n("code",[n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("//")]),s._v("py\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("def")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("singleNumber")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("self"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" List"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("int")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("in")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("range")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("len")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("^")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" nums"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br")])]),n("p",[s._v("执行结果:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(725),alt:"PNG"}}),s._v(" "),n("h2",{attrs:{id:"_03、题目进阶"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_03、题目进阶"}},[s._v("#")]),s._v(" 03、题目进阶")]),s._v(" "),n("blockquote",[n("p",[s._v("如果修改上面的题目,除了某个元素只出现一次,其余元素都出现了3次以上,那么该如何求解?")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("修改一个条件之后,本题的难度大幅度提升!“异或”的方式看起来似乎没办法运用在“其余数出现3次以上”的条件中。那对于这种问题又该如何求解?我这里给出几种思路,大家下去分析一下,明天我会公布这道衍化题型的解决方案:")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[n("p",[s._v("思路1:使用hashmap,统计每个数字出现的次数,最后返回次数为1的数字。。。然后等待一段时间,接到很遗憾的通知。")])]),s._v(" "),n("li",[n("p",[s._v("思路2:上面的题目,对于相同的两个数,进行异或运算,我们可以进行“抵消”,那是否可以找到一种方式,来让相同的三个数进行相互抵消呢?")])]),s._v(" "),n("li",[n("p",[s._v("思路3:是不是可以通过数学的方式来进行计算?")]),s._v(" "),n("br")])]),s._v(" "),n("p",[s._v("所以,今天的问题你学会了吗?评论区留下你的想法!")])],1)}),[],!1,null,null,null);t.default=r.exports},724:function(s,t,a){s.exports=a.p+"assets/img/1.85b7a011.jpg"},725:function(s,t,a){s.exports=a.p+"assets/img/2.35fc1054.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/96.11feee99.js b/learning/.vuepress/dist/assets/js/96.11feee99.js deleted file mode 100644 index cc475fd8..00000000 --- a/learning/.vuepress/dist/assets/js/96.11feee99.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[96],{1109:function(s,t,a){"use strict";a.r(t);var n=a(3),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("blockquote",[n("p",[s._v("如果你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的,所以我们需要回滚代码,那如何能找到错误的版本呢?")])]),s._v(" "),n("h2",{attrs:{id:"_01、题目示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_01、题目示例"}},[s._v("#")]),s._v(" 01、题目示例")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("第278题:第一个错误的版本")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。")])])])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。")]),s._v(" "),n("br"),s._v(" "),n("p",[n("strong",[s._v("示例:")])]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("给定 n = 5,并且 version = 4 是第一个错误的版本。\n\n调用 isBadVersion(3) -> false\n调用 isBadVersion(5) -> true\n调用 isBadVersion(4) -> true\n\n所以,4 是第一个错误的版本。\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br")])]),n("h2",{attrs:{id:"_02、推导过程"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_02、推导过程"}},[s._v("#")]),s._v(" 02、推导过程")]),s._v(" "),n("blockquote",[n("p",[s._v("这个题目还是相当简单的....我拿出来讲的原因,是因为我的开发生涯中,真的遇到过这样一件事。当时我们做一套算薪系统,算薪系统主要复杂在业务上,尤其是销售的薪资,设计到数百个变量,并且还需要考虑异动(比如说销售A是团队经理,但是下调到B团队成为一名普通销售,然后就需要根据A异动的时间,来切分他的业绩组成。同时,最恶心的是,普通销售会影响到其团队经理的薪资,团队经理又会影响到营业部经理的薪资,一直到最上层,影响到整个大区经理的薪资构成)要知道,当时我司的销售有近万名,每个月异动的人就有好几千,这是非常非常复杂的。然后我们遇到的问题,就是同一个月,有几十个团队找上来,说当月薪资计算不正确(放在个人来讲,有时候差个几十块,别人也是会来找的)最后,在一阵漫无目的的排查之后,我们采用二分的思想,通过切变量,最终切到错误的异动逻辑上,进行了修正。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("回到本题,我们当然可以一个版本一个版本的进行遍历,直到找到最终的错误版本。但是如果是这样,还讲毛线呢。。。")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("firstBadVersion")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("++")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBadVersion")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" i"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("p",[s._v("我们自然是采用二分的思想,来进行查找。举个例子,比如我们版本号对应如下:")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(765),alt:"PNG"}}),s._v(" "),n("p",[s._v("如果中间的mid如果是错误版本,那我们就知道 mid 右侧都不可能是第一个错误的版本。那我们就令 right = mid,把下一次搜索空间变成[left, mid],然后自然我们很顺利查找到目标。")]),s._v(" "),n("img",{staticStyle:{zoom:"80%"},attrs:{src:a(766),alt:"PNG"}}),s._v(" "),n("p",[s._v("根据分析,代码如下:")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("firstBadVersion")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBadVersion")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])]),n("p",[s._v("额外补充:")]),s._v(" "),n("br"),s._v(" "),n("ul",[n("li",[s._v("请大家习惯这种返回left的写法,保持代码简洁的同时,也简化了思考过程,何乐而不为呢。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("当然,代码也可以写成下面这个样子(是不是感觉差点意思?)")]),s._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//JAVA ")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Solution")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("VersionControl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("firstBadVersion")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBadVersion")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n res "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n right "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n left "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mid "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br")])]),n("p",[s._v("03、杂谈")]),s._v(" "),n("blockquote",[n("p",[s._v("据查,医书有服用响豆的方法,响豆就是槐树果实在夜里爆响的,这种豆一棵树上只有一个,辨认不出来。取这种豆的方法是,在槐树刚开花时,就用丝网罩在树上,以防鸟雀啄食。结果成熟后,缝制许多布囊贮存豆荚。夜里用来当枕头,没有听到声音,便扔掉。就这么轮着枕,肯定有一个囊里有爆响声。然后把这一囊的豆类又分成几个小囊装好,夜里再枕着听。听到响声再一分为二,装进囊中枕着听。这么分下去到最后只剩下两颗,再分开枕听,就找到响豆了。")])]),s._v(" "),n("br"),s._v(" "),n("p",[s._v("前三章的题目,都是比较简单的,目的是让大家对二分能有一些深层次的思考。下面我就会增大难度,为大家讲解一些,不那么容易可以直接想到使用二分法进行求解的题目,希望大家支持!")])])}),[],!1,null,null,null);t.default=r.exports},765:function(s,t,a){s.exports=a.p+"assets/img/1.e443c271.jpg"},766:function(s,t,a){s.exports=a.p+"assets/img/2.f2d22ba1.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/97.8b830a67.js b/learning/.vuepress/dist/assets/js/97.8b830a67.js deleted file mode 100644 index fe733211..00000000 --- a/learning/.vuepress/dist/assets/js/97.8b830a67.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[97],{1025:function(t,r,a){t.exports=a.p+"assets/img/sort-0.7ce95224.png"},1026:function(t,r,a){t.exports=a.p+"assets/img/sort-1.5b9670d7.png"},1148:function(t,r,a){"use strict";a.r(r);var s=a(3),o=Object(s.a)({},(function(){var t=this,r=t.$createElement,s=t._self._c||r;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("p",[t._v("所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。是《数据结构与算法》中最基本的算法之一。")]),t._v(" "),s("blockquote",[s("p",[t._v("我们常说的十大排序算法为:冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数")])]),t._v(" "),s("h2",{attrs:{id:"基本分类"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#基本分类"}},[t._v("#")]),t._v(" 基本分类")]),t._v(" "),s("p",[t._v("我们常根据是否可以在线性时间内比较对其分类:")]),t._v(" "),s("p",[s("img",{attrs:{src:a(1025),alt:"总体分类"}})]),t._v(" "),s("h2",{attrs:{id:"时间复杂度:"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#时间复杂度:"}},[t._v("#")]),t._v(" 时间复杂度:")]),t._v(" "),s("p",[s("img",{attrs:{src:a(1026),alt:"时间复杂度"}})]),t._v(" "),s("h2",{attrs:{id:"如何记忆时间复杂度呢?"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#如何记忆时间复杂度呢?"}},[t._v("#")]),t._v(" 如何记忆时间复杂度呢?")]),t._v(" "),s("ol",[s("li",[t._v("平方阶 (O(n2)) 插入、选择、冒泡")]),t._v(" "),s("li",[t._v("线性对数阶 (O(nlog2n)) 快速、归并、堆")]),t._v(" "),s("li",[t._v("特殊的希尔 O(n^(1.3—2))")]),t._v(" "),s("li",[t._v("牛皮的线性 基数、桶、箱、计数")])]),t._v(" "),s("h2",{attrs:{id:"啥是稳定:"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#啥是稳定:"}},[t._v("#")]),t._v(" 啥是稳定:")]),t._v(" "),s("p",[t._v("稳定:如果 a 原本在 b 前面,而 a=b,排序之后 a 仍然在 b 的前面。"),s("br"),t._v("\n不稳定:如果 a 原本在 b 的前面,而 a=b,排序之后 a 可能会出现在 b 的后面。")]),t._v(" "),s("h2",{attrs:{id:"哪些稳定:"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#哪些稳定:"}},[t._v("#")]),t._v(" 哪些稳定:")]),t._v(" "),s("p",[t._v("稳定:冒泡、插入、归并和基数。\n不稳定:选择、快速、希尔、堆。")]),t._v(" "),s("p",[s("strong",[t._v("排序算法大纲")])]),t._v(" "),s("ol",[s("li",[s("RouterLink",{attrs:{to:"/2.0.排序系列/1.bubbleSort.html"}},[t._v("冒泡排序")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/2.0.排序系列/2.selectionSort.html"}},[t._v("选择排序")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/2.0.排序系列/3.insertionSort.html"}},[t._v("插入排序")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/2.0.排序系列/4.shellSort.html"}},[t._v("希尔排序")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/2.0.排序系列/5.mergeSort.html"}},[t._v("归并排序")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/2.0.排序系列/6.quickSort.html"}},[t._v("快速排序")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/2.0.排序系列/7.heapSort.html"}},[t._v("堆排序")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/2.0.排序系列/8.countingSort.html"}},[t._v("计数排序")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/2.0.排序系列/9.bucketSort.html"}},[t._v("桶排序")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/2.0.排序系列/10.radixSort.html"}},[t._v("基数排序")])],1)]),t._v(" "),s("hr")])}),[],!1,null,null,null);r.default=o.exports}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/98.9d1b91e1.js b/learning/.vuepress/dist/assets/js/98.9d1b91e1.js deleted file mode 100644 index 50a3c843..00000000 --- a/learning/.vuepress/dist/assets/js/98.9d1b91e1.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[98],{1044:function(_,v,t){"use strict";t.r(v);var r=t(3),s=Object(r.a)({},(function(){var _=this,v=_.$createElement,r=_._self._c||v;return r("ContentSlotsDistributor",{attrs:{"slot-key":_.$parent.slotKey}},[r("blockquote",[r("p",[_._v("我们暂停一天,我自己有个很喜欢的话,叫做 “练习 - 坚持 - 总结 - 提高”,我们已经练习了 70 天,如果不进行一些问题的总结,永远只低头看路,恐怕就会迷路。所以今儿咱们不讲算法题,而是讲一讲到底如何“解决问题”,本文"),r("strong",[_._v("非常非常非常重要")]),_._v(",是我很长一段时间的心血与积累,大家一定要耐心看完,共包含3节:")]),_._v(" "),r("ul",[r("li",[_._v("算法对个人的意义")]),_._v(" "),r("li",[_._v("解决问题的策略")]),_._v(" "),r("li",[_._v("算法问题汇总")])])]),_._v(" "),r("br"),_._v(" "),r("h2",{attrs:{id:"_01、算法对个人的意义"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_01、算法对个人的意义"}},[_._v("#")]),_._v(" 01、算法对个人的意义")]),_._v(" "),r("blockquote",[r("p",[_._v("在实际项目中,算法的使用场景有很多,如“Java8中Hashmap使用红黑树来实现”、“Redis底层使用LRU来进做淘汰策略”、“大数据领域很多问题都基于TopK”、“JS原型链里使了类似链表的成环检测”、“特别复杂的业务逻辑经常涉及到DAG”、“MySql为什么索引要用B+树”、“Oracle里的开窗函数如何实现” 等等等等,这些今天我们统统不谈。而我,更多的是想和大家聊一聊,算法对个人有什么意义?")])]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("市面上大部分的算法书籍,第一章介绍算法,都会给大家列一列类似上面的那些话,或者就是使用栈或队列来做一个引子,告诉大家算法很重要,你得需要去学,吧啦吧啦....但是不知道大家有没有想过这样一个问题,算法对于个人而言到底有什么意义呢?如果这个问题大家陌生,那你一定会听到有写了几年业务逻辑的老程序员,说过“我这些年从来没有用过算法,除了出去面试的时候”之类的话。其实,我这里真想说一句脏话,这些思想真的是TMD害人不浅啊。甚至我怀疑大多数说这句话本身的人,有两种:一种就是严重缺乏自信心,觉得自己一辈子都没办法学好算法了,所以就这样吧。第二种就是故意误人子弟,驱动来源于自己不会,方式采用侃大山,反正忽悠一个是一个,再来身边也没有其他这方面厉害的朋友,说完之后自己都没意识到哪里有问题,却对别人带去很不好的影响。"),r("strong",[_._v("所以如果你今天看到我的这篇文章,我希望你能记住一世,这辈子都不要说出这种类似的话来,保持对这个学科基本的尊重,哪怕多一点点匠心精神")]),_._v("。算法对个人的意义如下:")]),_._v(" "),r("br"),_._v(" "),r("ul",[r("li",[_._v("算法题目的程序规模大多都是比较小的,也就意味着切入点很小。使得每一个做题人,可以最大化的投入时间研究问题的本身。而在工作中,稍大一点的项目,基本上是没办法随意改变代码结构的,甚至还会为了整体性能牺牲程序的简洁与优雅。所以"),r("strong",[_._v("算法题是可以让你通过练习编写出好代码的最好的方式,没有之一")]),_._v("。")]),_._v(" "),r("li",[_._v("算法题目中基本不会有图形化界面,只利用文本进行输入和输出。"),r("strong",[_._v("你可以相当专注的去解决问题")]),_._v("。而在工作中,你能获得专注去研究一个问题的机会,几乎很难。想一想,假如你用JAVA写一个后台功能,其核心代码不到10行逻辑,但是MVC得占据你三分之一工作量,定义接口占据你三分之一工作量,公司假如没前端,再占据你三分之一工作量。整个这个过程,我有一个Amazon的朋友形容的很贴切,"),r("strong",[_._v("“掏粪”")]),_._v("。")]),_._v(" "),r("li",[r("strong",[_._v("预测能力的构建")]),_._v(",在大多数算法练习平台中,因为会将运算时间和内存使用状况等信息实时提供给做题人,所以做题人甚至可以一边修改代码,一边观察修改对程序产生的影响。这个是不得了的,在工作中,绝对不可能有这样的机会。而在这个过程中,做题人可以提高对逻辑结构复杂程序进行性能预测的能力,该能力将伴随其一身。")]),_._v(" "),r("li",[r("strong",[_._v("提升coding能力的最好方式")]),_._v("。假如我们打王者荣耀,你要上王者,不开排位,一直打电脑,能上的去吗?在工作中,你来回接触的就那么几个人,有几个能写出特别优秀的代码,见到了,那说明老天眷顾你,大部分人都见不到。但是在算法平台的练习中,基本上我们每一个问题,我们都能看到全世界最优秀的人提交的代码。没有对比,虽然不成伤害,却更难成为进步!只有我们去阅读别人优秀的逻辑,读懂别人思考的过程,与全世界顶尖的程序员编写代码的能力进行比较,才可以成为真正的大牛。")]),_._v(" "),r("li",[r("strong",[_._v("算法题让你难受")]),_._v("。用脚指头想一个问题,在各行各业中,想成为其行业的佼佼者,是不是一定有一个难受的过程。假如天天写CRUD,并且还得意洋洋,我用一套Generator生成只需要5分钟,其他时间就可以打打炉石,勾搭勾搭妹子。不经历一个难受的过程,如何可以进步?就连郭德纲出名之前,也在玻璃窗里被关过两天两夜。罗马不是一天建成的,但是如果不修,那就永远建不成。难受就是真理,说明你正在进步。")]),_._v(" "),r("li",[r("strong",[_._v("单测都是“骗人的”")]),_._v("。请大家不要高估工作中QA的能力(当然,也有牛逼的QA,我见过...),大部分的公司里,QA来做单测时,基本上是重新走了一遍开发者的逻辑。更有甚者,开发直接说出“我写完都已经测完了,要QA有什么用处”,其实这并不是一个段子,因为大部分QA是做不到完美的cover业务逻辑的,换句话说,也就不可能构建出完美的测试用例测出你代码的问题。但是算法不是,大部分的算法平台,都提供了实时反馈的机制,如果自己编写的代码可以得到快速,客观的意见反馈,这绝对是有如神助。就好像是你打王者,旁边有个小精灵,总是会在合适的时机告诉你,“去下路,中路没人”,“小心草丛”。那如果不被带飞,你信吗?")])]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("总之,"),r("strong",[_._v("正是因为算法题目中只保留了必备的要素,舍弃了其他无关紧要的部分,所以可以对每一位做题人都构建一个学习解决问题的最佳环境")]),_._v(",而在这个环境中的成长与提高,将对一个软件工程师的生涯产生深远影响,乃至一世。所以,请大家能有一颗匠心,你可以选择不去了解学习掌握算法,但是请不要耽误他人进步。山高水长,江湖路远,珍重万千,有缘再见!")]),_._v(" "),r("br"),_._v(" "),r("h2",{attrs:{id:"_02、解决问题的策略"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_02、解决问题的策略"}},[_._v("#")]),_._v(" 02、解决问题的策略")]),_._v(" "),r("blockquote",[r("p",[_._v("解决简单的问题时,直接利用已知的技术便可轻松解决问题。但是如果遇到难题,恐怕就需要用各种手段。管他是花猫野猫,抓住耗子都是好猫。在解决问题的策略构建中,我们首先要对问题和答案结构有一个直观的感受,或者说猜测。如果可以把控住当前算法的问题,具备一个什么样的形态,然后就可以把毫无头绪的事情,变得有迹可循。在这样一个过程中,一点点的积累经验,最终就可以提升自己。")])]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("上面说的内容,玄而又玄,那到底如何来构建策略。假如我们遇到一个问题,让我们找一个国家铁路网中,两个城市的最短路径。这种问题,大家肯定首先想到的就是使用迪杰斯特拉算法。但是如果问题变成“换乘火车次数少于N次,寻找最短路径”,这种问题将不能直接套用最短路径的算法。有时候只是改变题中条件,就可以让整个题目完全走向另一个逻辑,这就需要大家对原算法的原理和执行过程特别了解,并且熟读题意。所以这里我们抽象出两个步骤:")]),_._v(" "),r("br"),_._v(" "),r("ul",[r("li",[_._v("读题")]),_._v(" "),r("li",[_._v("重构")])]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("读题的目的,就是阅读并理解问题。不管是是不是算法老手,在这上面栽跟头的绝对不是一个两个,审题不清是所有人的共性(绝不是你的个人问题),人的天性就期望可以快速得到反馈,这是身体欲望导致的,和你看到漂亮的妹子下半身竖立本质没有什么区别。所以这就引出我们的解决方法 - 重构。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("什么是重构,重构其实就是一个抽象化的过程。"),r("strong",[_._v("借用我们已经掌握的数学/计算机知识,将其表达成现实世界概念")]),_._v("。大部分的现实世界概念都是比较复杂的,我们对其抽茧剥丝,保留本质,表述成易于理解的形式。而对其重构的过程,就可以决定其程序设计的方向。举一个最简单的例子,比如我们要用代码实现一个整数平方根的开方,可以选用牛顿法或者二分法,那这两种方法是如何被想到的。假如我们把问题重构成图形的表达方式,就比较容易会推出牛顿法。假如我们把问题重构成已有的知识概念,自然就可以想到二分法。而如果我们把问题抽象成公式,甚至可以通过数学法来进行解题。划重点,"),r("strong",[_._v("不同的重构方式,决定最终程序的走向")]),_._v("。")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("在重构的基础上,其实我们就可以来进行解题了。但是这里我还要对其加一个步骤,"),r("strong",[_._v("化简")]),_._v("。什么又是化简,如何化简?假如我们有一个题,我们有一个二维网格,里边有N个点,两点的距离是X坐标和Y坐标的的和。比如坐标(5,1)和(4,7)的点间距就是1+6=7。我们要找到给出的N个点距离之和最小的新点的坐标。")]),_._v(" "),r("img",{staticStyle:{zoom:"50%"},attrs:{src:t(461),alt:"PNG"}}),_._v(" "),r("p",[_._v("题目因为本身是二维的,我们写代码其实不是很好写。所以我们可以将其化简为一维。我们把每一个点的左边,通过映射的方式,分别映射到 x轴 和 y轴。然后我们把问题转化成"),r("strong",[_._v("在直线上寻找到给出点的距离之和最小的点")]),_._v("。这就是化简。万物之始,大道至简,至拙至美。生活中咱们也说透过现象看本质,放在算法里你就不会了?")]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("读题-重构-化简,下来自然就是解题了。那如何解题?这个范畴虽然很大,但也不是无迹可寻,下面两点:")]),_._v(" "),r("br"),_._v(" "),r("ul",[r("li",[_._v("基本数据结构和算法的掌握(略)")]),_._v(" "),r("li",[_._v("常见算法问题的汇总")])]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("基本数据结构和算法的掌握,这个自不必说,是人都知道,那么常见算法问题的汇总又是什么,我们看下一节。")]),_._v(" "),r("br"),_._v(" "),r("h2",{attrs:{id:"_03、算法问题汇总"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_03、算法问题汇总"}},[_._v("#")]),_._v(" 03、算法问题汇总")]),_._v(" "),r("blockquote",[r("p",[_._v("写算法最怕什么?当然是出错。"),r("strong",[_._v("与其重复相同的错误,不如从错误中吸取教训。与其从自己的错误中吸取教训,不如从别人的错误中学习经验")]),_._v("。总结常见的算法问题,我总不能和你去说我们需要掌握数组、链表、二叉树、Map等这些数据结构。我认为的总结,就是错误的总结。所以为了快速拔高大家的水准,我准备了以下这些错误,请一定耐心看完,反复阅读。")])]),_._v(" "),r("br"),_._v(" "),r("ul",[r("li",[r("strong",[_._v("递归,防止死循环和内存泄露")]),_._v("。由于递归需要堆栈,"),r("strong",[_._v("所以内存消耗要比非递归代码要大很多")]),_._v("。而且,如果递归深度太大,可能系统撑不住。内存会存在突然飙升的情况。如果是数据错误导致无限循环,那问题就大了。所以这方面问题在开发的时候需要注意。")]),_._v(" "),r("li",[r("strong",[_._v("访问数组越界")]),_._v(",绝大多数的数组越界,根本原因在于对定义混淆。比如定义的时候想的是“以0起始”,但是写的时候写成了“以1起始”。究其根本,数组越界的问题,其实是对区间把控的问题。")]),_._v(" "),r("li",[_._v("**区间表意不明。**大部分的语言中,数组都以0为起始元素,但是人的思维习惯于以1为起始。那为什么数组要以0为起始元素,历史原因有很多,咱不说。对咱们有用的,3个。第一,因为我们选择左闭右开区间,比如 [0,n),我们可以很容易通过 n-0 得到数组中元素个数。这点大家要形成条件发射,看到数组,明确其个数。第二,闭区间很难去表示一个空数组,不信你试试,非常难受。第三,左闭右开的区间,迭代器只需要最少的操作符。可以让代码写起来非常的舒服,STL的算法和容器中基本都是如此。")]),_._v(" "),r("li",[_._v("**差一问题(栅栏错误)。**建造一条直栅栏(即不围圈),长30米、每条栅栏柱间相隔3米,需要多少条栅栏柱? 求数组 A[i]到 A[j] 的平均值,A[i] 到 A[j] 的和应该除以多少,是 j-i+1,还是 j-i?二分法中的 while 条件,到底是用 <= 还是 < ?这些都是差一问题,这类问题如何解决。"),r("strong",[_._v("利用最小的的输入值测试代码的执行过程,长期反复,达到条件反射")]),_._v("。这个过程一定是在大量的题目练习中掌握的,如果你到目前还在纠结这个问题,请先扣心自问,是否刷过至少200道算法题。如果没有,请不要纠结,干就对了。如果有,来找我。")]),_._v(" "),r("li",[r("strong",[_._v("内存溢出问题")]),_._v("。分为两种,一种是因为运算超出变量取值范围发生的内存溢出,比如二分法中的mid,就要使用 left+(right-left)>>1。另一种就是因为代码不严谨,比如递归没有退出条件,while死循环,等等导致内存溢出。")]),_._v(" "),r("li",[_._v("**初学者定义问题。**比如统计26个字母出现的次数,初学者会用hashmap,其实这种已知值范围的,定义成数组就可以了。其他类似数字0-9,每个月的天数,都是一样的")]),_._v(" "),r("li",[_._v("**写一半忘记题意。**这个根本原因还是因为思维脉络不清晰导致的,有时候初学者还会遇到一个问题。定义一个函数,比如叫做 juge() 返回 bool 值,本来应该是判断某条件成立时返回true,但是用的时候却以为,在条件不成立的时候返回true,最终导致结果错误。")]),_._v(" "),r("li",[_._v("**变量名错误。**不管是和方法参数中的变量名称冲突,还是因为本身表意不明,最终出现赋值错误,或者编译不通过。")]),_._v(" "),r("li",[_._v("**运算优先级错误。**比如位运算,各个语言中的优先级定义是略有不同的。有时候需要加括号,有时候不需要加。")]),_._v(" "),r("li",[_._v("**特殊值的处理。**一些找规律的题目,往往在等于0,等于1的时候,规律和其他的数不同,所以这种题目,需要对这种特殊值进行特殊处理。")])]),_._v(" "),r("br"),_._v(" "),r("p",[_._v("以上就是我挑选过的一些具有代表性的错误示例(后续还会补充),同时,算法指导篇我打算出一个系列,包括算法中常用技巧,常见错误,题目常见误导 等等,都是我的珍藏。今天的文章呕心泣血,希望大家可以帮我转发,我想如果你身边有学习计算机的朋友看到,他一定会感谢你。支持我的朋友们,还没有关注的,快点来个关注。最后,山高水长,江湖路远,珍重万千,下期再见!")])])}),[],!1,null,null,null);v.default=s.exports},461:function(_,v,t){_.exports=t.p+"assets/img/1.88792000.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/99.7a4a82e9.js b/learning/.vuepress/dist/assets/js/99.7a4a82e9.js deleted file mode 100644 index aba49a43..00000000 --- a/learning/.vuepress/dist/assets/js/99.7a4a82e9.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[99],{1047:function(v,_,r){"use strict";r.r(_);var t=r(3),o=Object(t.a)({},(function(){var v=this,_=v.$createElement,t=v._self._c||_;return t("ContentSlotsDistributor",{attrs:{"slot-key":v.$parent.slotKey}},[t("p",[v._v("今天的文章,不浪,没图。给大家加加油!")]),v._v(" "),t("img",{staticStyle:{zoom:"33%"},attrs:{src:r(467),alt:"PNG"}}),v._v(" "),t("p",[v._v("回顾过去一年,京东、知乎、美团、微博、去哪儿、滴滴等。爆出裁员的有多少,虽然最终都被官方辟谣。"),t("strong",[v._v("但是,你们懂的。")])]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("互联网寒冬之下,所有公司都勒紧裤腰带过活。那么,对于个体的你,不努力,不学习,想去大厂?凭什么。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("请大家原谅我说话的直白。2020年就目前来看,对于企业是明显的买方市场(供过于求)。"),t("strong",[v._v("而且,未来几年应该都是这样")]),v._v("。所以,大部分企业在招聘时,是要在很多优秀的人中去选出一个更优秀的人,而不是在一群普通人中选择一个优秀的人。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("毕竟,如果你不够格,可能简历都过不了。"),t("strong",[v._v("而对于应届生,如果不能多维度的获取你的信息。那么出几道难题,在没有更好的替代方案之前,目前是唯一的选择。")])]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("所以我最终很直白的告诉这位同学,刷题,你还是得刷。该记的,你还是得记。尤其如果目标本身就是一个好的offer,那更应是如此。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("但是,"),t("strong",[v._v("这样的回答其实是不负责任的")]),v._v("。虽然我考虑到给对方一点压力,很直白的回复了他。但如果放开这一切,我们为什么学算法?为什么学数据结构?")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("“面试造火箭,工作拧螺丝” ,工作四五年,别说红黑树,就连普通二叉树基本都没手写过,"),t("strong",[v._v("我知道很多人都是这个状态")]),v._v("。这种状态正常吗?"),t("strong",[v._v("正常")]),v._v("。但不写不等于不用。就算真的不用,也不等于不需要知道怎么用。")]),v._v(" "),t("br"),v._v(" "),t("p",[t("strong",[v._v("其实,很多学生学习数据结构是有问题的")]),v._v("。就这位同学而言,至少出现背代码,就是绝对错误的。数据结构的本质,在我看来是去契合一些应用场景,自然而然的产生,而不是死记硬背。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("比如说红黑树,我们需要知道这是一种常用的平衡二叉树(或者说特殊的平衡二叉树)知道其对于查找, 插入,删除的复杂度都是log(n) --- n 这里是说树中元素的个数。如果你是java栈,你可能还需要知道 hashmap 为什么选用红黑树来实现。要知道红黑树可以在一些非实时任务调度中,可以高效公平的调度任务。要知道其所有的应用,都是围绕着“平衡”二字。这才是数据结构的核心。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("至于实现的细枝末节,"),t("strong",[v._v("知道固然好,但没必要去逼着自己记忆")]),v._v("。因为,我们的职业生涯里,绝对不可能出现让你手写红黑树的节点删除的场景。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("但你需要知道为什么创造/引入它,它有什么特殊的,它满足哪些场景,又不满足哪些场景,不满足的场景又如何替代。这才是对数据结构的良好理解。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("其实,除了算法,在我看来很多别的知识也是这样。"),t("strong",[v._v("只是说算法,更容易在面试的时候去展示而已。本身而言,并没有什么特殊的。")])]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("比如学习操作系统。那我们为什么学习操作系统?难道是让我们造出来一个操作系统吗?显而易见并不是。学习操作系统是让我们了解为什么会提出OS,如果没有OS又会是什么样子。它怎么样做任务调度,怎么样做进程管理,怎么样对可用的硬件做成抽象,死锁是如何产生的,内存是怎么管理的,文件系统是如何实现的,通信是指谁与谁的通信。不是说应付了考试就算学了,而是带着脑子掌握这个东西的脉络,这才是核心。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("比如学习数据库原理,不是说让你去造一个数据库。当然你有这本事,那也ok。更多的是去了解数据库是如何来抽象数据管理的,大数据在什么场景下应运而生。学了之后,你会知道关系型数据库只是数据库中的冰山一角。你知道缓存,索引,批处理,中间件之中都是有着数据库的影子。你用 git 你会知道 .git 文件下,其实就用几个很简单的数据结构,就构建了一个数据库的雏形。你知道事务控制,其实最初只是想把事情做正确,你知道 ACID 是在保证什么。你知道数据库的整个设计中,很多时候我们是在性能和正确性中做选择。你知道除了程序员之外,还有 DBA 更加会关注高可用。你不会再觉得读写分离,主从备份多么高大上,因为你知道除了读写分离之外,还有快慢分离,异地多活,"),t("strong",[v._v("Replication 和 Failover 很多东东")]),v._v(",都是上个世纪就有了完美的理论支撑。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("比如学习计算机网络,不是说让你去死记硬背几层网络模型,都各自是什么。而是让你知道全球互联网是如何运作的,知道TCP为了保证数据可靠做了多少额外的工作,握手为什么是3次,不是456次。知道滑动窗口并不等于leetcode上的几道题。知道层与层之间是如何划分的。知道在计算机网络的基础下,还有计算机网络安全一大块基石。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("比如学习编译原理,没人让你死记硬背那些分词算法。而是去知道为什么要划分词法,语法,语义分析。知道为什么很多语言要提出中间代码这个东东。知道编译原理很多东西,其实就是 NLP 的基础,其实就是智能机器人的基础。知道在 ES 的设计中,其实也参考很多编译器的设计。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("当然,我们很可能不会完美的掌握上面所说的所有。"),t("strong",[v._v("但我们会在这个过程中,去发现自己的知识盲点,进而刻意提高")]),v._v("。而不是一直陷入“学不会-理解不了-记不住”的死循环。")]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("当然,对于要找工作的人,我们可以直接去击打一些面试痛点,更好的兼容社会。"),t("strong",[v._v("但我们面试过后,总归是要知识落地,这才能体现你的最终价值。")])]),v._v(" "),t("br"),v._v(" "),t("p",[v._v("不要说什么“面试造火箭,工作拧螺丝”,拧螺丝的人,只能一直留在位置上拧螺丝。而努力拧螺丝的人,说不定就有机会去造火箭。而那些有造火箭能力的人,他们终究会造上火箭。")])])}),[],!1,null,null,null);_.default=o.exports},467:function(v,_,r){v.exports=r.p+"assets/img/1.910339d0.jpg"}}]); \ No newline at end of file diff --git a/learning/.vuepress/dist/assets/js/app.e2b8fa5c.js b/learning/.vuepress/dist/assets/js/app.e2b8fa5c.js deleted file mode 100644 index 9e26a5d7..00000000 --- a/learning/.vuepress/dist/assets/js/app.e2b8fa5c.js +++ /dev/null @@ -1,80 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],l=e[1],c=e[2],f=0,p=[];f0?o(r(t),9007199254740991):0}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var r=n(12);t.exports=function(t){return Object(r(t))}},function(t,e,n){var r=n(7),o=n(8),i=n(36);t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){t.exports=n(327)},function(t,e,n){var r=n(54),o=n(12);t.exports=function(t){return r(o(t))}},function(t,e,n){"use strict";var r=n(0),o=n(41).filter,i=n(53),a=n(20),s=i("filter"),l=a("filter");r({target:"Array",proto:!0,forced:!s||!l},{filter:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var r=n(141),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();t.exports=i},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){var r=n(7),o=n(1),i=n(5),a=Object.defineProperty,s={},l=function(t){throw t};t.exports=function(t,e){if(i(s,t))return s[t];e||(e={});var n=[][t],c=!!i(e,"ACCESSORS")&&e.ACCESSORS,u=i(e,0)?e[0]:l,f=i(e,1)?e[1]:void 0;return s[t]=!!n&&!o((function(){if(c&&!r)return!0;var t={length:-1};c?a(t,1,{enumerable:!0,get:l}):t[1]=1,n.call(t,u,f)}))}},function(t,e,n){var r=n(4),o=n(14),i=n(5),a=n(79),s=n(115),l=n(37),c=l.get,u=l.enforce,f=String(String).split("String");(t.exports=function(t,e,n,s){var l=!!s&&!!s.unsafe,c=!!s&&!!s.enumerable,p=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||o(n,"name",e),u(n).source=f.join("string"==typeof e?e:"")),t!==r?(l?!p&&t[e]&&(c=!0):delete t[e],c?t[e]=n:o(t,e,n)):c?t[e]=n:a(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&c(this).source||s(this)}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(47);var o=n(72);function i(t){return function(t){if(Array.isArray(t))return Object(r.a)(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||Object(o.a)(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},function(t,e,n){var r=n(222),o=n(225);t.exports=function(t,e){var n=o(t,e);return r(n)?n:void 0}},function(t,e,n){var r=n(313),o=n(162),i=/[T ]/,a=/:/,s=/^(\d{2})$/,l=[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],c=/^(\d{4})/,u=[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],f=/^-(\d{2})$/,p=/^-?(\d{3})$/,d=/^-?(\d{2})-?(\d{2})$/,h=/^-?W(\d{2})$/,v=/^-?W(\d{2})-?(\d{1})$/,m=/^(\d{2}([.,]\d*)?)$/,g=/^(\d{2}):?(\d{2}([.,]\d*)?)$/,y=/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,E=/([Z+-].*)$/,b=/^(Z)$/,B=/^([+-])(\d{2})$/,A=/^([+-])(\d{2}):?(\d{2})$/;function _(t,e,n){e=e||0,n=n||0;var r=new Date(0);r.setUTCFullYear(t,0,4);var o=7*e+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}t.exports=function(t,e){if(o(t))return new Date(t.getTime());if("string"!=typeof t)return new Date(t);var n=(e||{}).additionalDigits;n=null==n?2:Number(n);var w=function(t){var e,n={},r=t.split(i);a.test(r[0])?(n.date=null,e=r[0]):(n.date=r[0],e=r[1]);if(e){var o=E.exec(e);o?(n.time=e.replace(o[1],""),n.timezone=o[1]):n.time=e}return n}(t),x=function(t,e){var n,r=l[e],o=u[e];if(n=c.exec(t)||o.exec(t)){var i=n[1];return{year:parseInt(i,10),restDateString:t.slice(i.length)}}if(n=s.exec(t)||r.exec(t)){var a=n[1];return{year:100*parseInt(a,10),restDateString:t.slice(a.length)}}return{year:null}}(w.date,n),k=x.year,C=function(t,e){if(null===e)return null;var n,r,o,i;if(0===t.length)return(r=new Date(0)).setUTCFullYear(e),r;if(n=f.exec(t))return r=new Date(0),o=parseInt(n[1],10)-1,r.setUTCFullYear(e,o),r;if(n=p.exec(t)){r=new Date(0);var a=parseInt(n[1],10);return r.setUTCFullYear(e,0,a),r}if(n=d.exec(t)){r=new Date(0),o=parseInt(n[1],10)-1;var s=parseInt(n[2],10);return r.setUTCFullYear(e,o,s),r}if(n=h.exec(t))return i=parseInt(n[1],10)-1,_(e,i);if(n=v.exec(t)){i=parseInt(n[1],10)-1;var l=parseInt(n[2],10)-1;return _(e,i,l)}return null}(x.restDateString,k);if(C){var S,P=C.getTime(),$=0;if(w.time&&($=function(t){var e,n,r;if(e=m.exec(t))return(n=parseFloat(e[1].replace(",",".")))%24*36e5;if(e=g.exec(t))return n=parseInt(e[1],10),r=parseFloat(e[2].replace(",",".")),n%24*36e5+6e4*r;if(e=y.exec(t)){n=parseInt(e[1],10),r=parseInt(e[2],10);var o=parseFloat(e[3].replace(",","."));return n%24*36e5+6e4*r+1e3*o}return null}(w.time)),w.timezone)S=6e4*function(t){var e,n;if(e=b.exec(t))return 0;if(e=B.exec(t))return n=60*parseInt(e[2],10),"+"===e[1]?-n:n;if(e=A.exec(t))return n=60*parseInt(e[2],10)+parseInt(e[3],10),"+"===e[1]?-n:n;return 0}(w.timezone);else{var O=P+$,T=new Date(O);S=r(T);var j=new Date(O);j.setDate(T.getDate()+1);var I=r(j)-r(T);I>0&&(S+=I)}return new Date(P+$+S)}return new Date(t)}},function(t,e,n){"use strict";var r=n(0),o=n(6),i=n(42),a=n(109),s=n(11),l=n(16),c=n(78),u=n(2),f=n(53),p=n(20),d=f("slice"),h=p("slice",{ACCESSORS:!0,0:0,1:2}),v=u("species"),m=[].slice,g=Math.max;r({target:"Array",proto:!0,forced:!d||!h},{slice:function(t,e){var n,r,u,f=l(this),p=s(f.length),d=a(t,p),h=a(void 0===e?p:e,p);if(i(f)&&("function"!=typeof(n=f.constructor)||n!==Array&&!i(n.prototype)?o(n)&&null===(n=n[v])&&(n=void 0):n=void 0,n===Array||void 0===n))return m.call(f,d,h);for(r=new(void 0===n?Array:n)(g(h-d,0)),u=0;d]*>)/g,v=/\$([$&'`]|\d\d?)/g;r("replace",2,(function(t,e,n,r){var m=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,g=r.REPLACE_KEEPS_$0,y=m?"$":"$0";return[function(n,r){var o=l(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,o,r):e.call(String(o),n,r)},function(t,r){if(!m&&g||"string"==typeof r&&-1===r.indexOf(y)){var i=n(e,t,this,r);if(i.done)return i.value}var l=o(t),d=String(this),h="function"==typeof r;h||(r=String(r));var v=l.global;if(v){var b=l.unicode;l.lastIndex=0}for(var B=[];;){var A=u(l,d);if(null===A)break;if(B.push(A),!v)break;""===String(A[0])&&(l.lastIndex=c(d,a(l.lastIndex),b))}for(var _,w="",x=0,k=0;k=x&&(w+=d.slice(x,S)+j,x=S+C.length)}return w+d.slice(x)}];function E(t,n,r,o,a,s){var l=r+t.length,c=o.length,u=v;return void 0!==a&&(a=i(a),u=h),e.call(s,u,(function(e,i){var s;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return n.slice(0,r);case"'":return n.slice(l);case"<":s=a[i.slice(1,-1)];break;default:var u=+i;if(0===u)return e;if(u>c){var f=d(u/10);return 0===f?e:f<=c?void 0===o[f-1]?i.charAt(1):o[f-1]+i.charAt(1):e}s=o[u-1]}return void 0===s?"":s}))}}))},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){"use strict";var r=n(0),o=n(41).map,i=n(53),a=n(20),s=i("map"),l=a("map");r({target:"Array",proto:!0,forced:!s||!l},{map:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var r=n(7),o=n(112),i=n(36),a=n(16),s=n(35),l=n(5),c=n(113),u=Object.getOwnPropertyDescriptor;e.f=r?u:function(t,e){if(t=a(t),e=s(e,!0),c)try{return u(t,e)}catch(t){}if(l(t,e))return i(!o.f.call(t,e),t[e])}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){var r=n(6);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r,o,i,a=n(186),s=n(4),l=n(6),c=n(14),u=n(5),f=n(55),p=n(39),d=s.WeakMap;if(a){var h=new d,v=h.get,m=h.has,g=h.set;r=function(t,e){return g.call(h,t,e),e},o=function(t){return v.call(h,t)||{}},i=function(t){return m.call(h,t)}}else{var y=f("state");p[y]=!0,r=function(t,e){return c(t,y,e),e},o=function(t){return u(t,y)?t[y]:{}},i=function(t){return u(t,y)}}t.exports={set:r,get:o,has:i,enforce:function(t){return i(t)?o(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!l(e)||(n=o(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}}},function(t,e){t.exports=!1},function(t,e){t.exports={}},function(t,e,n){var r=n(119),o=n(4),i=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t])||i(o[t]):r[t]&&r[t][e]||o[t]&&o[t][e]}},function(t,e,n){var r=n(187),o=n(54),i=n(13),a=n(11),s=n(110),l=[].push,c=function(t){var e=1==t,n=2==t,c=3==t,u=4==t,f=6==t,p=5==t||f;return function(d,h,v,m){for(var g,y,E=i(d),b=o(E),B=r(h,v,3),A=a(b.length),_=0,w=m||s,x=e?w(d,A):n?w(d,0):void 0;A>_;_++)if((p||_ in b)&&(y=B(g=b[_],_,E),t))if(e)x[_]=y;else if(y)switch(t){case 3:return!0;case 5:return g;case 6:return _;case 2:l.call(x,g)}else if(u)return!1;return f?-1:c||u?u:x}};t.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6)}},function(t,e,n){var r=n(34);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){var r=n(18).Symbol;t.exports=r},function(t,e,n){var r=n(43),o=n(207),i=n(208),a=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":a&&a in Object(t)?o(t):i(t)}},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(48);function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n3&&void 0!==arguments[3]?arguments[3]:1;if("string"==typeof e)return d(n,e,r);if(Array.isArray(e))return Object.assign(d(n,e[0],r),{title:e[1]});o>3&&console.error("[vuepress] detected a too deep nested sidebar group.");var i=e.children||[];return 0===i.length&&e.path?Object.assign(d(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,children:i.map((function(e){return t(e,n,r,o+1)})),collapsable:!1!==e.collapsable}}(t,o,c)})):[]}return[]}function v(t){var e;return(t=t.map((function(t){return Object.assign({},t)}))).forEach((function(t){2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)})),t.filter((function(t){return 2===t.level}))}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}function g(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"yyyy-MM-dd hh:mm:ss";t=t.replace(/-/g,"/");var n=new Date(t);/(y+)/.test(e)&&(e=e.replace(RegExp.$1,n.getFullYear()+"").substr(4-RegExp.$1.length));var r={"M+":n.getMonth()+1,"d+":n.getDate(),"h+":n.getHours(),"m+":n.getMinutes(),"s+":n.getSeconds()};for(var o in r)if(RegExp("(".concat(o,")")).test(e)){var i=r[o]+"";e=e.replace(RegExp.$1,2===i.length?i:"0"+i)}return e}function y(t){return new Date(t.frontmatter.date).getTime()}function E(t,e){return y(e)-y(t)}},function(t,e,n){var r=n(0),o=n(4),i=n(124),a=[].slice,s=function(t){return function(e,n){var r=arguments.length>2,o=r?a.call(arguments,2):void 0;return t(r?function(){("function"==typeof e?e:Function(e)).apply(this,o)}:e,n)}};r({global:!0,bind:!0,forced:/MSIE .\./.test(i)},{setTimeout:s(o.setTimeout),setInterval:s(o.setInterval)})},function(t,e,n){var r=n(120),o=n(82).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,e,n){var r,o=n(9),i=n(191),a=n(82),s=n(39),l=n(192),c=n(114),u=n(55),f=u("IE_PROTO"),p=function(){},d=function(t){return" - - diff --git a/learning/.vuepress/dist/code-2.jpg b/learning/.vuepress/dist/code-2.jpg deleted file mode 100644 index be466d72..00000000 Binary files a/learning/.vuepress/dist/code-2.jpg and /dev/null differ diff --git a/learning/.vuepress/dist/code.jpeg b/learning/.vuepress/dist/code.jpeg deleted file mode 100644 index 14bab389..00000000 Binary files a/learning/.vuepress/dist/code.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/code.png b/learning/.vuepress/dist/code.png deleted file mode 100644 index 14bab389..00000000 Binary files a/learning/.vuepress/dist/code.png and /dev/null differ diff --git a/learning/.vuepress/dist/contact.jpeg b/learning/.vuepress/dist/contact.jpeg deleted file mode 100644 index ce2f3dbf..00000000 Binary files a/learning/.vuepress/dist/contact.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/daotu-1.png b/learning/.vuepress/dist/daotu-1.png deleted file mode 100644 index 77974f64..00000000 Binary files a/learning/.vuepress/dist/daotu-1.png and /dev/null differ diff --git a/learning/.vuepress/dist/daotu-2.png b/learning/.vuepress/dist/daotu-2.png deleted file mode 100644 index c65b7f63..00000000 Binary files a/learning/.vuepress/dist/daotu-2.png and /dev/null differ diff --git a/learning/.vuepress/dist/demo-1.png b/learning/.vuepress/dist/demo-1.png deleted file mode 100644 index c65b7f63..00000000 Binary files a/learning/.vuepress/dist/demo-1.png and /dev/null differ diff --git a/learning/.vuepress/dist/demo.png b/learning/.vuepress/dist/demo.png deleted file mode 100644 index 550093fd..00000000 Binary files a/learning/.vuepress/dist/demo.png and /dev/null differ diff --git a/learning/.vuepress/dist/index.html b/learning/.vuepress/dist/index.html deleted file mode 100644 index c1770af8..00000000 --- a/learning/.vuepress/dist/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 奥利给 | 小浩算法 - - - - - - - -
文章修订于: 7/9/2020, 3:07:35 PM

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git a/learning/.vuepress/dist/suggest.jpeg b/learning/.vuepress/dist/suggest.jpeg deleted file mode 100644 index f4022145..00000000 Binary files a/learning/.vuepress/dist/suggest.jpeg and /dev/null differ diff --git a/learning/.vuepress/dist/tag/index.html b/learning/.vuepress/dist/tag/index.html deleted file mode 100644 index e37f486a..00000000 --- a/learning/.vuepress/dist/tag/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - Tags | 小浩算法 - - - - - - - -

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git a/learning/.vuepress/dist/timeline/index.html b/learning/.vuepress/dist/timeline/index.html deleted file mode 100644 index 58ae3b6f..00000000 --- a/learning/.vuepress/dist/timeline/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - Timeline | 小浩算法 - - - - - - - -

公告

🐳 扫码回复【进群】🐳
🎉 加入每日刷题群 🎉
🍓 下载高清《图解算法》🍓

- - - diff --git a/lib/Notification.js b/lib/Notification.js deleted file mode 100644 index 3f1ae06d..00000000 --- a/lib/Notification.js +++ /dev/null @@ -1,17 +0,0 @@ -const path = require("path"); -module.exports = { - enhanceAppFiles: [ - path.resolve(__dirname, 'enhanceAppFile.js') - ], - - globalUIComponents: ['Notification'], - async ready() { - console.log('ready') - }, - async generated(pagePaths) { - console.log('generated') - }, - updated() { - console.log('updated') - } -} diff --git a/lib/Notification.vue b/lib/Notification.vue deleted file mode 100644 index 20e9bf22..00000000 --- a/lib/Notification.vue +++ /dev/null @@ -1,126 +0,0 @@ - - - - - \ No newline at end of file diff --git a/lib/autobar.js b/lib/autobar.js deleted file mode 100644 index 22d365fa..00000000 --- a/lib/autobar.js +++ /dev/null @@ -1,306 +0,0 @@ -const sortBy = require("lodash.sortby"); -const glob = require("glob"); -const markdownIt = require("markdown-it"); -const meta = require("markdown-it-meta"); -const {lstatSync, readdirSync, readFileSync, existsSync} = require("fs"); -const {join, normalize, sep} = require("path"); -const startCase = require("lodash.startcase"); -const escapeRegExp = require("lodash.escaperegexp"); -const slugify = require('transliteration').slugify; - -const isDirectory = source => lstatSync(source).isDirectory(); -const getDirectories = source => - readdirSync(source).filter(name => !(name === ".vuepress") && isDirectory(join(source, name))); - -function getName(dir, {navPrefix, stripNumbers} = {}) { - let name = dir.split(sep).pop(); - const argsIndex = name.lastIndexOf("--"); - if (argsIndex > -1) { - name = name.substring(0, argsIndex); - } - - if (navPrefix) { - // "nav.001.xyz" or "nav-001.xyz" or "nav_001.xyz" or "nav 001.xyz" -> "nav" - const pattern = new RegExp(`^${escapeRegExp(navPrefix)}[.-_ ]?`); - name = name.replace(pattern, ""); - } - if (stripNumbers) { - // "001.guide" or "001-guide" or "001_guide" or "001 guide" -> "guide" - // replace - name = name.replace(/^\d+[.\-_ ]?/, "").replace(/^\d+[.\-_ ]?/, ""); - } - return startCase(name); -} - -// Load all MD files in a specified directory and order by metadata 'order' value -const getChildren = function (parent_path, dir, recursive = true) { - // CREDITS: https://github.com/benjivm (from: https://github.com/vuejs/vuepress/issues/613#issuecomment-495751473) - parent_path = normalize(parent_path); - parent_path = parent_path.endsWith(sep) ? parent_path.slice(0, -1) : parent_path; // Remove last / if exists. - const pattern = recursive ? "/**/*.md" : "/*.md"; - files = glob.sync(parent_path + (dir ? `/${dir}` : "") + pattern).map(path => { - // Instantiate MarkdownIt - md = new markdownIt(); - // Add markdown-it-meta - md.use(meta); - // Get the order value - file = readFileSync(path, "utf8"); - md.render(file); - order = md.meta.order; - // Remove "parent_path" and ".md" - path = path.slice(parent_path.length + 1, -3); - // Remove "README", making it the de facto index page - if (path.endsWith("README") || path.endsWith("readme")) { - path = path.slice(0, -6); - } - - return { - path, - order: path === "" && order === undefined ? 0 : order // README is first if it hasn't order - }; - }); - - // Return the ordered list of files, sort by 'order' then 'path' - return sortBy(files, ["order", "path"]).map(file => file.path); -}; - -/** - * Return sidebar config for given baseDir. - * @param {String} baseDir - Absolute path of directory to get sidebar config for. - * @param {Object} options - Options - * @param {String} relativeDir - Relative directory to add to baseDir - * @param {Number} currentLevel - Current level of items. - * @returns {Array.} - Recursion level - */ -function side( - baseDir, - {stripNumbers, maxLevel, navPrefix, skipEmptySidebar, setHomepage} = {}, - relativeDir = "", - currentLevel = 1 -) { - const fileLinks = getChildren(baseDir, relativeDir, currentLevel > maxLevel); - - if (currentLevel <= maxLevel) { - getDirectories(join(baseDir, relativeDir)) - .filter(subDir => !subDir.startsWith(navPrefix)) - .forEach(subDir => { - const children = side( - baseDir, - {stripNumbers, maxLevel, navPrefix, skipEmptySidebar}, - join(relativeDir, subDir), - currentLevel + 1 - ); - if (children.length > 0 || !skipEmptySidebar) { - fileLinks.push({ - title: subDir, - ...parseSidebarParameters(subDir), - children - }); - } - }); - } - - /** - * setHomepage: 'hide' | 'toGroup' | 'top' - * 'hide': Remove first README.md from sidebar. - * 'toGroup': Remove README.md from first position and add it to first group. - * 'top': Homepage appear at top of sidebar. - */ - if (setHomepage !== 'top' && fileLinks[0] === "" && typeof fileLinks[1] === "object") { - fileLinks.shift(); - if (setHomepage === 'toGroup') fileLinks[0].children.unshift(""); - } - - // sort file and folder by name - fileLinks.sort((a, b) => { - let aName = typeof a === "string" ? a : a.title; - let bName = typeof b === "string" ? b : b.title; - aName = aName.split('/').pop(); - bName = bName.split('/').pop() - - let aNum = /^(\d+)[\.\-_ ]?/.test(aName) ? Number(aName.match(/^(\d+)[\.\-_ ]?/)[1]) - : aName; - let bNum = /^(\d+)[\.\-_ ]?/.test(bName) ? Number(bName.match(/^(\d+)[\.\-_ ]?/)[1]) - : bName; - - return aNum > bNum - }) - - // strip number of folder's name - fileLinks.forEach(item => { - if (typeof item === "string") return; - item.title = getName(item.title, {stripNumbers, navPrefix}) - }) - - return fileLinks; -} - -/** - * Gets sidebar parameters from directory name. Arguments are given after double dash `--` and separated by comma. - * - `nc` sets collapsable to `false`. - * - `dX` sets sidebarDepth to `X`. - * - * @param {String} dirname - Name of the directory. - * @returns {Object} - sidebar parameters. - * @example - * parseSidebarParameters("docs/api--nc,d2"); { collapsable: false, sidebarDepth: 2 } - */ -function parseSidebarParameters(dirname) { - const parameters = {}; - parameters.collapsable = false; - return parameters; -} - -/** - * Returns navbar configuration for given path. - * @param {String} rootDir - Path of the directory to get navbar configuration for. - * @param {OBject} options - Options - * @param {String} relativeDir - (Used internally for recursion) Relative directory to `rootDir` to get navconfig for. - * @param {Number} currentNavLevel - (Used internally for recursion) Recursion level. - * @returns {Array.} - */ -function nav(rootDir, {navPrefix, stripNumbers, skipEmptyNavbar}, relativeDir = "/", currentNavLevel = 1) { - const baseDir = join(rootDir, relativeDir); - const childrenDirs = getDirectories(baseDir).filter(subDir => subDir.startsWith(navPrefix)); - const options = {navPrefix, stripNumbers, skipEmptyNavbar}; - let result; - - if (currentNavLevel > 1 && childrenDirs.length === 0) { - if (!existsSync(join(baseDir, "README.md"))) { - if (skipEmptyNavbar) { - return; - } else { - throw new Error( - `README.md file cannot be found in ${baseDir}. VuePress would return 404 for that NavBar link.` - ); - } - } - result = {text: getName(baseDir, {stripNumbers, navPrefix}), link: relativeDir + sep}; - } else if (childrenDirs.length > 0) { - const items = childrenDirs - .map(subDir => nav(rootDir, options, join(relativeDir, subDir), currentNavLevel + 1)) - .filter(Boolean); - result = currentNavLevel === 1 ? items : {text: getName(baseDir, {stripNumbers, navPrefix}), items}; - } - - return result; -} - -/** - * Returns multiple sidebars for given directory. - * @param {String} rootDir - Directory to get navbars for. - * @param {Object} nav - Navigation configuration (Used for calculating sidebars' roots.) - * @param {Object} options - Options - * @param {Number} currentLevel - Recursion level. - * @returns {Object} - Multiple navbars. - */ -function multiSide( - rootDir, - nav, - {stripNumbers, maxLevel, navPrefix, skipEmptySidebar, setHomepage}, - currentLevel = 1 -) { - const sideBar = {}; - const options = {stripNumbers, maxLevel, navPrefix, skipEmptySidebar, setHomepage}; - - nav.forEach(navItem => { - if (navItem.link) { - sideBar[navItem.link] = side(join(rootDir, navItem.link), options); - } else { - Object.assign(sideBar, multiSide(rootDir, navItem.items, options), currentLevel + 1); - } - }); - - if (skipEmptySidebar) { - Object.keys(sideBar).forEach(key => { - if (sideBar[key].length === 0) { - delete sideBar[key]; - } - }); - } - - if (currentLevel === 1) { - const fallBackSide = side(rootDir, options); - if (!skipEmptySidebar || fallBackSide.length > 0) { - sideBar["/"] = side(rootDir, options); - } - } - - return sideBar; -} - -/** - * Returns `nav` and `sidebar` configuration for VuePress calculated using structrue of directory and files in given path. - * @param {String} rootDir - Directory to get configuration for. - * @param {Object} options - Options - * @returns {Object} - { nav: ..., sidebar: ... } configuration. - */ -function getConfig( - rootDir, - { - stripNumbers = true, - maxLevel = 2, - navPrefix = "nav", - skipEmptySidebar = true, - skipEmptyNavbar = true, - multipleSideBar = true, - setHomepage = 'hide' - } = {} -) { - rootDir = normalize(rootDir); - rootDir = rootDir.endsWith(sep) ? rootDir.slice(0, -1) : rootDir; // Remove last / if exists. - const options = { - stripNumbers, - maxLevel, - navPrefix, - skipEmptySidebar, - skipEmptyNavbar, - multipleSideBar, - setHomepage - }; - const navItems = nav(rootDir, options); - - return { - nav: navItems || [], - sidebar: multipleSideBar && navItems ? multiSide(rootDir, navItems, options) : side(rootDir, options) - }; -} - -/** - * Translate chinese to pinyin. - * Compatible with vuepress-pluin-permalink-pinyin. - * @param {Array} navArr - */ -function translitePinyin(navArr) { - navArr.map(nav => { - if (nav.link) { - nav.link = slugify(nav.link, {ignore: ['/', '.']}) - } - if (nav.items) { - translitePinyin(nav.items) - } - }) -} - -module.exports = (options, ctx) => { - return { - async ready() { - const {themeConfig} = ctx.getSiteData ? ctx.getSiteData() : ctx; - const {rootDir = ctx.sourceDir} = options; - const {nav, sidebar} = await getConfig(rootDir, options); - - if (options.pinyinNav && nav.length) { - translitePinyin(nav); - } - - if (themeConfig.nav && themeConfig.nav.length) { - themeConfig.nav = [...nav, ...themeConfig.nav] - } else { - themeConfig.nav = nav - } - - themeConfig.sidebar = sidebar; - return {nav, sidebar}; - } - } -} diff --git a/lib/enhanceAppFile.js b/lib/enhanceAppFile.js deleted file mode 100644 index 0fe74437..00000000 --- a/lib/enhanceAppFile.js +++ /dev/null @@ -1,8 +0,0 @@ -import Notification from './Notification.vue' - -export default ({ Vue }) => { - // eslint-disable-next-line vue/match-component-file-name - - console.log('enhance entered') - Vue.component('Notification', Notification) -} \ No newline at end of file diff --git "a/other/designpattern/\344\270\255\344\273\213\350\200\205\346\250\241\345\274\217.md" "b/other/designpattern/\344\270\255\344\273\213\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 00000000..bd2d5190 --- /dev/null +++ "b/other/designpattern/\344\270\255\344\273\213\350\200\205\346\250\241\345\274\217.md" @@ -0,0 +1,185 @@ +## 中介者(Mediator) + +### 介绍 + +中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。 + +### Intent + +集中相关对象之间复杂的沟通和控制方式。 + +### Class Diagram + +- Mediator:中介者,定义一个接口用于与各同事(Colleague)对象通信。 +- Colleague:同事,相关对象 + +

+ +### Implementation + +Alarm(闹钟)、CoffeePot(咖啡壶)、Calendar(日历)、Sprinkler(喷头)是一组相关的对象,在某个对象的事件产生时需要去操作其它对象,形成了下面这种依赖结构: + +

+ +使用中介者模式可以将复杂的依赖结构变成星形结构: + +

+ +```java +public abstract class Colleague { + public abstract void onEvent(Mediator mediator); +} +``` + +```java +public class Alarm extends Colleague { + + @Override + public void onEvent(Mediator mediator) { + mediator.doEvent("alarm"); + } + + public void doAlarm() { + System.out.println("doAlarm()"); + } +} +``` + +```java +public class CoffeePot extends Colleague { + @Override + public void onEvent(Mediator mediator) { + mediator.doEvent("coffeePot"); + } + + public void doCoffeePot() { + System.out.println("doCoffeePot()"); + } +} +``` + +```java +public class Calender extends Colleague { + @Override + public void onEvent(Mediator mediator) { + mediator.doEvent("calender"); + } + + public void doCalender() { + System.out.println("doCalender()"); + } +} +``` + +```java +public class Sprinkler extends Colleague { + @Override + public void onEvent(Mediator mediator) { + mediator.doEvent("sprinkler"); + } + + public void doSprinkler() { + System.out.println("doSprinkler()"); + } +} +``` + +```java +public abstract class Mediator { + public abstract void doEvent(String eventType); +} +``` + +```java +public class ConcreteMediator extends Mediator { + private Alarm alarm; + private CoffeePot coffeePot; + private Calender calender; + private Sprinkler sprinkler; + + public ConcreteMediator(Alarm alarm, CoffeePot coffeePot, Calender calender, Sprinkler sprinkler) { + this.alarm = alarm; + this.coffeePot = coffeePot; + this.calender = calender; + this.sprinkler = sprinkler; + } + + @Override + public void doEvent(String eventType) { + switch (eventType) { + case "alarm": + doAlarmEvent(); + break; + case "coffeePot": + doCoffeePotEvent(); + break; + case "calender": + doCalenderEvent(); + break; + default: + doSprinklerEvent(); + } + } + + public void doAlarmEvent() { + alarm.doAlarm(); + coffeePot.doCoffeePot(); + calender.doCalender(); + sprinkler.doSprinkler(); + } + + public void doCoffeePotEvent() { + // ... + } + + public void doCalenderEvent() { + // ... + } + + public void doSprinklerEvent() { + // ... + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Alarm alarm = new Alarm(); + CoffeePot coffeePot = new CoffeePot(); + Calender calender = new Calender(); + Sprinkler sprinkler = new Sprinkler(); + Mediator mediator = new ConcreteMediator(alarm, coffeePot, calender, sprinkler); + // 闹钟事件到达,调用中介者就可以操作相关对象 + alarm.onEvent(mediator); + } +} +``` + +```java +doAlarm() +doCoffeePot() +doCalender() +doSprinkler() +``` + +### JDK + +- All scheduleXXX() methods of [java.util.Timer](http://docs.oracle.com/javase/8/docs/api/java/util/Timer.html) +- [java.util.concurrent.Executor#execute()](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html#execute-java.lang.Runnable-) +- submit() and invokeXXX() methods of [java.util.concurrent.ExecutorService](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html) +- scheduleXXX() methods of [java.util.concurrent.ScheduledExecutorService](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html) +- [java.lang.reflect.Method#invoke()](http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#invoke-java.lang.Object-java.lang.Object...-) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + + diff --git "a/other/designpattern/\344\272\253\345\205\203\346\250\241\345\274\217.md" "b/other/designpattern/\344\272\253\345\205\203\346\250\241\345\274\217.md" new file mode 100644 index 00000000..23be74e7 --- /dev/null +++ "b/other/designpattern/\344\272\253\345\205\203\346\250\241\345\274\217.md" @@ -0,0 +1,102 @@ +## 享元(Flyweight) + +### 介绍 + +享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 + +享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象。 + +### Intent + +利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。 + +### Class Diagram + +- Flyweight:享元对象 +- IntrinsicState:内部状态,享元对象共享内部状态 +- ExtrinsicState:外部状态,每个享元对象的外部状态不同 + +

+ +### Implementation + +```java +public interface Flyweight { + void doOperation(String extrinsicState); +} +``` + +```java +public class ConcreteFlyweight implements Flyweight { + + private String intrinsicState; + + public ConcreteFlyweight(String intrinsicState) { + this.intrinsicState = intrinsicState; + } + + @Override + public void doOperation(String extrinsicState) { + System.out.println("Object address: " + System.identityHashCode(this)); + System.out.println("IntrinsicState: " + intrinsicState); + System.out.println("ExtrinsicState: " + extrinsicState); + } +} +``` + +```java +public class FlyweightFactory { + + private HashMap flyweights = new HashMap<>(); + + Flyweight getFlyweight(String intrinsicState) { + if (!flyweights.containsKey(intrinsicState)) { + Flyweight flyweight = new ConcreteFlyweight(intrinsicState); + flyweights.put(intrinsicState, flyweight); + } + return flyweights.get(intrinsicState); + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + FlyweightFactory factory = new FlyweightFactory(); + Flyweight flyweight1 = factory.getFlyweight("aa"); + Flyweight flyweight2 = factory.getFlyweight("aa"); + flyweight1.doOperation("x"); + flyweight2.doOperation("y"); + } +} +``` + +```html +Object address: 1163157884 +IntrinsicState: aa +ExtrinsicState: x +Object address: 1163157884 +IntrinsicState: aa +ExtrinsicState: y +``` + +### JDK + +Java 利用缓存来加速大量小对象的访问时间。 + +- java.lang.Integer#valueOf(int) +- java.lang.Boolean#valueOf(boolean) +- java.lang.Byte#valueOf(byte) +- java.lang.Character#valueOf(char) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\344\273\243\347\220\206\346\250\241\345\274\217.md" "b/other/designpattern/\344\273\243\347\220\206\346\250\241\345\274\217.md" new file mode 100644 index 00000000..b019ef69 --- /dev/null +++ "b/other/designpattern/\344\273\243\347\220\206\346\250\241\345\274\217.md" @@ -0,0 +1,121 @@ +## 代理(Proxy) + +### 介绍 + +在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 + +在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 + +### Intent + +控制对其它对象的访问。 + +### Class Diagram + +代理有以下四类: + +- 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。 +- 虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,它可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大图片时,不能马上完成,可以用虚拟代理缓存图片的大小信息,然后生成一张临时图片代替原始图片。 +- 保护代理(Protection Proxy):按权限控制对象的访问,它负责检查调用者是否具有实现一个请求所必须的访问权限。 +- 智能代理(Smart Reference):取代了简单的指针,它在访问对象时执行一些附加操作:记录对象的引用次数;当第一次引用一个对象时,将它装入内存;在访问一个实际对象前,检查是否已经锁定了它,以确保其它对象不能改变它。 + +

+ +### Implementation + +以下是一个虚拟代理的实现,模拟了图片延迟加载的情况下使用与图片大小相等的临时内容去替换原始图片,直到图片加载完成才将图片显示出来。 + +```java +public interface Image { + void showImage(); +} +``` + +```java +public class HighResolutionImage implements Image { + + private URL imageURL; + private long startTime; + private int height; + private int width; + + public int getHeight() { + return height; + } + + public int getWidth() { + return width; + } + + public HighResolutionImage(URL imageURL) { + this.imageURL = imageURL; + this.startTime = System.currentTimeMillis(); + this.width = 600; + this.height = 600; + } + + public boolean isLoad() { + // 模拟图片加载,延迟 3s 加载完成 + long endTime = System.currentTimeMillis(); + return endTime - startTime > 3000; + } + + @Override + public void showImage() { + System.out.println("Real Image: " + imageURL); + } +} +``` + +```java +public class ImageProxy implements Image { + + private HighResolutionImage highResolutionImage; + + public ImageProxy(HighResolutionImage highResolutionImage) { + this.highResolutionImage = highResolutionImage; + } + + @Override + public void showImage() { + while (!highResolutionImage.isLoad()) { + try { + System.out.println("Temp Image: " + highResolutionImage.getWidth() + " " + highResolutionImage.getHeight()); + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + highResolutionImage.showImage(); + } +} +``` + +```java +public class ImageViewer { + + public static void main(String[] args) throws Exception { + String image = "http://image.jpg/"; + URL url = new URL(image); + HighResolutionImage highResolutionImage = new HighResolutionImage(url); + ImageProxy imageProxy = new ImageProxy(highResolutionImage); + imageProxy.showImage(); + } +} +``` + +### JDK + +- java.lang.reflect.Proxy +- RMI + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\345\215\225\344\276\213\346\250\241\345\274\217.md" "b/other/designpattern/\345\215\225\344\276\213\346\250\241\345\274\217.md" new file mode 100644 index 00000000..bcc1bcd0 --- /dev/null +++ "b/other/designpattern/\345\215\225\344\276\213\346\250\241\345\274\217.md" @@ -0,0 +1,225 @@ +## 单例(Singleton) + +### 介绍 + +单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 + +这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 + +注意: + +- 1、单例类只能有一个实例。 +- 2、单例类必须自己创建自己的唯一实例。 +- 3、单例类必须给所有其他对象提供这一实例。 + +### Intent + +确保一个类只有一个实例,并提供该实例的全局访问点。 + +### Class Diagram + +使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 + +私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 + +

+ +### Implementation + +#### Ⅰ 懒汉式-线程不安全 + +以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资源。 + +这个实现在多线程环境下是不安全的,如果多个线程能够同时进入 `if (uniqueInstance == null)` ,并且此时 uniqueInstance 为 null,那么会有多个线程执行 `uniqueInstance = new Singleton();` 语句,这将导致实例化多次 uniqueInstance。 + +```java +public class Singleton { + + private static Singleton uniqueInstance; + + private Singleton() { + } + + public static Singleton getUniqueInstance() { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + return uniqueInstance; + } +} +``` + +#### Ⅱ 饿汉式-线程安全 + +线程不安全问题主要是由于 uniqueInstance 被实例化多次,采取直接实例化 uniqueInstance 的方式就不会产生线程不安全问题。 + +但是直接实例化的方式也丢失了延迟实例化带来的节约资源的好处。 + +```java +private static Singleton uniqueInstance = new Singleton(); +``` + +#### Ⅲ 懒汉式-线程安全 + +只需要对 getUniqueInstance() 方法加锁,那么在一个时间点只能有一个线程能够进入该方法,从而避免了实例化多次 uniqueInstance。 + +但是当一个线程进入该方法之后,其它试图进入该方法的线程都必须等待,即使 uniqueInstance 已经被实例化了。这会让线程阻塞时间过长,因此该方法有性能问题,不推荐使用。 + +```java +public static synchronized Singleton getUniqueInstance() { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + return uniqueInstance; +} +``` + +#### Ⅳ 双重校验锁-线程安全 + +uniqueInstance 只需要被实例化一次,之后就可以直接使用了。加锁操作只需要对实例化那部分的代码进行,只有当 uniqueInstance 没有被实例化时,才需要进行加锁。 + +双重校验锁先判断 uniqueInstance 是否已经被实例化,如果没有被实例化,那么才对实例化语句进行加锁。 + +```java +public class Singleton { + + private volatile static Singleton uniqueInstance; + + private Singleton() { + } + + public static Singleton getUniqueInstance() { + if (uniqueInstance == null) { + synchronized (Singleton.class) { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + } + } + return uniqueInstance; + } +} +``` + +考虑下面的实现,也就是只使用了一个 if 语句。在 uniqueInstance == null 的情况下,如果两个线程都执行了 if 语句,那么两个线程都会进入 if 语句块内。虽然在 if 语句块内有加锁操作,但是两个线程都会执行 `uniqueInstance = new Singleton();` 这条语句,只是先后的问题,那么就会进行两次实例化。因此必须使用双重校验锁,也就是需要使用两个 if 语句:第一个 if 语句用来避免 uniqueInstance 已经被实例化之后的加锁操作,而第二个 if 语句进行了加锁,所以只能有一个线程进入,就不会出现 uniqueInstance == null 时两个线程同时进行实例化操作。 + +```java +if (uniqueInstance == null) { + synchronized (Singleton.class) { + uniqueInstance = new Singleton(); + } +} +``` + +uniqueInstance 采用 volatile 关键字修饰也是很有必要的, `uniqueInstance = new Singleton();` 这段代码其实是分为三步执行: + +1. 为 uniqueInstance 分配内存空间 +2. 初始化 uniqueInstance +3. 将 uniqueInstance 指向分配的内存地址 + +但是由于 JVM 具有指令重排的特性,执行顺序有可能变成 1>3>2。指令重排在单线程环境下不会出现问题,但是在多线程环境下会导致一个线程获得还没有初始化的实例。例如,线程 T1 执行了 1 和 3,此时 T2 调用 getUniqueInstance() 后发现 uniqueInstance 不为空,因此返回 uniqueInstance,但此时 uniqueInstance 还未被初始化。 + +使用 volatile 可以禁止 JVM 的指令重排,保证在多线程环境下也能正常运行。 + +#### Ⅴ 静态内部类实现 + +当 Singleton 类被加载时,静态内部类 SingletonHolder 没有被加载进内存。只有当调用 `getUniqueInstance()` 方法从而触发 `SingletonHolder.INSTANCE` 时 SingletonHolder 才会被加载,此时初始化 INSTANCE 实例,并且 JVM 能确保 INSTANCE 只被实例化一次。 + +这种方式不仅具有延迟初始化的好处,而且由 JVM 提供了对线程安全的支持。 + +```java +public class Singleton { + + private Singleton() { + } + + private static class SingletonHolder { + private static final Singleton INSTANCE = new Singleton(); + } + + public static Singleton getUniqueInstance() { + return SingletonHolder.INSTANCE; + } +} +``` + +#### Ⅵ 枚举实现 + +```java +public enum Singleton { + + INSTANCE; + + private String objName; + + + public String getObjName() { + return objName; + } + + + public void setObjName(String objName) { + this.objName = objName; + } + + + public static void main(String[] args) { + + // 单例测试 + Singleton firstSingleton = Singleton.INSTANCE; + firstSingleton.setObjName("firstName"); + System.out.println(firstSingleton.getObjName()); + Singleton secondSingleton = Singleton.INSTANCE; + secondSingleton.setObjName("secondName"); + System.out.println(firstSingleton.getObjName()); + System.out.println(secondSingleton.getObjName()); + + // 反射获取实例测试 + try { + Singleton[] enumConstants = Singleton.class.getEnumConstants(); + for (Singleton enumConstant : enumConstants) { + System.out.println(enumConstant.getObjName()); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} +``` + +```html +firstName +secondName +secondName +secondName +``` + +该实现可以防止反射攻击。在其它实现中,通过 setAccessible() 方法可以将私有构造函数的访问级别设置为 public,然后调用构造函数从而实例化对象,如果要防止这种攻击,需要在构造函数中添加防止多次实例化的代码。该实现是由 JVM 保证只会实例化一次,因此不会出现上述的反射攻击。 + +该实现在多次序列化和序列化之后,不会得到多个实例。而其它实现需要使用 transient 修饰所有字段,并且实现序列化和反序列化的方法。 + +### Examples + +- Logger Classes +- Configuration Classes +- Accesing resources in shared mode +- Factories implemented as Singletons + +### JDK + +- [java.lang.Runtime#getRuntime()](http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#getRuntime%28%29) +- [java.awt.Desktop#getDesktop()](http://docs.oracle.com/javase/8/docs/api/java/awt/Desktop.html#getDesktop--) + + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + + diff --git "a/other/designpattern/\345\216\237\345\236\213\346\250\241\345\274\217.md" "b/other/designpattern/\345\216\237\345\236\213\346\250\241\345\274\217.md" new file mode 100644 index 00000000..786c09bc --- /dev/null +++ "b/other/designpattern/\345\216\237\345\236\213\346\250\241\345\274\217.md" @@ -0,0 +1,73 @@ +# 原型模式(Prototype) + +### 介绍 + +原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 + +这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。 + +### Intent + +使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。 + +### Class Diagram + +

+ +### Implementation + +```java +public abstract class Prototype { + abstract Prototype myClone(); +} +``` + +```java +public class ConcretePrototype extends Prototype { + + private String filed; + + public ConcretePrototype(String filed) { + this.filed = filed; + } + + @Override + Prototype myClone() { + return new ConcretePrototype(filed); + } + + @Override + public String toString() { + return filed; + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Prototype prototype = new ConcretePrototype("abc"); + Prototype clone = prototype.myClone(); + System.out.println(clone.toString()); + } +} +``` + +```html +abc +``` + +### JDK + +- [java.lang.Object#clone()](http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone%28%29) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\345\221\275\344\273\244\346\250\241\345\274\217.md" "b/other/designpattern/\345\221\275\344\273\244\346\250\241\345\274\217.md" new file mode 100644 index 00000000..f23096b4 --- /dev/null +++ "b/other/designpattern/\345\221\275\344\273\244\346\250\241\345\274\217.md" @@ -0,0 +1,142 @@ +## 命令(Command) + +### 介绍 + +命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 + +### Intent + +将命令封装成对象中,具有以下作用: + +- 使用命令来参数化其它对象 +- 将命令放入队列中进行排队 +- 将命令的操作记录到日志中 +- 支持可撤销的操作 + +### Class Diagram + +- Command:命令 +- Receiver:命令接收者,也就是命令真正的执行者 +- Invoker:通过它来调用命令 +- Client:可以设置命令与命令的接收者 + +

+ +### Implementation + +设计一个遥控器,可以控制电灯开关。 + +

+ +```java +public interface Command { + void execute(); +} +``` + +```java +public class LightOnCommand implements Command { + Light light; + + public LightOnCommand(Light light) { + this.light = light; + } + + @Override + public void execute() { + light.on(); + } +} +``` + +```java +public class LightOffCommand implements Command { + Light light; + + public LightOffCommand(Light light) { + this.light = light; + } + + @Override + public void execute() { + light.off(); + } +} +``` + +```java +public class Light { + + public void on() { + System.out.println("Light is on!"); + } + + public void off() { + System.out.println("Light is off!"); + } +} +``` + +```java +/** + * 遥控器 + */ +public class Invoker { + private Command[] onCommands; + private Command[] offCommands; + private final int slotNum = 7; + + public Invoker() { + this.onCommands = new Command[slotNum]; + this.offCommands = new Command[slotNum]; + } + + public void setOnCommand(Command command, int slot) { + onCommands[slot] = command; + } + + public void setOffCommand(Command command, int slot) { + offCommands[slot] = command; + } + + public void onButtonWasPushed(int slot) { + onCommands[slot].execute(); + } + + public void offButtonWasPushed(int slot) { + offCommands[slot].execute(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Invoker invoker = new Invoker(); + Light light = new Light(); + Command lightOnCommand = new LightOnCommand(light); + Command lightOffCommand = new LightOffCommand(light); + invoker.setOnCommand(lightOnCommand, 0); + invoker.setOffCommand(lightOffCommand, 0); + invoker.onButtonWasPushed(0); + invoker.offButtonWasPushed(0); + } +} +``` + +### JDK + +- [java.lang.Runnable](http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html) +- [Netflix Hystrix](https://github.com/Netflix/Hystrix/wiki) +- [javax.swing.Action](http://docs.oracle.com/javase/8/docs/api/javax/swing/Action.html) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\345\244\207\345\277\230\345\275\225\346\250\241\345\274\217.md" "b/other/designpattern/\345\244\207\345\277\230\345\275\225\346\250\241\345\274\217.md" new file mode 100644 index 00000000..956b62a0 --- /dev/null +++ "b/other/designpattern/\345\244\207\345\277\230\345\275\225\346\250\241\345\274\217.md" @@ -0,0 +1,191 @@ +## 备忘录(Memento) + +### 介绍 + +备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 + +### Intent + +在不违反封装的情况下获得对象的内部状态,从而在需要时可以将对象恢复到最初状态。 + +### Class Diagram + +- Originator:原始对象 +- Caretaker:负责保存好备忘录 +- Memento:备忘录,存储原始对象的的状态。备忘录实际上有两个接口,一个是提供给 Caretaker 的窄接口:它只能将备忘录传递给其它对象;一个是提供给 Originator 的宽接口,允许它访问到先前状态所需的所有数据。理想情况是只允许 Originator 访问本备忘录的内部状态。 + +

+ +### Implementation + +以下实现了一个简单计算器程序,可以输入两个值,然后计算这两个值的和。备忘录模式允许将这两个值存储起来,然后在某个时刻用存储的状态进行恢复。 + +实现参考:[Memento Pattern - Calculator Example - Java Sourcecode](https://www.oodesign.com/memento-pattern-calculator-example-java-sourcecode.html) + +```java +/** + * Originator Interface + */ +public interface Calculator { + + // Create Memento + PreviousCalculationToCareTaker backupLastCalculation(); + + // setMemento + void restorePreviousCalculation(PreviousCalculationToCareTaker memento); + + int getCalculationResult(); + + void setFirstNumber(int firstNumber); + + void setSecondNumber(int secondNumber); +} +``` + +```java +/** + * Originator Implementation + */ +public class CalculatorImp implements Calculator { + + private int firstNumber; + private int secondNumber; + + @Override + public PreviousCalculationToCareTaker backupLastCalculation() { + // create a memento object used for restoring two numbers + return new PreviousCalculationImp(firstNumber, secondNumber); + } + + @Override + public void restorePreviousCalculation(PreviousCalculationToCareTaker memento) { + this.firstNumber = ((PreviousCalculationToOriginator) memento).getFirstNumber(); + this.secondNumber = ((PreviousCalculationToOriginator) memento).getSecondNumber(); + } + + @Override + public int getCalculationResult() { + // result is adding two numbers + return firstNumber + secondNumber; + } + + @Override + public void setFirstNumber(int firstNumber) { + this.firstNumber = firstNumber; + } + + @Override + public void setSecondNumber(int secondNumber) { + this.secondNumber = secondNumber; + } +} +``` + +```java +/** + * Memento Interface to Originator + * + * This interface allows the originator to restore its state + */ +public interface PreviousCalculationToOriginator { + int getFirstNumber(); + int getSecondNumber(); +} +``` + +```java +/** + * Memento interface to CalculatorOperator (Caretaker) + */ +public interface PreviousCalculationToCareTaker { + // no operations permitted for the caretaker +} +``` + +```java +/** + * Memento Object Implementation + *

+ * Note that this object implements both interfaces to Originator and CareTaker + */ +public class PreviousCalculationImp implements PreviousCalculationToCareTaker, + PreviousCalculationToOriginator { + + private int firstNumber; + private int secondNumber; + + public PreviousCalculationImp(int firstNumber, int secondNumber) { + this.firstNumber = firstNumber; + this.secondNumber = secondNumber; + } + + @Override + public int getFirstNumber() { + return firstNumber; + } + + @Override + public int getSecondNumber() { + return secondNumber; + } +} +``` + +```java +/** + * CareTaker object + */ +public class Client { + + public static void main(String[] args) { + // program starts + Calculator calculator = new CalculatorImp(); + + // assume user enters two numbers + calculator.setFirstNumber(10); + calculator.setSecondNumber(100); + + // find result + System.out.println(calculator.getCalculationResult()); + + // Store result of this calculation in case of error + PreviousCalculationToCareTaker memento = calculator.backupLastCalculation(); + + // user enters a number + calculator.setFirstNumber(17); + + // user enters a wrong second number and calculates result + calculator.setSecondNumber(-290); + + // calculate result + System.out.println(calculator.getCalculationResult()); + + // user hits CTRL + Z to undo last operation and see last result + calculator.restorePreviousCalculation(memento); + + // result restored + System.out.println(calculator.getCalculationResult()); + } +} +``` + +```html +110 +-273 +110 +``` + +### JDK + +- java.io.Serializable + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +

+ +
+ + + + + diff --git "a/other/designpattern/\345\244\226\350\247\202\346\250\241\345\274\217.md" "b/other/designpattern/\345\244\226\350\247\202\346\250\241\345\274\217.md" new file mode 100644 index 00000000..6c16edd8 --- /dev/null +++ "b/other/designpattern/\345\244\226\350\247\202\346\250\241\345\274\217.md" @@ -0,0 +1,71 @@ +## 外观(Facade) + +### 介绍 + +外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 + +这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 + +### Intent + +提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。 + +### Class Diagram + +

+ +### Implementation + +观看电影需要操作很多电器,使用外观模式实现一键看电影功能。 + +```java +public class SubSystem { + public void turnOnTV() { + System.out.println("turnOnTV()"); + } + + public void setCD(String cd) { + System.out.println("setCD( " + cd + " )"); + } + + public void startWatching(){ + System.out.println("startWatching()"); + } +} +``` + +```java +public class Facade { + private SubSystem subSystem = new SubSystem(); + + public void watchMovie() { + subSystem.turnOnTV(); + subSystem.setCD("a movie"); + subSystem.startWatching(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Facade facade = new Facade(); + facade.watchMovie(); + } +} +``` + +### 设计原则 + +最少知识原则:只和你的密友谈话。也就是说客户对象所需要交互的对象应当尽可能少。 + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\345\267\245\345\216\202\346\250\241\345\274\217.md" "b/other/designpattern/\345\267\245\345\216\202\346\250\241\345\274\217.md" new file mode 100644 index 00000000..b2576352 --- /dev/null +++ "b/other/designpattern/\345\267\245\345\216\202\346\250\241\345\274\217.md" @@ -0,0 +1,76 @@ +## 工厂方法(Factory Method) + +### 介绍 + +工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 + +在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 + +### Intent + +定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。 + +### Class Diagram + +在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。 + +下图中,Factory 有一个 doSomething() 方法,这个方法需要用到一个产品对象,这个产品对象由 factoryMethod() 方法创建。该方法是抽象的,需要由子类去实现。 + +

+ +### Implementation + +```java +public abstract class Factory { + abstract public Product factoryMethod(); + public void doSomething() { + Product product = factoryMethod(); + // do something with the product + } +} +``` + +```java +public class ConcreteFactory extends Factory { + public Product factoryMethod() { + return new ConcreteProduct(); + } +} +``` + +```java +public class ConcreteFactory1 extends Factory { + public Product factoryMethod() { + return new ConcreteProduct1(); + } +} +``` + +```java +public class ConcreteFactory2 extends Factory { + public Product factoryMethod() { + return new ConcreteProduct2(); + } +} +``` + +### JDK + +- [java.util.Calendar](http://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html#getInstance--) +- [java.util.ResourceBundle](http://docs.oracle.com/javase/8/docs/api/java/util/ResourceBundle.html#getBundle-java.lang.String-) +- [java.text.NumberFormat](http://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html#getInstance--) +- [java.nio.charset.Charset](http://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html#forName-java.lang.String-) +- [java.net.URLStreamHandlerFactory](http://docs.oracle.com/javase/8/docs/api/java/net/URLStreamHandlerFactory.html#createURLStreamHandler-java.lang.String-) +- [java.util.EnumSet](https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html#of-E-) +- [javax.xml.bind.JAXBContext](https://docs.oracle.com/javase/8/docs/api/javax/xml/bind/JAXBContext.html#createMarshaller--) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\345\273\272\351\200\240\350\200\205\346\250\241\345\274\217.md" "b/other/designpattern/\345\273\272\351\200\240\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 00000000..6c500b4d --- /dev/null +++ "b/other/designpattern/\345\273\272\351\200\240\350\200\205\346\250\241\345\274\217.md" @@ -0,0 +1,106 @@ +## 生成器(Builder) + +### 介绍 + +建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 + +一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 + +### Intent + +封装一个对象的构造过程,并允许按步骤构造。 + +### Class Diagram + +

+ +### Implementation + +以下是一个简易的 StringBuilder 实现,参考了 JDK 1.8 源码。 + +```java +public class AbstractStringBuilder { + protected char[] value; + + protected int count; + + public AbstractStringBuilder(int capacity) { + count = 0; + value = new char[capacity]; + } + + public AbstractStringBuilder append(char c) { + ensureCapacityInternal(count + 1); + value[count++] = c; + return this; + } + + private void ensureCapacityInternal(int minimumCapacity) { + // overflow-conscious code + if (minimumCapacity - value.length > 0) + expandCapacity(minimumCapacity); + } + + void expandCapacity(int minimumCapacity) { + int newCapacity = value.length * 2 + 2; + if (newCapacity - minimumCapacity < 0) + newCapacity = minimumCapacity; + if (newCapacity < 0) { + if (minimumCapacity < 0) // overflow + throw new OutOfMemoryError(); + newCapacity = Integer.MAX_VALUE; + } + value = Arrays.copyOf(value, newCapacity); + } +} +``` + +```java +public class StringBuilder extends AbstractStringBuilder { + public StringBuilder() { + super(16); + } + + @Override + public String toString() { + // Create a copy, don't share the array + return new String(value, 0, count); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + StringBuilder sb = new StringBuilder(); + final int count = 26; + for (int i = 0; i < count; i++) { + sb.append((char) ('a' + i)); + } + System.out.println(sb.toString()); + } +} +``` + +```html +abcdefghijklmnopqrstuvwxyz +``` + +### JDK + +- [java.lang.StringBuilder](http://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html) +- [java.nio.ByteBuffer](http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html#put-byte-) +- [java.lang.StringBuffer](http://docs.oracle.com/javase/8/docs/api/java/lang/StringBuffer.html#append-boolean-) +- [java.lang.Appendable](http://docs.oracle.com/javase/8/docs/api/java/lang/Appendable.html) +- [Apache Camel builders](https://github.com/apache/camel/tree/0e195428ee04531be27a0b659005e3aa8d159d23/camel-core/src/main/java/org/apache/camel/builder) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\346\212\275\350\261\241\345\267\245\345\216\202.md" "b/other/designpattern/\346\212\275\350\261\241\345\267\245\345\216\202.md" new file mode 100644 index 00000000..c8f41d3b --- /dev/null +++ "b/other/designpattern/\346\212\275\350\261\241\345\267\245\345\216\202.md" @@ -0,0 +1,114 @@ +## 抽象工厂(Abstract Factory) + +### 介绍 + +抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 + +在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 + +### Intent + +提供一个接口,用于创建 **相关的对象家族** 。 + +### Class Diagram + +抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂方法模式只是用于创建一个对象,这和抽象工厂模式有很大不同。 + +抽象工厂模式用到了工厂方法模式来创建单一对象,AbstractFactory 中的 createProductA() 和 createProductB() 方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂方法模式的定义。 + +至于创建对象的家族这一概念是在 Client 体现,Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象,在这里这两个对象就有很大的相关性,Client 需要同时创建出这两个对象。 + +从高层次来看,抽象工厂使用了组合,即 Cilent 组合了 AbstractFactory,而工厂方法模式使用了继承。 + +

+ +### Implementation + +```java +public class AbstractProductA { +} +``` + +```java +public class AbstractProductB { +} +``` + +```java +public class ProductA1 extends AbstractProductA { +} +``` + +```java +public class ProductA2 extends AbstractProductA { +} +``` + +```java +public class ProductB1 extends AbstractProductB { +} +``` + +```java +public class ProductB2 extends AbstractProductB { +} +``` + +```java +public abstract class AbstractFactory { + abstract AbstractProductA createProductA(); + abstract AbstractProductB createProductB(); +} +``` + +```java +public class ConcreteFactory1 extends AbstractFactory { + AbstractProductA createProductA() { + return new ProductA1(); + } + + AbstractProductB createProductB() { + return new ProductB1(); + } +} +``` + +```java +public class ConcreteFactory2 extends AbstractFactory { + AbstractProductA createProductA() { + return new ProductA2(); + } + + AbstractProductB createProductB() { + return new ProductB2(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + AbstractFactory abstractFactory = new ConcreteFactory1(); + AbstractProductA productA = abstractFactory.createProductA(); + AbstractProductB productB = abstractFactory.createProductB(); + // do something with productA and productB + } +} +``` + +### JDK + +- [javax.xml.parsers.DocumentBuilderFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/parsers/DocumentBuilderFactory.html) +- [javax.xml.transform.TransformerFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/transform/TransformerFactory.html#newInstance--) +- [javax.xml.xpath.XPathFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/xpath/XPathFactory.html#newInstance--) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\346\241\245\346\216\245\346\250\241\345\274\217.md" "b/other/designpattern/\346\241\245\346\216\245\346\250\241\345\274\217.md" new file mode 100644 index 00000000..ef9b3c47 --- /dev/null +++ "b/other/designpattern/\346\241\245\346\216\245\346\250\241\345\274\217.md" @@ -0,0 +1,175 @@ +## 桥接(Bridge) + +### 介绍 + +桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 + +这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 + +我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。 + +### Intent + +将抽象与实现分离开来,使它们可以独立变化。 + +### Class Diagram + +- Abstraction:定义抽象类的接口 +- Implementor:定义实现类接口 + +

+ +### Implementation + +RemoteControl 表示遥控器,指代 Abstraction。 + +TV 表示电视,指代 Implementor。 + +桥接模式将遥控器和电视分离开来,从而可以独立改变遥控器或者电视的实现。 + +```java +public abstract class TV { + public abstract void on(); + + public abstract void off(); + + public abstract void tuneChannel(); +} +``` + +```java +public class Sony extends TV { + @Override + public void on() { + System.out.println("Sony.on()"); + } + + @Override + public void off() { + System.out.println("Sony.off()"); + } + + @Override + public void tuneChannel() { + System.out.println("Sony.tuneChannel()"); + } +} +``` + +```java +public class RCA extends TV { + @Override + public void on() { + System.out.println("RCA.on()"); + } + + @Override + public void off() { + System.out.println("RCA.off()"); + } + + @Override + public void tuneChannel() { + System.out.println("RCA.tuneChannel()"); + } +} +``` + +```java +public abstract class RemoteControl { + protected TV tv; + + public RemoteControl(TV tv) { + this.tv = tv; + } + + public abstract void on(); + + public abstract void off(); + + public abstract void tuneChannel(); +} +``` + +```java +public class ConcreteRemoteControl1 extends RemoteControl { + public ConcreteRemoteControl1(TV tv) { + super(tv); + } + + @Override + public void on() { + System.out.println("ConcreteRemoteControl1.on()"); + tv.on(); + } + + @Override + public void off() { + System.out.println("ConcreteRemoteControl1.off()"); + tv.off(); + } + + @Override + public void tuneChannel() { + System.out.println("ConcreteRemoteControl1.tuneChannel()"); + tv.tuneChannel(); + } +} +``` + +```java +public class ConcreteRemoteControl2 extends RemoteControl { + public ConcreteRemoteControl2(TV tv) { + super(tv); + } + + @Override + public void on() { + System.out.println("ConcreteRemoteControl2.on()"); + tv.on(); + } + + @Override + public void off() { + System.out.println("ConcreteRemoteControl2.off()"); + tv.off(); + } + + @Override + public void tuneChannel() { + System.out.println("ConcreteRemoteControl2.tuneChannel()"); + tv.tuneChannel(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + RemoteControl remoteControl1 = new ConcreteRemoteControl1(new RCA()); + remoteControl1.on(); + remoteControl1.off(); + remoteControl1.tuneChannel(); + RemoteControl remoteControl2 = new ConcreteRemoteControl2(new Sony()); + remoteControl2.on(); + remoteControl2.off(); + remoteControl2.tuneChannel(); + } +} +``` + +### JDK + +- AWT (It provides an abstraction layer which maps onto the native OS the windowing support.) +- JDBC + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\346\250\241\346\235\277\346\250\241\345\274\217.md" "b/other/designpattern/\346\250\241\346\235\277\346\250\241\345\274\217.md" new file mode 100644 index 00000000..6feaf664 --- /dev/null +++ "b/other/designpattern/\346\250\241\346\235\277\346\250\241\345\274\217.md" @@ -0,0 +1,111 @@ +## 模板方法(Template Method) + +### 介绍 + +在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 + +### Intent + +定义算法框架,并将一些步骤的实现延迟到子类。 + +通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。 + +### Class Diagram + +

+ +### Implementation + +冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。 + +

+ +```java +public abstract class CaffeineBeverage { + + final void prepareRecipe() { + boilWater(); + brew(); + pourInCup(); + addCondiments(); + } + + abstract void brew(); + + abstract void addCondiments(); + + void boilWater() { + System.out.println("boilWater"); + } + + void pourInCup() { + System.out.println("pourInCup"); + } +} +``` + +```java +public class Coffee extends CaffeineBeverage { + @Override + void brew() { + System.out.println("Coffee.brew"); + } + + @Override + void addCondiments() { + System.out.println("Coffee.addCondiments"); + } +} +``` + +```java +public class Tea extends CaffeineBeverage { + @Override + void brew() { + System.out.println("Tea.brew"); + } + + @Override + void addCondiments() { + System.out.println("Tea.addCondiments"); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + CaffeineBeverage caffeineBeverage = new Coffee(); + caffeineBeverage.prepareRecipe(); + System.out.println("-----------"); + caffeineBeverage = new Tea(); + caffeineBeverage.prepareRecipe(); + } +} +``` + +```html +boilWater +Coffee.brew +pourInCup +Coffee.addCondiments +----------- +boilWater +Tea.brew +pourInCup +Tea.addCondiments +``` + +### JDK + +- java.util.Collections#sort() +- java.io.InputStream#skip() +- java.io.InputStream#read() +- java.util.AbstractList#indexOf() + + + + + + + diff --git "a/other/designpattern/\347\212\266\346\200\201\346\250\241\345\274\217.md" "b/other/designpattern/\347\212\266\346\200\201\346\250\241\345\274\217.md" new file mode 100644 index 00000000..d2dbf6a0 --- /dev/null +++ "b/other/designpattern/\347\212\266\346\200\201\346\250\241\345\274\217.md" @@ -0,0 +1,318 @@ +## 状态(State) + +### 介绍 + +在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 + +在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 + +### Intent + +允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它所属的类。 + +### Class Diagram + +

+ +### Implementation + +糖果销售机有多种状态,每种状态下销售机有不同的行为,状态可以发生转移,使得销售机的行为也发生改变。 + +

+ +```java +public interface State { + /** + * 投入 25 分钱 + */ + void insertQuarter(); + + /** + * 退回 25 分钱 + */ + void ejectQuarter(); + + /** + * 转动曲柄 + */ + void turnCrank(); + + /** + * 发放糖果 + */ + void dispense(); +} +``` + +```java +public class HasQuarterState implements State { + + private GumballMachine gumballMachine; + + public HasQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + @Override + public void insertQuarter() { + System.out.println("You can't insert another quarter"); + } + + @Override + public void ejectQuarter() { + System.out.println("Quarter returned"); + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } + + @Override + public void turnCrank() { + System.out.println("You turned..."); + gumballMachine.setState(gumballMachine.getSoldState()); + } + + @Override + public void dispense() { + System.out.println("No gumball dispensed"); + } +} +``` + +```java +public class NoQuarterState implements State { + + GumballMachine gumballMachine; + + public NoQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + @Override + public void insertQuarter() { + System.out.println("You insert a quarter"); + gumballMachine.setState(gumballMachine.getHasQuarterState()); + } + + @Override + public void ejectQuarter() { + System.out.println("You haven't insert a quarter"); + } + + @Override + public void turnCrank() { + System.out.println("You turned, but there's no quarter"); + } + + @Override + public void dispense() { + System.out.println("You need to pay first"); + } +} +``` + +```java +public class SoldOutState implements State { + + GumballMachine gumballMachine; + + public SoldOutState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + @Override + public void insertQuarter() { + System.out.println("You can't insert a quarter, the machine is sold out"); + } + + @Override + public void ejectQuarter() { + System.out.println("You can't eject, you haven't inserted a quarter yet"); + } + + @Override + public void turnCrank() { + System.out.println("You turned, but there are no gumballs"); + } + + @Override + public void dispense() { + System.out.println("No gumball dispensed"); + } +} +``` + +```java +public class SoldState implements State { + + GumballMachine gumballMachine; + + public SoldState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + @Override + public void insertQuarter() { + System.out.println("Please wait, we're already giving you a gumball"); + } + + @Override + public void ejectQuarter() { + System.out.println("Sorry, you already turned the crank"); + } + + @Override + public void turnCrank() { + System.out.println("Turning twice doesn't get you another gumball!"); + } + + @Override + public void dispense() { + gumballMachine.releaseBall(); + if (gumballMachine.getCount() > 0) { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } else { + System.out.println("Oops, out of gumballs"); + gumballMachine.setState(gumballMachine.getSoldOutState()); + } + } +} +``` + +```java +public class GumballMachine { + + private State soldOutState; + private State noQuarterState; + private State hasQuarterState; + private State soldState; + + private State state; + private int count = 0; + + public GumballMachine(int numberGumballs) { + count = numberGumballs; + soldOutState = new SoldOutState(this); + noQuarterState = new NoQuarterState(this); + hasQuarterState = new HasQuarterState(this); + soldState = new SoldState(this); + + if (numberGumballs > 0) { + state = noQuarterState; + } else { + state = soldOutState; + } + } + + public void insertQuarter() { + state.insertQuarter(); + } + + public void ejectQuarter() { + state.ejectQuarter(); + } + + public void turnCrank() { + state.turnCrank(); + state.dispense(); + } + + public void setState(State state) { + this.state = state; + } + + public void releaseBall() { + System.out.println("A gumball comes rolling out the slot..."); + if (count != 0) { + count -= 1; + } + } + + public State getSoldOutState() { + return soldOutState; + } + + public State getNoQuarterState() { + return noQuarterState; + } + + public State getHasQuarterState() { + return hasQuarterState; + } + + public State getSoldState() { + return soldState; + } + + public int getCount() { + return count; + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + GumballMachine gumballMachine = new GumballMachine(5); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + gumballMachine.insertQuarter(); + gumballMachine.ejectQuarter(); + gumballMachine.turnCrank(); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.ejectQuarter(); + + gumballMachine.insertQuarter(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + } +} +``` + +```html +You insert a quarter +You turned... +A gumball comes rolling out the slot... +You insert a quarter +Quarter returned +You turned, but there's no quarter +You need to pay first +You insert a quarter +You turned... +A gumball comes rolling out the slot... +You insert a quarter +You turned... +A gumball comes rolling out the slot... +You haven't insert a quarter +You insert a quarter +You can't insert another quarter +You turned... +A gumball comes rolling out the slot... +You insert a quarter +You turned... +A gumball comes rolling out the slot... +Oops, out of gumballs +You can't insert a quarter, the machine is sold out +You turned, but there are no gumballs +No gumball dispensed +``` +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + diff --git "a/other/designpattern/\347\251\272\345\257\271\350\261\241\346\250\241\345\274\217.md" "b/other/designpattern/\347\251\272\345\257\271\350\261\241\346\250\241\345\274\217.md" new file mode 100644 index 00000000..60221f94 --- /dev/null +++ "b/other/designpattern/\347\251\272\345\257\271\350\261\241\346\250\241\345\274\217.md" @@ -0,0 +1,72 @@ +## 空对象(Null) + +### 介绍 + +在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。 + +在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。 + +### Intent + +使用什么都不做 + +的空对象来代替 NULL。 + +一个方法返回 NULL,意味着方法的调用端需要去检查返回值是否是 NULL,这么做会导致非常多的冗余的检查代码。并且如果某一个调用端忘记了做这个检查返回值,而直接使用返回的对象,那么就有可能抛出空指针异常。 + +### Class Diagram + +

+ +### Implementation + +```java +public abstract class AbstractOperation { + abstract void request(); +} +``` + +```java +public class RealOperation extends AbstractOperation { + @Override + void request() { + System.out.println("do something"); + } +} +``` + +```java +public class NullOperation extends AbstractOperation{ + @Override + void request() { + // do nothing + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + AbstractOperation abstractOperation = func(-1); + abstractOperation.request(); + } + + public static AbstractOperation func(int para) { + if (para < 0) { + return new NullOperation(); + } + return new RealOperation(); + } +} +``` +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + diff --git "a/other/designpattern/\347\255\226\347\225\245\346\250\241\345\274\217.md" "b/other/designpattern/\347\255\226\347\225\245\346\250\241\345\274\217.md" new file mode 100644 index 00000000..e17416c6 --- /dev/null +++ "b/other/designpattern/\347\255\226\347\225\245\346\250\241\345\274\217.md" @@ -0,0 +1,106 @@ +## 策略(Strategy) + +### 介绍 + +在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 + +在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 + +### Intent + +定义一系列算法,封装每个算法,并使它们可以互换。 + +策略模式可以让算法独立于使用它的客户端。 + +### Class Diagram + +- Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。 +- Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。 + +

+ +### 与状态模式的比较 + +状态模式的类图和策略模式类似,并且都是能够动态改变对象的行为。但是状态模式是通过状态转移来改变 Context 所组合的 State 对象,而策略模式是通过 Context 本身的决策来改变组合的 Strategy 对象。所谓的状态转移,是指 Context 在运行过程中由于一些条件发生改变而使得 State 对象发生改变,注意必须要是在运行过程中。 + +状态模式主要是用来解决状态转移的问题,当状态发生转移了,那么 Context 对象就会改变它的行为;而策略模式主要是用来封装一组可以互相替代的算法族,并且可以根据需要动态地去替换 Context 使用的算法。 + +### Implementation + +设计一个鸭子,它可以动态地改变叫声。这里的算法族是鸭子的叫声行为。 + +```java +public interface QuackBehavior { + void quack(); +} +``` + +```java +public class Quack implements QuackBehavior { + @Override + public void quack() { + System.out.println("quack!"); + } +} +``` + +```java +public class Squeak implements QuackBehavior{ + @Override + public void quack() { + System.out.println("squeak!"); + } +} +``` + +```java +public class Duck { + + private QuackBehavior quackBehavior; + + public void performQuack() { + if (quackBehavior != null) { + quackBehavior.quack(); + } + } + + public void setQuackBehavior(QuackBehavior quackBehavior) { + this.quackBehavior = quackBehavior; + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + Duck duck = new Duck(); + duck.setQuackBehavior(new Squeak()); + duck.performQuack(); + duck.setQuackBehavior(new Quack()); + duck.performQuack(); + } +} +``` + +```html +squeak! +quack! +``` + +### JDK + +- java.util.Comparator#compare() +- javax.servlet.http.HttpServlet +- javax.servlet.Filter#doFilter() + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\347\256\200\345\215\225\345\267\245\345\216\202\346\250\241\345\274\217.md" "b/other/designpattern/\347\256\200\345\215\225\345\267\245\345\216\202\346\250\241\345\274\217.md" new file mode 100644 index 00000000..6da387cf --- /dev/null +++ "b/other/designpattern/\347\256\200\345\215\225\345\267\245\345\216\202\346\250\241\345\274\217.md" @@ -0,0 +1,97 @@ +## 简单工厂(Simple Factory) + +### 介绍 + +简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 + +### Intent + +在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。 + +### Class Diagram + +简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。 + +这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,例如增加子类,那么所有的客户类都要进行修改。 + +

+ +### Implementation + +```java +public interface Product { +} +``` + +```java +public class ConcreteProduct implements Product { +} +``` + +```java +public class ConcreteProduct1 implements Product { +} +``` + +```java +public class ConcreteProduct2 implements Product { +} +``` + +以下的 Client 类包含了实例化的代码,这是一种错误的实现。如果在客户类中存在这种实例化代码,就需要考虑将代码放到简单工厂中。 + +```java +public class Client { + + public static void main(String[] args) { + int type = 1; + Product product; + if (type == 1) { + product = new ConcreteProduct1(); + } else if (type == 2) { + product = new ConcreteProduct2(); + } else { + product = new ConcreteProduct(); + } + // do something with the product + } +} +``` + +以下的 SimpleFactory 是简单工厂实现,它被所有需要进行实例化的客户类调用。 + +```java +public class SimpleFactory { + + public Product createProduct(int type) { + if (type == 1) { + return new ConcreteProduct1(); + } else if (type == 2) { + return new ConcreteProduct2(); + } + return new ConcreteProduct(); + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + SimpleFactory simpleFactory = new SimpleFactory(); + Product product = simpleFactory.createProduct(1); + // do something with the product + } +} +``` +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + diff --git "a/other/designpattern/\347\273\204\345\220\210\346\250\241\345\274\217.md" "b/other/designpattern/\347\273\204\345\220\210\346\250\241\345\274\217.md" new file mode 100644 index 00000000..4897f247 --- /dev/null +++ "b/other/designpattern/\347\273\204\345\220\210\346\250\241\345\274\217.md" @@ -0,0 +1,150 @@ +## 组合(Composite) + +### 介绍 + +组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 + +这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 + +### Intent + +将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。 + +### Class Diagram + +组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。 + +组合对象拥有一个或者多个组件对象,因此组合对象的操作可以委托给组件对象去处理,而组件对象可以是另一个组合对象或者叶子对象。 + +

+ +### Implementation + +```java +public abstract class Component { + protected String name; + + public Component(String name) { + this.name = name; + } + + public void print() { + print(0); + } + + abstract void print(int level); + + abstract public void add(Component component); + + abstract public void remove(Component component); +} +``` + +```java +public class Composite extends Component { + + private List child; + + public Composite(String name) { + super(name); + child = new ArrayList<>(); + } + + @Override + void print(int level) { + for (int i = 0; i < level; i++) { + System.out.print("--"); + } + System.out.println("Composite:" + name); + for (Component component : child) { + component.print(level + 1); + } + } + + @Override + public void add(Component component) { + child.add(component); + } + + @Override + public void remove(Component component) { + child.remove(component); + } +} +``` + +```java +public class Leaf extends Component { + public Leaf(String name) { + super(name); + } + + @Override + void print(int level) { + for (int i = 0; i < level; i++) { + System.out.print("--"); + } + System.out.println("left:" + name); + } + + @Override + public void add(Component component) { + throw new UnsupportedOperationException(); // 牺牲透明性换取单一职责原则,这样就不用考虑是叶子节点还是组合节点 + } + + @Override + public void remove(Component component) { + throw new UnsupportedOperationException(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Composite root = new Composite("root"); + Component node1 = new Leaf("1"); + Component node2 = new Composite("2"); + Component node3 = new Leaf("3"); + root.add(node1); + root.add(node2); + root.add(node3); + Component node21 = new Leaf("21"); + Component node22 = new Composite("22"); + node2.add(node21); + node2.add(node22); + Component node221 = new Leaf("221"); + node22.add(node221); + root.print(); + } +} +``` + +```html +Composite:root +--left:1 +--Composite:2 +----left:21 +----Composite:22 +------left:221 +--left:3 +``` + +### JDK + +- javax.swing.JComponent#add(Component) +- java.awt.Container#add(Component) +- java.util.Map#putAll(Map) +- java.util.List#addAll(Collection) +- java.util.Set#addAll(Collection) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\350\243\205\351\245\260\350\200\205\346\250\241\345\274\217.md" "b/other/designpattern/\350\243\205\351\245\260\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 00000000..7a1d643e --- /dev/null +++ "b/other/designpattern/\350\243\205\351\245\260\350\200\205\346\250\241\345\274\217.md" @@ -0,0 +1,126 @@ +## 装饰(Decorator) + +### 介绍 + +装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 + +这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 + +我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。 + +### Intent + +为对象动态添加功能。 + +### Class Diagram + +装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也保留了被装饰者的功能。可以看到,具体组件应当是装饰层次的最低层,因为只有具体组件的方法实现不需要依赖于其它对象。 + +

+ +### Implementation + +设计不同种类的饮料,饮料可以添加配料,比如可以添加牛奶,并且支持动态添加新配料。每增加一种配料,该饮料的价格就会增加,要求计算一种饮料的价格。 + +下图表示在 DarkRoast 饮料上新增新添加 Mocha 配料,之后又添加了 Whip 配料。DarkRoast 被 Mocha 包裹,Mocha 又被 Whip 包裹。它们都继承自相同父类,都有 cost() 方法,外层类的 cost() 方法调用了内层类的 cost() 方法。 + +

+ +```java +public interface Beverage { + double cost(); +} +``` + +```java +public class DarkRoast implements Beverage { + @Override + public double cost() { + return 1; + } +} +``` + +```java +public class HouseBlend implements Beverage { + @Override + public double cost() { + return 1; + } +} +``` + +```java +public abstract class CondimentDecorator implements Beverage { + protected Beverage beverage; +} +``` + +```java +public class Milk extends CondimentDecorator { + + public Milk(Beverage beverage) { + this.beverage = beverage; + } + + @Override + public double cost() { + return 1 + beverage.cost(); + } +} +``` + +```java +public class Mocha extends CondimentDecorator { + + public Mocha(Beverage beverage) { + this.beverage = beverage; + } + + @Override + public double cost() { + return 1 + beverage.cost(); + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + Beverage beverage = new HouseBlend(); + beverage = new Mocha(beverage); + beverage = new Milk(beverage); + System.out.println(beverage.cost()); + } +} +``` + +```html +3.0 +``` + +### 设计原则 + +类应该对扩展开放,对修改关闭:也就是添加新功能时不需要修改代码。饮料可以动态添加新的配料,而不需要去修改饮料的代码。 + +不可能把所有的类设计成都满足这一原则,应当把该原则应用于最有可能发生改变的地方。 + +### JDK + +- java.io.BufferedInputStream(InputStream) +- java.io.DataInputStream(InputStream) +- java.io.BufferedOutputStream(OutputStream) +- java.util.zip.ZipOutputStream(OutputStream) +- java.util.Collections#checked[List|Map|Set|SortedSet|SortedMap]() + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" "b/other/designpattern/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 00000000..c86ff758 --- /dev/null +++ "b/other/designpattern/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" @@ -0,0 +1,149 @@ +## 观察者(Observer) + +### 介绍 + +当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 + +### Intent + +定义对象之间的一对多依赖,当一个对象状态改变时,它的所有依赖都会收到通知并且自动更新状态。 + +主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。 + +

+ +### Class Diagram + +主题(Subject)具有注册和移除观察者、并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。 + +观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法。 + +

+ +### Implementation + +天气数据布告板会在天气信息发生改变时更新其内容,布告板有多个,并且在将来会继续增加。 + +

+ +```java +public interface Subject { + void registerObserver(Observer o); + + void removeObserver(Observer o); + + void notifyObserver(); +} +``` + +```java +public class WeatherData implements Subject { + private List observers; + private float temperature; + private float humidity; + private float pressure; + + public WeatherData() { + observers = new ArrayList<>(); + } + + public void setMeasurements(float temperature, float humidity, float pressure) { + this.temperature = temperature; + this.humidity = humidity; + this.pressure = pressure; + notifyObserver(); + } + + @Override + public void registerObserver(Observer o) { + observers.add(o); + } + + @Override + public void removeObserver(Observer o) { + int i = observers.indexOf(o); + if (i >= 0) { + observers.remove(i); + } + } + + @Override + public void notifyObserver() { + for (Observer o : observers) { + o.update(temperature, humidity, pressure); + } + } +} +``` + +```java +public interface Observer { + void update(float temp, float humidity, float pressure); +} +``` + +```java +public class StatisticsDisplay implements Observer { + + public StatisticsDisplay(Subject weatherData) { + weatherData.reisterObserver(this); + } + + @Override + public void update(float temp, float humidity, float pressure) { + System.out.println("StatisticsDisplay.update: " + temp + " " + humidity + " " + pressure); + } +} +``` + +```java +public class CurrentConditionsDisplay implements Observer { + + public CurrentConditionsDisplay(Subject weatherData) { + weatherData.registerObserver(this); + } + + @Override + public void update(float temp, float humidity, float pressure) { + System.out.println("CurrentConditionsDisplay.update: " + temp + " " + humidity + " " + pressure); + } +} +``` + +```java +public class WeatherStation { + public static void main(String[] args) { + WeatherData weatherData = new WeatherData(); + CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData); + StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData); + + weatherData.setMeasurements(0, 0, 0); + weatherData.setMeasurements(1, 1, 1); + } +} +``` + +```html +CurrentConditionsDisplay.update: 0.0 0.0 0.0 +StatisticsDisplay.update: 0.0 0.0 0.0 +CurrentConditionsDisplay.update: 1.0 1.0 1.0 +StatisticsDisplay.update: 1.0 1.0 1.0 +``` + +### JDK + +- [java.util.Observer](http://docs.oracle.com/javase/8/docs/api/java/util/Observer.html) +- [java.util.EventListener](http://docs.oracle.com/javase/8/docs/api/java/util/EventListener.html) +- [javax.servlet.http.HttpSessionBindingListener](http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSessionBindingListener.html) +- [RxJava](https://github.com/ReactiveX/RxJava) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\350\247\243\351\207\212\345\231\250\346\250\241\345\274\217.md" "b/other/designpattern/\350\247\243\351\207\212\345\231\250\346\250\241\345\274\217.md" new file mode 100644 index 00000000..f22b470c --- /dev/null +++ "b/other/designpattern/\350\247\243\351\207\212\345\231\250\346\250\241\345\274\217.md" @@ -0,0 +1,138 @@ +## 解释器(Interpreter) + +### 介绍 + +解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 + +### Intent + +为语言创建解释器,通常由语言的语法和语法分析来定义。 + +### Class Diagram + +- TerminalExpression:终结符表达式,每个终结符都需要一个 TerminalExpression。 +- Context:上下文,包含解释器之外的一些全局信息。 + +

+ +### Implementation + +以下是一个规则检验器实现,具有 and 和 or 规则,通过规则可以构建一颗解析树,用来检验一个文本是否满足解析树定义的规则。 + +例如一颗解析树为 D And (A Or (B C)),文本 "D A" 满足该解析树定义的规则。 + +这里的 Context 指的是 String。 + +```java +public abstract class Expression { + public abstract boolean interpret(String str); +} +``` + +```java +public class TerminalExpression extends Expression { + + private String literal = null; + + public TerminalExpression(String str) { + literal = str; + } + + public boolean interpret(String str) { + StringTokenizer st = new StringTokenizer(str); + while (st.hasMoreTokens()) { + String test = st.nextToken(); + if (test.equals(literal)) { + return true; + } + } + return false; + } +} +``` + +```java +public class AndExpression extends Expression { + + private Expression expression1 = null; + private Expression expression2 = null; + + public AndExpression(Expression expression1, Expression expression2) { + this.expression1 = expression1; + this.expression2 = expression2; + } + + public boolean interpret(String str) { + return expression1.interpret(str) && expression2.interpret(str); + } +} +``` + +```java +public class OrExpression extends Expression { + private Expression expression1 = null; + private Expression expression2 = null; + + public OrExpression(Expression expression1, Expression expression2) { + this.expression1 = expression1; + this.expression2 = expression2; + } + + public boolean interpret(String str) { + return expression1.interpret(str) || expression2.interpret(str); + } +} +``` + +```java +public class Client { + + /** + * 构建解析树 + */ + public static Expression buildInterpreterTree() { + // Literal + Expression terminal1 = new TerminalExpression("A"); + Expression terminal2 = new TerminalExpression("B"); + Expression terminal3 = new TerminalExpression("C"); + Expression terminal4 = new TerminalExpression("D"); + // B C + Expression alternation1 = new OrExpression(terminal2, terminal3); + // A Or (B C) + Expression alternation2 = new OrExpression(terminal1, alternation1); + // D And (A Or (B C)) + return new AndExpression(terminal4, alternation2); + } + + public static void main(String[] args) { + Expression define = buildInterpreterTree(); + String context1 = "D A"; + String context2 = "A B"; + System.out.println(define.interpret(context1)); + System.out.println(define.interpret(context2)); + } +} +``` + +```html +true +false +``` + +### JDK + +- [java.util.Pattern](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) +- [java.text.Normalizer](http://docs.oracle.com/javase/8/docs/api/java/text/Normalizer.html) +- All subclasses of [java.text.Format](http://docs.oracle.com/javase/8/docs/api/java/text/Format.html) +- [javax.el.ELResolver](http://docs.oracle.com/javaee/7/api/javax/el/ELResolver.html) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\350\256\277\351\227\256\350\200\205\346\250\241\345\274\217.md" "b/other/designpattern/\350\256\277\351\227\256\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 00000000..bc5226de --- /dev/null +++ "b/other/designpattern/\350\256\277\351\227\256\350\200\205\346\250\241\345\274\217.md" @@ -0,0 +1,220 @@ +## 访问者(Visitor) + +### 介绍 + +在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 + +### Intent + +为一个对象结构(比如组合结构)增加新能力。 + +### Class Diagram + +- Visitor:访问者,为每一个 ConcreteElement 声明一个 visit 操作 +- ConcreteVisitor:具体访问者,存储遍历过程中的累计结果 +- ObjectStructure:对象结构,可以是组合结构,或者是一个集合。 + +

+ +### Implementation + +```java +public interface Element { + void accept(Visitor visitor); +} +``` + +```java +class CustomerGroup { + + private List customers = new ArrayList<>(); + + void accept(Visitor visitor) { + for (Customer customer : customers) { + customer.accept(visitor); + } + } + + void addCustomer(Customer customer) { + customers.add(customer); + } +} +``` + +```java +public class Customer implements Element { + + private String name; + private List orders = new ArrayList<>(); + + Customer(String name) { + this.name = name; + } + + String getName() { + return name; + } + + void addOrder(Order order) { + orders.add(order); + } + + public void accept(Visitor visitor) { + visitor.visit(this); + for (Order order : orders) { + order.accept(visitor); + } + } +} +``` + +```java +public class Order implements Element { + + private String name; + private List items = new ArrayList(); + + Order(String name) { + this.name = name; + } + + Order(String name, String itemName) { + this.name = name; + this.addItem(new Item(itemName)); + } + + String getName() { + return name; + } + + void addItem(Item item) { + items.add(item); + } + + public void accept(Visitor visitor) { + visitor.visit(this); + + for (Item item : items) { + item.accept(visitor); + } + } +} +``` + +```java +public class Item implements Element { + + private String name; + + Item(String name) { + this.name = name; + } + + String getName() { + return name; + } + + public void accept(Visitor visitor) { + visitor.visit(this); + } +} +``` + +```java +public interface Visitor { + void visit(Customer customer); + + void visit(Order order); + + void visit(Item item); +} +``` + +```java +public class GeneralReport implements Visitor { + + private int customersNo; + private int ordersNo; + private int itemsNo; + + public void visit(Customer customer) { + System.out.println(customer.getName()); + customersNo++; + } + + public void visit(Order order) { + System.out.println(order.getName()); + ordersNo++; + } + + public void visit(Item item) { + System.out.println(item.getName()); + itemsNo++; + } + + public void displayResults() { + System.out.println("Number of customers: " + customersNo); + System.out.println("Number of orders: " + ordersNo); + System.out.println("Number of items: " + itemsNo); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Customer customer1 = new Customer("customer1"); + customer1.addOrder(new Order("order1", "item1")); + customer1.addOrder(new Order("order2", "item1")); + customer1.addOrder(new Order("order3", "item1")); + + Order order = new Order("order_a"); + order.addItem(new Item("item_a1")); + order.addItem(new Item("item_a2")); + order.addItem(new Item("item_a3")); + Customer customer2 = new Customer("customer2"); + customer2.addOrder(order); + + CustomerGroup customers = new CustomerGroup(); + customers.addCustomer(customer1); + customers.addCustomer(customer2); + + GeneralReport visitor = new GeneralReport(); + customers.accept(visitor); + visitor.displayResults(); + } +} +``` + +```html +customer1 +order1 +item1 +order2 +item1 +order3 +item1 +customer2 +order_a +item_a1 +item_a2 +item_a3 +Number of customers: 2 +Number of orders: 4 +Number of items: 6 +``` + +### JDK + +- javax.lang.model.element.Element and javax.lang.model.element.ElementVisitor +- javax.lang.model.type.TypeMirror and javax.lang.model.type.TypeVisitor + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + diff --git "a/other/designpattern/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" "b/other/designpattern/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" new file mode 100644 index 00000000..5c1ae961 --- /dev/null +++ "b/other/designpattern/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" @@ -0,0 +1,147 @@ +## 责任链(Chain Of Responsibility) + +### 介绍 + +顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 + +在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 + +### Intent + +使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。 + +### Class Diagram + +- Handler:定义处理请求的接口,并且实现后继链(successor) + +

+ +### Implementation + +```java +public abstract class Handler { + + protected Handler successor; + + + public Handler(Handler successor) { + this.successor = successor; + } + + + protected abstract void handleRequest(Request request); +} +``` + +```java +public class ConcreteHandler1 extends Handler { + + public ConcreteHandler1(Handler successor) { + super(successor); + } + + + @Override + protected void handleRequest(Request request) { + if (request.getType() == RequestType.TYPE1) { + System.out.println(request.getName() + " is handle by ConcreteHandler1"); + return; + } + if (successor != null) { + successor.handleRequest(request); + } + } +} +``` + +```java +public class ConcreteHandler2 extends Handler { + + public ConcreteHandler2(Handler successor) { + super(successor); + } + + + @Override + protected void handleRequest(Request request) { + if (request.getType() == RequestType.TYPE2) { + System.out.println(request.getName() + " is handle by ConcreteHandler2"); + return; + } + if (successor != null) { + successor.handleRequest(request); + } + } +} +``` + +```java +public class Request { + + private RequestType type; + private String name; + + + public Request(RequestType type, String name) { + this.type = type; + this.name = name; + } + + + public RequestType getType() { + return type; + } + + + public String getName() { + return name; + } +} + +``` + +```java +public enum RequestType { + TYPE1, TYPE2 +} +``` + +```java +public class Client { + + public static void main(String[] args) { + + Handler handler1 = new ConcreteHandler1(null); + Handler handler2 = new ConcreteHandler2(handler1); + + Request request1 = new Request(RequestType.TYPE1, "request1"); + handler2.handleRequest(request1); + + Request request2 = new Request(RequestType.TYPE2, "request2"); + handler2.handleRequest(request2); + } +} +``` + +```html +request1 is handle by ConcreteHandler1 +request2 is handle by ConcreteHandler2 +``` + +### JDK + +- [java.util.logging.Logger#log()](http://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html#log%28java.util.logging.Level,%20java.lang.String%29) +- [Apache Commons Chain](https://commons.apache.org/proper/commons-chain/index.html) +- [javax.servlet.Filter#doFilter()](http://docs.oracle.com/javaee/7/api/javax/servlet/Filter.html#doFilter-javax.servlet.ServletRequest-javax.servlet.ServletResponse-javax.servlet.FilterChain-) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + diff --git "a/other/designpattern/\350\277\255\344\273\243\345\231\250\346\250\241\345\274\217.md" "b/other/designpattern/\350\277\255\344\273\243\345\231\250\346\250\241\345\274\217.md" new file mode 100644 index 00000000..348b1653 --- /dev/null +++ "b/other/designpattern/\350\277\255\344\273\243\345\231\250\346\250\241\345\274\217.md" @@ -0,0 +1,104 @@ +## 迭代器(Iterator) + +### 介绍 + +迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 + +### Intent + +提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。 + +### Class Diagram + +- Aggregate 是聚合类,其中 createIterator() 方法可以产生一个 Iterator; +- Iterator 主要定义了 hasNext() 和 next() 方法; +- Client 组合了 Aggregate,为了迭代遍历 Aggregate,也需要组合 Iterator。 + +
image-20191130164425351

+ +### Implementation + +```java +public interface Aggregate { + Iterator createIterator(); +} +``` + +```java +public class ConcreteAggregate implements Aggregate { + + private Integer[] items; + + public ConcreteAggregate() { + items = new Integer[10]; + for (int i = 0; i < items.length; i++) { + items[i] = i; + } + } + + @Override + public Iterator createIterator() { + return new ConcreteIterator(items); + } +} +``` + +```java +public interface Iterator { + + Item next(); + + boolean hasNext(); +} +``` + +```java +public class ConcreteIterator implements Iterator { + + private Item[] items; + private int position = 0; + + public ConcreteIterator(Item[] items) { + this.items = items; + } + + @Override + public Object next() { + return items[position++]; + } + + @Override + public boolean hasNext() { + return position < items.length; + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + Aggregate aggregate = new ConcreteAggregate(); + Iterator iterator = aggregate.createIterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } +} +``` + +### JDK + +- [java.util.Iterator](http://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html) +- [java.util.Enumeration](http://docs.oracle.com/javase/8/docs/api/java/util/Enumeration.html) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/designpattern/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" "b/other/designpattern/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" new file mode 100644 index 00000000..60d91e16 --- /dev/null +++ "b/other/designpattern/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" @@ -0,0 +1,87 @@ +## 适配器(Adapter) + +### 介绍 + +适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 + +这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。 + +### Intent + +把一个类接口转换成另一个用户需要的接口。 + +

+ +### Class Diagram + +

+ +### Implementation + +鸭子(Duck)和火鸡(Turkey)拥有不同的叫声,Duck 的叫声调用 quack() 方法,而 Turkey 调用 gobble() 方法。 + +要求将 Turkey 的 gobble() 方法适配成 Duck 的 quack() 方法,从而让火鸡冒充鸭子! + +```java +public interface Duck { + void quack(); +} +``` + +```java +public interface Turkey { + void gobble(); +} +``` + +```java +public class WildTurkey implements Turkey { + @Override + public void gobble() { + System.out.println("gobble!"); + } +} +``` + +```java +public class TurkeyAdapter implements Duck { + Turkey turkey; + + public TurkeyAdapter(Turkey turkey) { + this.turkey = turkey; + } + + @Override + public void quack() { + turkey.gobble(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Turkey turkey = new WildTurkey(); + Duck duck = new TurkeyAdapter(turkey); + duck.quack(); + } +} +``` + +### JDK + +- [java.util.Arrays#asList()](http://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#asList%28T...%29) +- [java.util.Collections#list()](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#list-java.util.Enumeration-) +- [java.util.Collections#enumeration()](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#enumeration-java.util.Collection-) +- [javax.xml.bind.annotation.adapters.XMLAdapter](http://docs.oracle.com/javase/8/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html#marshal-BoundType-) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/other/linux/\344\270\200\346\226\207\350\257\273\346\207\202Linux.md" "b/other/linux/\344\270\200\346\226\207\350\257\273\346\207\202Linux.md" new file mode 100644 index 00000000..1422a5a3 --- /dev/null +++ "b/other/linux/\344\270\200\346\226\207\350\257\273\346\207\202Linux.md" @@ -0,0 +1,1264 @@ + +* [前言](#前言) +* [一、常用操作以及概念](#一常用操作以及概念) + * [快捷键](#快捷键) + * [求助](#求助) + * [关机](#关机) + * [PATH](#path) + * [sudo](#sudo) + * [包管理工具](#包管理工具) + * [发行版](#发行版) + * [VIM 三个模式](#vim-三个模式) + * [GNU](#gnu) + * [开源协议](#开源协议) +* [二、磁盘](#二磁盘) + * [磁盘接口](#磁盘接口) + * [磁盘的文件名](#磁盘的文件名) +* [三、分区](#三分区) + * [分区表](#分区表) + * [开机检测程序](#开机检测程序) +* [四、文件系统](#四文件系统) + * [分区与文件系统](#分区与文件系统) + * [组成](#组成) + * [文件读取](#文件读取) + * [磁盘碎片](#磁盘碎片) + * [block](#block) + * [inode](#inode) + * [目录](#目录) + * [日志](#日志) + * [挂载](#挂载) + * [目录配置](#目录配置) +* [五、文件](#五文件) + * [文件属性](#文件属性) + * [文件与目录的基本操作](#文件与目录的基本操作) + * [修改权限](#修改权限) + * [默认权限](#默认权限) + * [目录的权限](#目录的权限) + * [链接](#链接) + * [获取文件内容](#获取文件内容) + * [指令与文件搜索](#指令与文件搜索) +* [六、压缩与打包](#六压缩与打包) + * [压缩文件名](#压缩文件名) + * [压缩指令](#压缩指令) + * [打包](#打包) +* [七、Bash](#七bash) + * [特性](#特性) + * [变量操作](#变量操作) + * [指令搜索顺序](#指令搜索顺序) + * [数据流重定向](#数据流重定向) +* [八、管道指令](#八管道指令) + * [提取指令](#提取指令) + * [排序指令](#排序指令) + * [双向输出重定向](#双向输出重定向) + * [字符转换指令](#字符转换指令) + * [分区指令](#分区指令) +* [九、正则表达式](#九正则表达式) + * [grep](#grep) + * [printf](#printf) + * [awk](#awk) +* [十、进程管理](#十进程管理) + * [查看进程](#查看进程) + * [进程状态](#进程状态) + * [SIGCHLD](#sigchld) + * [wait()](#wait) + * [waitpid()](#waitpid) + * [孤儿进程](#孤儿进程) + * [僵尸进程](#僵尸进程) +* [参考资料](#参考资料) + + + +# 前言 + +为了便于理解,本文从常用操作和概念开始讲起。虽然已经尽量做到简化,但是涉及到的内容还是有点多。在面试中,Linux 知识点相对于网络和操作系统等知识点而言不是那么重要,只需要重点掌握一些原理和命令即可。为了方便大家准备面试,在此先将一些比较重要的知识点列出来: + +- 能简单使用 cat,grep,cut 等命令进行一些操作; +- 文件系统相关的原理,inode 和 block 等概念,数据恢复; +- 硬链接与软链接; +- 进程管理相关,僵尸进程与孤儿进程,SIGCHLD 。 + +# 一、常用操作以及概念 + +## 快捷键 + +- Tab:命令和文件名补全; +- Ctrl+C:中断正在运行的程序; +- Ctrl+D:结束键盘输入(End Of File,EOF) + +## 求助 + +### 1. --help + +指令的基本用法与选项介绍。 + +### 2. man + +man 是 manual 的缩写,将指令的具体信息显示出来。 + +当执行 `man date` 时,有 DATE(1) 出现,其中的数字代表指令的类型,常用的数字及其类型如下: + +| 代号 | 类型 | +| :--: | -- | +| 1 | 用户在 shell 环境中可以操作的指令或者可执行文件 | +| 5 | 配置文件 | +| 8 | 系统管理员可以使用的管理指令 | + +### 3. info + +info 与 man 类似,但是 info 将文档分成一个个页面,每个页面可以跳转。 + +### 4. doc + +/usr/share/doc 存放着软件的一整套说明文件。 + +## 关机 + +### 1. who + +在关机前需要先使用 who 命令查看有没有其它用户在线。 + +### 2. sync + +为了加快对磁盘文件的读写速度,位于内存中的文件数据不会立即同步到磁盘,因此关机之前需要先进行 sync 同步操作。 + +### 3. shutdown + +```html +# shutdown [-krhc] 时间 [信息] +-k : 不会关机,只是发送警告信息,通知所有在线的用户 +-r : 将系统的服务停掉后就重新启动 +-h : 将系统的服务停掉后就立即关机 +-c : 取消已经在进行的 shutdown +``` + +## PATH + +可以在环境变量 PATH 中声明可执行文件的路径,路径之间用 : 分隔。 + +```html +/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin +``` + +## sudo + +sudo 允许一般用户使用 root 可执行的命令,不过只有在 /etc/sudoers 配置文件中添加的用户才能使用该指令。 + +## 包管理工具 + +RPM 和 DPKG 为最常见的两类软件包管理工具: + +- RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成为许多 Linux 系统的既定软件标准。YUM 基于 RPM,具有依赖管理和软件升级功能。 +- 与 RPM 竞争的是基于 Debian 操作系统的 DEB 软件包管理工具 DPKG,全称为 Debian Package,功能方面与 RPM 相似。 + +## 发行版 + +Linux 发行版是 Linux 内核及各种应用软件的集成版本。 + +| 基于的包管理工具 | 商业发行版 | 社区发行版 | +| :--: | :--: | :--: | +| RPM | Red Hat | Fedora / CentOS | +| DPKG | Ubuntu | Debian | + +## VIM 三个模式 + +

+ + + +- 一般指令模式(Command mode):VIM 的默认模式,可以用于移动游标查看内容; +- 编辑模式(Insert mode):按下 "i" 等按键之后进入,可以对文本进行编辑; +- 指令列模式(Bottom-line mode):按下 ":" 按键之后进入,用于保存退出等操作。 + +在指令列模式下,有以下命令用于离开或者保存文件。 + +| 命令 | 作用 | +| :--: | :--: | +| :w | 写入磁盘| +| :w! | 当文件为只读时,强制写入磁盘。到底能不能写入,与用户对该文件的权限有关 | +| :q | 离开 | +| :q! | 强制离开不保存 | +| :wq | 写入磁盘后离开 | +| :wq!| 强制写入磁盘后离开 | + +## GNU + +GNU 计划,译为革奴计划,它的目标是创建一套完全自由的操作系统,称为 GNU,其内容软件完全以 GPL 方式发布。其中 GPL 全称为 GNU 通用公共许可协议(GNU General Public License),包含了以下内容: + +- 以任何目的运行此程序的自由; +- 再复制的自由; +- 改进此程序,并公开发布改进的自由。 + +## 开源协议 + +- [Choose an open source license](https://choosealicense.com/) +- [如何选择开源许可证?](http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html) + +# 二、磁盘 + +## 磁盘接口 + +### 1. IDE + +IDE(ATA)全称 Advanced Technology Attachment,接口速度最大为 133MB/s,因为并口线的抗干扰性太差,且排线占用空间较大,不利电脑内部散热,已逐渐被 SATA 所取代。 + +

+ +### 2. SATA + +SATA 全称 Serial ATA,也就是使用串口的 ATA 接口,抗干扰性强,且对数据线的长度要求比 ATA 低很多,支持热插拔等功能。SATA-II 的接口速度为 300MB/s,而 SATA-III 标准可达到 600MB/s 的传输速度。SATA 的数据线也比 ATA 的细得多,有利于机箱内的空气流通,整理线材也比较方便。 + +

+ +### 3. SCSI + +SCSI 全称是 Small Computer System Interface(小型机系统接口),SCSI 硬盘广为工作站以及个人电脑以及服务器所使用,因此会使用较为先进的技术,如碟片转速 15000rpm 的高转速,且传输时 CPU 占用率较低,但是单价也比相同容量的 ATA 及 SATA 硬盘更加昂贵。 + +

+ +### 4. SAS + +SAS(Serial Attached SCSI)是新一代的 SCSI 技术,和 SATA 硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到 6Gb/s。此外也通过缩小连接线改善系统内部空间等。 + +

+ +## 磁盘的文件名 + +Linux 中每个硬件都被当做一个文件,包括磁盘。磁盘以磁盘接口类型进行命名,常见磁盘的文件名如下: + +- IDE 磁盘:/dev/hd[a-d] +- SATA/SCSI/SAS 磁盘:/dev/sd[a-p] + +其中文件名后面的序号的确定与系统检测到磁盘的顺序有关,而与磁盘所插入的插槽位置无关。 + +# 三、分区 + +## 分区表 + +磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。 + +### 1. MBR + +MBR 中,第一个扇区最重要,里面有主要开机记录(Master boot record, MBR)及分区表(partition table),其中主要开机记录占 446 bytes,分区表占 64 bytes。 + +分区表只有 64 bytes,最多只能存储 4 个分区,这 4 个分区为主分区(Primary)和扩展分区(Extended)。其中扩展分区只有一个,它使用其它扇区来记录额外的分区表,因此通过扩展分区可以分出更多分区,这些分区称为逻辑分区。 + +Linux 也把分区当成文件,分区文件的命名方式为:磁盘文件名 + 编号,例如 /dev/sda1。注意,逻辑分区的编号从 5 开始。 + +### 2. GPT + +扇区是磁盘的最小存储单位,旧磁盘的扇区大小通常为 512 bytes,而最新的磁盘支持 4 k。GPT 为了兼容所有磁盘,在定义扇区上使用逻辑区块地址(Logical Block Address, LBA),LBA 默认大小为 512 bytes。 + +GPT 第 1 个区块记录了主要开机记录(MBR),紧接着是 33 个区块记录分区信息,并把最后的 33 个区块用于对分区信息进行备份。这 33 个区块第一个为 GPT 表头纪录,这个部份纪录了分区表本身的位置与大小和备份分区的位置,同时放置了分区表的校验码 (CRC32),操作系统可以根据这个校验码来判断 GPT 是否正确。若有错误,可以使用备份分区进行恢复。 + +GPT 没有扩展分区概念,都是主分区,每个 LBA 可以分 4 个分区,因此总共可以分 4 * 32 = 128 个分区。 + +MBR 不支持 2.2 TB 以上的硬盘,GPT 则最多支持到 233 TB = 8 ZB。 + +

+ +## 开机检测程序 + +### 1. BIOS + +BIOS(Basic Input/Output System,基本输入输出系统),它是一个固件(嵌入在硬件中的软件),BIOS 程序存放在断电后内容不会丢失的只读内存中。 + +

+ +BIOS 是开机的时候计算机执行的第一个程序,这个程序知道可以开机的磁盘,并读取磁盘第一个扇区的主要开机记录(MBR),由主要开机记录(MBR)执行其中的开机管理程序,这个开机管理程序会加载操作系统的核心文件。 + +主要开机记录(MBR)中的开机管理程序提供以下功能:选单、载入核心文件以及转交其它开机管理程序。转交这个功能可以用来实现多重引导,只需要将另一个操作系统的开机管理程序安装在其它分区的启动扇区上,在启动开机管理程序时,就可以通过选单选择启动当前的操作系统或者转交给其它开机管理程序从而启动另一个操作系统。 + +下图中,第一扇区的主要开机记录(MBR)中的开机管理程序提供了两个选单:M1、M2,M1 指向了 Windows 操作系统,而 M2 指向其它分区的启动扇区,里面包含了另外一个开机管理程序,提供了一个指向 Linux 的选单。 + +

+ +安装多重引导,最好先安装 Windows 再安装 Linux。因为安装 Windows 时会覆盖掉主要开机记录(MBR),而 Linux 可以选择将开机管理程序安装在主要开机记录(MBR)或者其它分区的启动扇区,并且可以设置开机管理程序的选单。 + +### 2. UEFI + +BIOS 不可以读取 GPT 分区表,而 UEFI 可以。 + +# 四、文件系统 + +## 分区与文件系统 + +对分区进行格式化是为了在分区上建立文件系统。一个分区通常只能格式化为一个文件系统,但是磁盘阵列等技术可以将一个分区格式化为多个文件系统。 + +## 组成 + +最主要的几个组成部分如下: + +- inode:一个文件占用一个 inode,记录文件的属性,同时记录此文件的内容所在的 block 编号; +- block:记录文件的内容,文件太大时,会占用多个 block。 + +除此之外还包括: + +- superblock:记录文件系统的整体信息,包括 inode 和 block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等; +- block bitmap:记录 block 是否被使用的位图。 + +

+ +## 文件读取 + +对于 Ext2 文件系统,当要读取一个文件的内容时,先在 inode 中查找文件内容所在的所有 block,然后把所有 block 的内容读出来。 + +

+ +而对于 FAT 文件系统,它没有 inode,每个 block 中存储着下一个 block 的编号。 + +

+ +## 磁盘碎片 + +指一个文件内容所在的 block 过于分散,导致磁盘磁头移动距离过大,从而降低磁盘读写性能。 + +## block + +在 Ext2 文件系统中所支持的 block 大小有 1K,2K 及 4K 三种,不同的大小限制了单个文件和文件系统的最大大小。 + +| 大小 | 1KB | 2KB | 4KB | +| :---: | :---: | :---: | :---: | +| 最大单一文件 | 16GB | 256GB | 2TB | +| 最大文件系统 | 2TB | 8TB | 16TB | + +一个 block 只能被一个文件所使用,未使用的部分直接浪费了。因此如果需要存储大量的小文件,那么最好选用比较小的 block。 + +## inode + +inode 具体包含以下信息: + +- 权限 (read/write/excute); +- 拥有者与群组 (owner/group); +- 容量; +- 建立或状态改变的时间 (ctime); +- 最近读取时间 (atime); +- 最近修改时间 (mtime); +- 定义文件特性的旗标 (flag),如 SetUID...; +- 该文件真正内容的指向 (pointer)。 + +inode 具有以下特点: + +- 每个 inode 大小均固定为 128 bytes (新的 ext4 与 xfs 可设定到 256 bytes); +- 每个文件都仅会占用一个 inode。 + +inode 中记录了文件内容所在的 block 编号,但是每个 block 非常小,一个大文件随便都需要几十万的 block。而一个 inode 大小有限,无法直接引用这么多 block 编号。因此引入了间接、双间接、三间接引用。间接引用让 inode 记录的引用 block 块记录引用信息。 + +

+ +## 目录 + +建立一个目录时,会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件名。 + +可以看到文件的 inode 本身不记录文件名,文件名记录在目录中,因此新增文件、删除文件、更改文件名这些操作与目录的写权限有关。 + +## 日志 + +如果突然断电,那么文件系统会发生错误,例如断电前只修改了 block bitmap,而还没有将数据真正写入 block 中。 + +ext3/ext4 文件系统引入了日志功能,可以利用日志来修复文件系统。 + +## 挂载 + +挂载利用目录作为文件系统的进入点,也就是说,进入目录之后就可以读取文件系统的数据。 + +## 目录配置 + +为了使不同 Linux 发行版本的目录结构保持一致性,Filesystem Hierarchy Standard (FHS) 规定了 Linux 的目录结构。最基础的三个目录如下: + +- / (root, 根目录) +- /usr (unix software resource):所有系统默认软件都会安装到这个目录; +- /var (variable):存放系统或程序运行过程中的数据文件。 + +

+ +# 五、文件 + +## 文件属性 + +用户分为三种:文件拥有者、群组以及其它人,对不同的用户有不同的文件权限。 + +使用 ls 查看一个文件时,会显示一个文件的信息,例如 `drwxr-xr-x 3 root root 17 May 6 00:14 .config`,对这个信息的解释如下: + +- drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段 +- 3:链接数 +- root:文件拥有者 +- root:所属群组 +- 17:文件大小 +- May 6 00:14:文件最后被修改的时间 +- .config:文件名 + +常见的文件类型及其含义有: + +- d:目录 +- -:文件 +- l:链接文件 + +9 位的文件权限字段中,每 3 个为一组,共 3 组,每一组分别代表对文件拥有者、所属群组以及其它人的文件权限。一组权限中的 3 位分别为 r、w、x 权限,表示可读、可写、可执行。 + +文件时间有以下三种: + +- modification time (mtime):文件的内容更新就会更新; +- status time (ctime):文件的状态(权限、属性)更新就会更新; +- access time (atime):读取文件时就会更新。 + +## 文件与目录的基本操作 + +### 1. ls + +列出文件或者目录的信息,目录的信息就是其中包含的文件。 + +```html +# ls [-aAdfFhilnrRSt] file|dir +-a :列出全部的文件 +-d :仅列出目录本身 +-l :以长数据串行列出,包含文件的属性与权限等等数据 +``` + +### 2. cd + +更换当前目录。 + +``` +cd [相对路径或绝对路径] +``` + +### 3. mkdir + +创建目录。 + +``` +# mkdir [-mp] 目录名称 +-m :配置目录权限 +-p :递归创建目录 +``` + +### 4. rmdir + +删除目录,目录必须为空。 + +```html +rmdir [-p] 目录名称 +-p :递归删除目录 +``` + +### 5. touch + +更新文件时间或者建立新文件。 + +```html +# touch [-acdmt] filename +-a : 更新 atime +-c : 更新 ctime,若该文件不存在则不建立新文件 +-m : 更新 mtime +-d : 后面可以接更新日期而不使用当前日期,也可以使用 --date="日期或时间" +-t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm] +``` + +### 6. cp + +复制文件。如果源文件有两个以上,则目的文件一定要是目录才行。 + +```html +cp [-adfilprsu] source destination +-a :相当于 -dr --preserve=all +-d :若来源文件为链接文件,则复制链接文件属性而非文件本身 +-i :若目标文件已经存在时,在覆盖前会先询问 +-p :连同文件的属性一起复制过去 +-r :递归复制 +-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制 +--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了 +``` + +### 7. rm + +删除文件。 + +```html +# rm [-fir] 文件或目录 +-r :递归删除 +``` + +### 8. mv + +移动文件。 + +```html +# mv [-fiu] source destination +# mv [options] source1 source2 source3 .... directory +-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 +``` + +## 修改权限 + +可以将一组权限用数字来表示,此时一组权限的 3 个位当做二进制数字的位,从左到右每个位的权值为 4、2、1,即每个权限对应的数字权值为 r : 4、w : 2、x : 1。 + +```html +# chmod [-R] xyz dirname/filename +``` + +示例:将 .bashrc 文件的权限修改为 -rwxr-xr--。 + +```html +# chmod 754 .bashrc +``` + +也可以使用符号来设定权限。 + +```html +# chmod [ugoa] [+-=] [rwx] dirname/filename +- u:拥有者 +- g:所属群组 +- o:其他人 +- a:所有人 +- +:添加权限 +- -:移除权限 +- =:设定权限 +``` + +示例:为 .bashrc 文件的所有用户添加写权限。 + +```html +# chmod a+w .bashrc +``` + +## 默认权限 + +- 文件默认权限:文件默认没有可执行权限,因此为 666,也就是 -rw-rw-rw- 。 +- 目录默认权限:目录必须要能够进入,也就是必须拥有可执行权限,因此为 777 ,也就是 drwxrwxrwx。 + +可以通过 umask 设置或者查看默认权限,通常以掩码的形式来表示,例如 002 表示其它用户的权限去除了一个 2 的权限,也就是写权限,因此建立新文件时默认的权限为 -rw-rw-r--。 + +## 目录的权限 + +文件名不是存储在一个文件的内容中,而是存储在一个文件所在的目录中。因此,拥有文件的 w 权限并不能对文件名进行修改。 + +目录存储文件列表,一个目录的权限也就是对其文件列表的权限。因此,目录的 r 权限表示可以读取文件列表;w 权限表示可以修改文件列表,具体来说,就是添加删除文件,对文件名进行修改;x 权限可以让该目录成为工作目录,x 权限是 r 和 w 权限的基础,如果不能使一个目录成为工作目录,也就没办法读取文件列表以及对文件列表进行修改了。 + +## 链接 + +

+ + +```html +# ln [-sf] source_filename dist_filename +-s :默认是实体链接,加 -s 为符号链接 +-f :如果目标文件存在时,先删除目标文件 +``` + +### 1. 实体链接 + +在目录下创建一个条目,记录着文件名与 inode 编号,这个 inode 就是源文件的 inode。 + +删除任意一个条目,文件还是存在,只要引用数量不为 0。 + +有以下限制:不能跨越文件系统、不能对目录进行链接。 + +```html +# ln /etc/crontab . +# ll -i /etc/crontab crontab +34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab +34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab +``` + +### 2. 符号链接 + +符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。 + +当源文件被删除了,链接文件就打不开了。 + +因为记录的是路径,所以可以为目录建立符号链接。 + +```html +# ll -i /etc/crontab /root/crontab2 +34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab +53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab +``` + +## 获取文件内容 + +### 1. cat + +取得文件内容。 + +```html +# cat [-AbEnTv] filename +-n :打印出行号,连同空白行也会有行号,-b 不会 +``` + +### 2. tac + +是 cat 的反向操作,从最后一行开始打印。 + +### 3. more + +和 cat 不同的是它可以一页一页查看文件内容,比较适合大文件的查看。 + +### 4. less + +和 more 类似,但是多了一个向前翻页的功能。 + +### 5. head + +取得文件前几行。 + +```html +# head [-n number] filename +-n :后面接数字,代表显示几行的意思 +``` + +### 6. tail + +是 head 的反向操作,只是取得是后几行。 + +### 7. od + +以字符或者十六进制的形式显示二进制文件。 + +## 指令与文件搜索 + +### 1. which + +指令搜索。 + +```html +# which [-a] command +-a :将所有指令列出,而不是只列第一个 +``` + +### 2. whereis + +文件搜索。速度比较快,因为它只搜索几个特定的目录。 + +```html +# whereis [-bmsu] dirname/filename +``` + +### 3. locate + +文件搜索。可以用关键字或者正则表达式进行搜索。 + +locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索,它存储在内存中,并且每天更新一次,所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。 + +```html +# locate [-ir] keyword +-r:正则表达式 +``` + +### 4. find + +文件搜索。可以使用文件的属性和权限进行搜索。 + +```html +# find [basedir] [option] +example: find . -name "shadow*" +``` + +**① 与时间有关的选项** + +```html +-mtime n :列出在 n 天前的那一天修改过内容的文件 +-mtime +n :列出在 n 天之前 (不含 n 天本身) 修改过内容的文件 +-mtime -n :列出在 n 天之内 (含 n 天本身) 修改过内容的文件 +-newer file : 列出比 file 更新的文件 +``` + ++4、4 和 -4 的指示的时间范围如下: + +

+ +**② 与文件拥有者和所属群组有关的选项** + +```html +-uid n +-gid n +-user name +-group name +-nouser :搜索拥有者不存在 /etc/passwd 的文件 +-nogroup:搜索所属群组不存在于 /etc/group 的文件 +``` + +**③ 与文件权限和名称有关的选项** + +```html +-name filename +-size [+-]SIZE:搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有:c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k +-type TYPE +-perm mode :搜索权限等于 mode 的文件 +-perm -mode :搜索权限包含 mode 的文件 +-perm /mode :搜索权限包含任一 mode 的文件 +``` + +# 六、压缩与打包 + +## 压缩文件名 + +Linux 底下有很多压缩文件名,常见的如下: + +| 扩展名 | 压缩程序 | +| -- | -- | +| \*.Z | compress | +|\*.zip | zip | +|\*.gz | gzip| +|\*.bz2 | bzip2 | +|\*.xz | xz | +|\*.tar | tar 程序打包的数据,没有经过压缩 | +|\*.tar.gz | tar 程序打包的文件,经过 gzip 的压缩 | +|\*.tar.bz2 | tar 程序打包的文件,经过 bzip2 的压缩 | +|\*.tar.xz | tar 程序打包的文件,经过 xz 的压缩 | + +## 压缩指令 + +### 1. gzip + +gzip 是 Linux 使用最广的压缩指令,可以解开 compress、zip 与 gzip 所压缩的文件。 + +经过 gzip 压缩过,源文件就不存在了。 + +有 9 个不同的压缩等级可以使用。 + +可以使用 zcat、zmore、zless 来读取压缩文件的内容。 + +```html +$ gzip [-cdtv#] filename +-c :将压缩的数据输出到屏幕上 +-d :解压缩 +-t :检验压缩文件是否出错 +-v :显示压缩比等信息 +-# : # 为数字的意思,代表压缩等级,数字越大压缩比越高,默认为 6 +``` + +### 2. bzip2 + +提供比 gzip 更高的压缩比。 + +查看命令:bzcat、bzmore、bzless、bzgrep。 + +```html +$ bzip2 [-cdkzv#] filename +-k :保留源文件 +``` + +### 3. xz + +提供比 bzip2 更佳的压缩比。 + +可以看到,gzip、bzip2、xz 的压缩比不断优化。不过要注意的是,压缩比越高,压缩的时间也越长。 + +查看命令:xzcat、xzmore、xzless、xzgrep。 + +```html +$ xz [-dtlkc#] filename +``` + +## 打包 + +压缩指令只能对一个文件进行压缩,而打包能够将多个文件打包成一个大文件。tar 不仅可以用于打包,也可以使用 gzip、bzip2、xz 将打包文件进行压缩。 + +```html +$ tar [-z|-j|-J] [cv] [-f 新建的 tar 文件] filename... ==打包压缩 +$ tar [-z|-j|-J] [tv] [-f 已有的 tar 文件] ==查看 +$ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录] ==解压缩 +-z :使用 zip; +-j :使用 bzip2; +-J :使用 xz; +-c :新建打包文件; +-t :查看打包文件里面有哪些文件; +-x :解打包或解压缩的功能; +-v :在压缩/解压缩的过程中,显示正在处理的文件名; +-f : filename:要处理的文件; +-C 目录 : 在特定目录解压缩。 +``` + +| 使用方式 | 命令 | +| :---: | --- | +| 打包压缩 | tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 | +| 查 看 | tar -jtv -f filename.tar.bz2 | +| 解压缩 | tar -jxv -f filename.tar.bz2 -C 要解压缩的目录 | + +# 七、Bash + +可以通过 Shell 请求内核提供服务,Bash 正是 Shell 的一种。 + +## 特性 + +- 命令历史:记录使用过的命令 +- 命令与文件补全:快捷键:tab +- 命名别名:例如 ll 是 ls -al 的别名 +- shell scripts +- 通配符:例如 ls -l /usr/bin/X\* 列出 /usr/bin 下面所有以 X 开头的文件 + +## 变量操作 + +对一个变量赋值直接使用 =。 + +对变量取用需要在变量前加上 \$ ,也可以用 \${} 的形式; + +输出变量使用 echo 命令。 + +```bash +$ x=abc +$ echo $x +$ echo ${x} +``` + +变量内容如果有空格,必须使用双引号或者单引号。 + +- 双引号内的特殊字符可以保留原本特性,例如 x="lang is \$LANG",则 x 的值为 lang is zh_TW.UTF-8; +- 单引号内的特殊字符就是特殊字符本身,例如 x='lang is \$LANG',则 x 的值为 lang is \$LANG。 + +可以使用 \`指令\` 或者 \$(指令) 的方式将指令的执行结果赋值给变量。例如 version=\$(uname -r),则 version 的值为 4.15.0-22-generic。 + +可以使用 export 命令将自定义变量转成环境变量,环境变量可以在子程序中使用,所谓子程序就是由当前 Bash 而产生的子 Bash。 + +Bash 的变量可以声明为数组和整数数字。注意数字类型没有浮点数。如果不进行声明,默认是字符串类型。变量的声明使用 declare 命令: + +```html +$ declare [-aixr] variable +-a : 定义为数组类型 +-i : 定义为整数类型 +-x : 定义为环境变量 +-r : 定义为 readonly 类型 +``` + +使用 [ ] 来对数组进行索引操作: + +```bash +$ array[1]=a +$ array[2]=b +$ echo ${array[1]} +``` + +## 指令搜索顺序 + +- 以绝对或相对路径来执行指令,例如 /bin/ls 或者 ./ls ; +- 由别名找到该指令来执行; +- 由 Bash 内置的指令来执行; +- 按 \$PATH 变量指定的搜索路径的顺序找到第一个指令来执行。 + +## 数据流重定向 + +重定向指的是使用文件代替标准输入、标准输出和标准错误输出。 + +| 1 | 代码 | 运算符 | +| :---: | :---: | :---:| +| 标准输入 (stdin) | 0 | < 或 << | +| 标准输出 (stdout) | 1 | > 或 >> | +| 标准错误输出 (stderr) | 2 | 2> 或 2>> | + +其中,有一个箭头的表示以覆盖的方式重定向,而有两个箭头的表示以追加的方式重定向。 + +可以将不需要的标准输出以及标准错误输出重定向到 /dev/null,相当于扔进垃圾箱。 + +如果需要将标准输出以及标准错误输出同时重定向到一个文件,需要将某个输出转换为另一个输出,例如 2>&1 表示将标准错误输出转换为标准输出。 + +```bash +$ find /home -name .bashrc > list 2>&1 +``` + +# 八、管道指令 + +管道是将一个命令的标准输出作为另一个命令的标准输入,在数据需要经过多个步骤的处理之后才能得到我们想要的内容时就可以使用管道。 + +在命令之间使用 | 分隔各个管道命令。 + +```bash +$ ls -al /etc | less +``` + +## 提取指令 + +cut 对数据进行切分,取出想要的部分。 + +切分过程一行一行地进行。 + +```html +$ cut +-d :分隔符 +-f :经过 -d 分隔后,使用 -f n 取出第 n 个区间 +-c :以字符为单位取出区间 +``` + +示例 1:last 显示登入者的信息,取出用户名。 + +```html +$ last +root pts/1 192.168.201.101 Sat Feb 7 12:35 still logged in +root pts/1 192.168.201.101 Fri Feb 6 12:13 - 18:46 (06:33) +root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 (01:16) + +$ last | cut -d ' ' -f 1 +``` + +示例 2:将 export 输出的信息,取出第 12 字符以后的所有字符串。 + +```html +$ export +declare -x HISTCONTROL="ignoredups" +declare -x HISTSIZE="1000" +declare -x HOME="/home/dmtsai" +declare -x HOSTNAME="study.centos.vbird" +.....(其他省略)..... + +$ export | cut -c 12- +``` + +## 排序指令 + +**sort** 用于排序。 + +```html +$ sort [-fbMnrtuk] [file or stdin] +-f :忽略大小写 +-b :忽略最前面的空格 +-M :以月份的名字来排序,例如 JAN,DEC +-n :使用数字 +-r :反向排序 +-u :相当于 unique,重复的内容只出现一次 +-t :分隔符,默认为 tab +-k :指定排序的区间 +``` + +示例:/etc/passwd 文件内容以 : 来分隔,要求以第三列进行排序。 + +```html +$ cat /etc/passwd | sort -t ':' -k 3 +root:x:0:0:root:/root:/bin/bash +dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash +alex:x:1001:1002::/home/alex:/bin/bash +arod:x:1002:1003::/home/arod:/bin/bash +``` + +**uniq** 可以将重复的数据只取一个。 + +```html +$ uniq [-ic] +-i :忽略大小写 +-c :进行计数 +``` + +示例:取得每个人的登录总次数 + +```html +$ last | cut -d ' ' -f 1 | sort | uniq -c +1 +6 (unknown +47 dmtsai +4 reboot +7 root +1 wtmp +``` + +## 双向输出重定向 + +输出重定向会将输出内容重定向到文件中,而 **tee** 不仅能够完成这个功能,还能保留屏幕上的输出。也就是说,使用 tee 指令,一个输出会同时传送到文件和屏幕上。 + +```html +$ tee [-a] file +``` + +## 字符转换指令 + +**tr** 用来删除一行中的字符,或者对字符进行替换。 + +```html +$ tr [-ds] SET1 ... +-d : 删除行中 SET1 这个字符串 +``` + +示例,将 last 输出的信息所有小写转换为大写。 + +```html +$ last | tr '[a-z]' '[A-Z]' +``` + + **col** 将 tab 字符转为空格字符。 + +```html +$ col [-xb] +-x : 将 tab 键转换成对等的空格键 +``` + +**expand** 将 tab 转换一定数量的空格,默认是 8 个。 + +```html +$ expand [-t] file +-t :tab 转为空格的数量 +``` + +**join** 将有相同数据的那一行合并在一起。 + +```html +$ join [-ti12] file1 file2 +-t :分隔符,默认为空格 +-i :忽略大小写的差异 +-1 :第一个文件所用的比较字段 +-2 :第二个文件所用的比较字段 +``` + +**paste** 直接将两行粘贴在一起。 + +```html +$ paste [-d] file1 file2 +-d :分隔符,默认为 tab +``` + +## 分区指令 + +**split** 将一个文件划分成多个文件。 + +```html +$ split [-bl] file PREFIX +-b :以大小来进行分区,可加单位,例如 b, k, m 等 +-l :以行数来进行分区。 +- PREFIX :分区文件的前导名称 +``` + +# 九、正则表达式 + +## grep + +g/re/p(globally search a regular expression and print),使用正则表示式进行全局查找并打印。 + +```html +$ grep [-acinv] [--color=auto] 搜寻字符串 filename +-c : 统计匹配到行的个数 +-i : 忽略大小写 +-n : 输出行号 +-v : 反向选择,也就是显示出没有 搜寻字符串 内容的那一行 +--color=auto :找到的关键字加颜色显示 +``` + +示例:把含有 the 字符串的行提取出来(注意默认会有 --color=auto 选项,因此以下内容在 Linux 中有颜色显示 the 字符串) + +```html +$ grep -n 'the' regular_express.txt +8:I can't finish the test. +12:the symbol '*' is represented as start. +15:You are the best is mean you are the no. 1. +16:The world Happy is the same with "glad". +18:google is the best tools for search keyword +``` + +示例:正则表达式 a{m,n} 用来匹配字符 a m\~n 次,这里需要将 { 和 } 进行转义,因为它们在 shell 是有特殊意义的。 + +```html +$ grep -n 'a\{2,5\}' regular_express.txt +``` + +## printf + +用于格式化输出。它不属于管道命令,在给 printf 传数据时需要使用 $( ) 形式。 + +```html +$ printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt) + DmTsai 80 60 92 77.33 + VBird 75 55 80 70.00 + Ken 60 90 70 73.33 +``` + +## awk + +是由 Alfred Aho,Peter Weinberger 和 Brian Kernighan 创造,awk 这个名字就是这三个创始人名字的首字母。 + +awk 每次处理一行,处理的最小单位是字段,每个字段的命名方式为:\$n,n 为字段号,从 1 开始,\$0 表示一整行。 + +示例:取出最近五个登录用户的用户名和 IP。首先用 last -n 5 取出用最近五个登录用户的所有信息,可以看到用户名和 IP 分别在第 1 列和第 3 列,我们用 \$1 和 \$3 就能取出这两个字段,然后用 print 进行打印。 + +```html +$ last -n 5 +dmtsai pts/0 192.168.1.100 Tue Jul 14 17:32 still logged in +dmtsai pts/0 192.168.1.100 Thu Jul 9 23:36 - 02:58 (03:22) +dmtsai pts/0 192.168.1.100 Thu Jul 9 17:23 - 23:36 (06:12) +dmtsai pts/0 192.168.1.100 Thu Jul 9 08:02 - 08:17 (00:14) +dmtsai tty1 Fri May 29 11:55 - 12:11 (00:15) +``` + +```html +$ last -n 5 | awk '{print $1 "\t" $3}' +``` + +可以根据字段的某些条件进行匹配,例如匹配字段小于某个值的那一行数据。 + +```html +$ awk '条件类型 1 {动作 1} 条件类型 2 {动作 2} ...' filename +``` + +示例:/etc/passwd 文件第三个字段为 UID,对 UID 小于 10 的数据进行处理。 + +```text +$ cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}' +root 0 +bin 1 +daemon 2 +``` + +awk 变量: + +| 变量名称 | 代表意义 | +| :--: | -- | +| NF | 每一行拥有的字段总数 | +| NR | 目前所处理的是第几行数据 | +| FS | 目前的分隔字符,默认是空格键 | + +示例:显示正在处理的行号以及每一行有多少字段 + +```html +$ last -n 5 | awk '{print $1 "\t lines: " NR "\t columns: " NF}' +dmtsai lines: 1 columns: 10 +dmtsai lines: 2 columns: 10 +dmtsai lines: 3 columns: 10 +dmtsai lines: 4 columns: 10 +dmtsai lines: 5 columns: 9 +``` + +# 十、进程管理 + +## 查看进程 + +### 1. ps + +查看某个时间点的进程信息。 + +示例:查看自己的进程 + +```sh +# ps -l +``` + +示例:查看系统所有进程 + +```sh +# ps aux +``` + +示例:查看特定的进程 + +```sh +# ps aux | grep threadx +``` + +### 2. pstree + +查看进程树。 + +示例:查看所有进程树 + +```sh +# pstree -A +``` + +### 3. top + +实时显示进程信息。 + +示例:两秒钟刷新一次 + +```sh +# top -d 2 +``` + +### 4. netstat + +查看占用端口的进程 + +示例:查看特定端口的进程 + +```sh +# netstat -anp | grep port +``` + +## 进程状态 + +| 状态 | 说明 | +| :---: | --- | +| R | running or runnable (on run queue)
正在执行或者可执行,此时进程位于执行队列中。| +| D | uninterruptible sleep (usually I/O)
不可中断阻塞,通常为 IO 阻塞。 | +| S | interruptible sleep (waiting for an event to complete)
可中断阻塞,此时进程正在等待某个事件完成。| +| Z | zombie (terminated but not reaped by its parent)
僵死,进程已经终止但是尚未被其父进程获取信息。| +| T | stopped (either by a job control signal or because it is being traced)
结束,进程既可以被作业控制信号结束,也可能是正在被追踪。| +
+ +

+ +## SIGCHLD + +当一个子进程改变了它的状态时(停止运行,继续运行或者退出),有两件事会发生在父进程中: + +- 得到 SIGCHLD 信号; +- waitpid() 或者 wait() 调用会返回。 + +其中子进程发送的 SIGCHLD 信号包含了子进程的信息,比如进程 ID、进程状态、进程使用 CPU 的时间等。 + +在子进程退出时,它的进程描述符不会立即释放,这是为了让父进程得到子进程信息,父进程通过 wait() 和 waitpid() 来获得一个已经退出的子进程的信息。 + +

+ +## wait() + +```c +pid_t wait(int *status) +``` + +父进程调用 wait() 会一直阻塞,直到收到一个子进程退出的 SIGCHLD 信号,之后 wait() 函数会销毁子进程并返回。 + +如果成功,返回被收集的子进程的进程 ID;如果调用进程没有子进程,调用就会失败,此时返回 -1,同时 errno 被置为 ECHILD。 + +参数 status 用来保存被收集的子进程退出时的一些状态,如果对这个子进程是如何死掉的毫不在意,只想把这个子进程消灭掉,可以设置这个参数为 NULL。 + +## waitpid() + +```c +pid_t waitpid(pid_t pid, int *status, int options) +``` + +作用和 wait() 完全相同,但是多了两个可由用户控制的参数 pid 和 options。 + +pid 参数指示一个子进程的 ID,表示只关心这个子进程退出的 SIGCHLD 信号。如果 pid=-1 时,那么和 wait() 作用相同,都是关心所有子进程退出的 SIGCHLD 信号。 + +options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 waitpid() 调用变成非阻塞的,也就是说它会立即返回,父进程可以继续执行其它任务。 + +## 孤儿进程 + +一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。 + +孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。 + +由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。 + +## 僵尸进程 + +一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。 + +僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。 + +系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。 + +要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。 + +# 参考资料 + +- 鸟哥. 鸟 哥 的 Linux 私 房 菜 基 础 篇 第 三 版[J]. 2009. +- [Linux 平台上的软件包管理](https://www.ibm.com/developerworks/cn/linux/l-cn-rpmdpkg/index.html) +- [Linux 之守护进程、僵死进程与孤儿进程](http://liubigbin.github.io/2016/03/11/Linux-%E4%B9%8B%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E3%80%81%E5%83%B5%E6%AD%BB%E8%BF%9B%E7%A8%8B%E4%B8%8E%E5%AD%A4%E5%84%BF%E8%BF%9B%E7%A8%8B/) +- [What is the difference between a symbolic link and a hard link?](https://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link) +- [Linux process states](https://idea.popcount.org/2012-12-11-linux-process-states/) +- [GUID Partition Table](https://en.wikipedia.org/wiki/GUID_Partition_Table) +- [详解 wait 和 waitpid 函数](https://blog.csdn.net/kevinhg/article/details/7001719) +- [IDE、SATA、SCSI、SAS、FC、SSD 硬盘类型介绍](https://blog.csdn.net/tianlesoftware/article/details/6009110) +- [Akai IB-301S SCSI Interface for S2800,S3000](http://www.mpchunter.com/s3000/akai-ib-301s-scsi-interface-for-s2800s3000/) +- [Parallel ATA](https://en.wikipedia.org/wiki/Parallel_ATA) +- [ADATA XPG SX900 256GB SATA 3 SSD Review – Expanded Capacity and SandForce Driven Speed](http://www.thessdreview.com/our-reviews/adata-xpg-sx900-256gb-sata-3-ssd-review-expanded-capacity-and-sandforce-driven-speed/4/) +- [Decoding UCS Invicta – Part 1](https://blogs.cisco.com/datacenter/decoding-ucs-invicta-part-1) +- [硬盘](https://zh.wikipedia.org/wiki/%E7%A1%AC%E7%9B%98) +- [Difference between SAS and SATA](http://www.differencebetween.info/difference-between-sas-and-sata) +- [BIOS](https://zh.wikipedia.org/wiki/BIOS) +- [File system design case studies](https://www.cs.rutgers.edu/\~pxk/416/notes/13-fs-studies.html) +- [Programming Project #4](https://classes.soe.ucsc.edu/cmps111/Fall08/proj4.shtml) +- [FILE SYSTEM DESIGN](http://web.cs.ucla.edu/classes/fall14/cs111/scribe/11a/index.html) + + + + + + + diff --git "a/other/mysql/21\345\210\206\351\222\237Mysql\345\210\235\345\255\246\350\200\205\346\225\231\347\250\213.docx" "b/other/mysql/21\345\210\206\351\222\237Mysql\345\210\235\345\255\246\350\200\205\346\225\231\347\250\213.docx" new file mode 100644 index 00000000..4072be60 Binary files /dev/null and "b/other/mysql/21\345\210\206\351\222\237Mysql\345\210\235\345\255\246\350\200\205\346\225\231\347\250\213.docx" differ diff --git "a/other/mysql/MySQL\347\264\242\345\274\225\350\203\214\345\220\216\347\232\204\346\225\260\346\215\256\347\273\223\346\236\204\345\217\212\347\256\227\346\263\225\345\216\237\347\220\206.pdf" "b/other/mysql/MySQL\347\264\242\345\274\225\350\203\214\345\220\216\347\232\204\346\225\260\346\215\256\347\273\223\346\236\204\345\217\212\347\256\227\346\263\225\345\216\237\347\220\206.pdf" new file mode 100644 index 00000000..64d28c89 Binary files /dev/null and "b/other/mysql/MySQL\347\264\242\345\274\225\350\203\214\345\220\216\347\232\204\346\225\260\346\215\256\347\273\223\346\236\204\345\217\212\347\256\227\346\263\225\345\216\237\347\220\206.pdf" differ diff --git "a/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \344\274\240\350\276\223\345\261\202.md" "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \344\274\240\350\276\223\345\261\202.md" new file mode 100644 index 00000000..fdd2de8a --- /dev/null +++ "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \344\274\240\350\276\223\345\261\202.md" @@ -0,0 +1,169 @@ + +* [UDP 和 TCP 的特点](#udp-和-tcp-的特点) +* [UDP 首部格式](#udp-首部格式) +* [TCP 首部格式](#tcp-首部格式) +* [TCP 的三次握手](#tcp-的三次握手) +* [TCP 的四次挥手](#tcp-的四次挥手) +* [TCP 可靠传输](#tcp-可靠传输) +* [TCP 滑动窗口](#tcp-滑动窗口) +* [TCP 流量控制](#tcp-流量控制) +* [TCP 拥塞控制](#tcp-拥塞控制) + * [1. 慢开始与拥塞避免](#1-慢开始与拥塞避免) + * [2. 快重传与快恢复](#2-快重传与快恢复) + + + +网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。 + +# UDP 和 TCP 的特点 + +- 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。 + +- 传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。 + +# UDP 首部格式 + +

+ +首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。 + +# TCP 首部格式 + +

+ +- **序号** :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。 + +- **确认号** :期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。 + +- **数据偏移** :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。 + +- **确认 ACK** :当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。 + +- **同步 SYN** :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。 + +- **终止 FIN** :用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。 + +- **窗口** :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。 + +# TCP 的三次握手 + +

+ +假设 A 为客户端,B 为服务器端。 + +- 首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。 + +- A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。 + +- B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。 + +- A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。 + +- B 收到 A 的确认后,连接建立。 + +**三次握手的原因** + +第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。 + +客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。 + +# TCP 的四次挥手 + +

+ +以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。 + +- A 发送连接释放报文,FIN=1。 + +- B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。 + +- 当 B 不再需要连接时,发送连接释放报文,FIN=1。 + +- A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。 + +- B 收到 A 的确认后释放连接。 + +**四次挥手的原因** + +客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。 + +**TIME_WAIT** + +客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由: + +- 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。 + +- 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。 + +# TCP 可靠传输 + +TCP 使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。 + +一个报文段从发送再到接收到确认所经过的时间称为往返时间 RTT,加权平均往返时间 RTTs 计算如下: + +

+其中,0 ≤ a < 1,RTTs 随着 a 的增加更容易受到 RTT 的影响。 + +超时时间 RTO 应该略大于 RTTs,TCP 使用的超时时间计算如下: + +

+其中 RTTd 为偏差的加权平均值。 + +# TCP 滑动窗口 + +窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。 + +发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。 + +接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。 + +

+ +# TCP 流量控制 + +流量控制是为了控制发送方发送速率,保证接收方来得及接收。 + +接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。 + +# TCP 拥塞控制 + +如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。 + +

+ +TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。 + +发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。 + +为了便于讨论,做如下假设: + +- 接收方有足够大的接收缓存,因此不会发生流量控制; +- 虽然 TCP 的窗口基于字节,但是这里设窗口的大小单位为报文段。 + +

+ +## 1. 慢开始与拥塞避免 + +发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 ... + +注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。 + +如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。 + +## 2. 快重传与快恢复 + +在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认。 + +在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。 + +在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。 + +慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。 + + + + + + + + diff --git "a/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \345\272\224\347\224\250\345\261\202.md" "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \345\272\224\347\224\250\345\261\202.md" new file mode 100644 index 00000000..213f43f8 --- /dev/null +++ "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \345\272\224\347\224\250\345\261\202.md" @@ -0,0 +1,173 @@ + +* [域名系统](#域名系统) +* [文件传送协议](#文件传送协议) +* [动态主机配置协议](#动态主机配置协议) +* [远程登录协议](#远程登录协议) +* [电子邮件协议](#电子邮件协议) + * [1. SMTP](#1-smtp) + * [2. POP3](#2-pop3) + * [3. IMAP](#3-imap) +* [常用端口](#常用端口) +* [Web 页面请求过程](#web-页面请求过程) + * [1. DHCP 配置主机信息](#1-dhcp-配置主机信息) + * [2. ARP 解析 MAC 地址](#2-arp-解析-mac-地址) + * [3. DNS 解析域名](#3-dns-解析域名) + * [4. HTTP 请求页面](#4-http-请求页面) + + + +# 域名系统 + +DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。 + +域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。 + +

+ +DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输: + +- 如果返回的响应超过的 512 字节(UDP 最大只支持 512 字节的数据)。 +- 区域传送(区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据)。 + +# 文件传送协议 + +FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件: + +- 控制连接:服务器打开端口号 21 等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答。 +- 数据连接:用来传送一个文件数据。 + +根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式: + +- 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0\~1023 是熟知端口号。 + +

+ +- 被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。 + +

+ +主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。 + +# 动态主机配置协议 + +DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息。 + +DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。 + +DHCP 工作过程如下: + +1. 客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。 +2. DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。 +3. 如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。 +4. DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。 + +

+ +# 远程登录协议 + +TELNET 用于登录到远程主机上,并且远程主机上的输出也会返回。 + +TELNET 可以适应许多计算机和操作系统的差异,例如不同操作系统系统的换行符定义。 + +# 电子邮件协议 + +一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件协议。 + +邮件协议包含发送协议和读取协议,发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。 + +

+ +## 1. SMTP + +SMTP 只能发送 ASCII 码,而互联网邮件扩充 MIME 可以发送二进制文件。MIME 并没有改动或者取代 SMTP,而是增加邮件主体的结构,定义了非 ASCII 码的编码规则。 + +

+ +## 2. POP3 + +POP3 的特点是只要用户从服务器上读取了邮件,就把该邮件删除。但最新版本的 POP3 可以不删除邮件。 + +## 3. IMAP + +IMAP 协议中客户端和服务器上的邮件保持同步,如果不手动删除邮件,那么服务器上的邮件也不会被删除。IMAP 这种做法可以让用户随时随地去访问服务器上的邮件。 + +# 常用端口 + +|应用| 应用层协议 | 端口号 | 传输层协议 | 备注 | +| :---: | :--: | :--: | :--: | :--: | +| 域名解析 | DNS | 53 | UDP/TCP | 长度超过 512 字节时使用 TCP | +| 动态主机配置协议 | DHCP | 67/68 | UDP | | +| 简单网络管理协议 | SNMP | 161/162 | UDP | | +| 文件传送协议 | FTP | 20/21 | TCP | 控制连接 21,数据连接 20 | +| 远程终端协议 | TELNET | 23 | TCP | | +| 超文本传送协议 | HTTP | 80 | TCP | | +| 简单邮件传送协议 | SMTP | 25 | TCP | | +| 邮件读取协议 | POP3 | 110 | TCP | | +| 网际报文存取协议 | IMAP | 143 | TCP | | + +# Web 页面请求过程 + +## 1. DHCP 配置主机信息 + +- 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。 + +- 主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口 68 的 UDP 报文段中。 + +- 该报文段则被放入在一个具有广播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 数据报中。 + +- 该数据报则被放置在 MAC 帧中,该帧具有目的地址 FF:FF:FF:FF:FF:FF,将广播到与交换机连接的所有设备。 + +- 连接在交换机的 DHCP 服务器收到广播帧之后,不断地向上分解得到 IP 数据报、UDP 报文段、DHCP 请求报文,之后生成 DHCP ACK 报文,该报文包含以下信息:IP 地址、DNS 服务器的 IP 地址、默认网关路由器的 IP 地址和子网掩码。该报文被放入 UDP 报文段中,UDP 报文段有被放入 IP 数据报中,最后放入 MAC 帧中。 + +- 该帧的目的地址是请求主机的 MAC 地址,因为交换机具有自学习能力,之前主机发送了广播帧之后就记录了 MAC 地址到其转发接口的交换表项,因此现在交换机就可以直接知道应该向哪个接口发送该帧。 + +- 主机收到该帧后,不断分解得到 DHCP 报文。之后就配置它的 IP 地址、子网掩码和 DNS 服务器的 IP 地址,并在其 IP 转发表中安装默认网关。 + +## 2. ARP 解析 MAC 地址 + +- 主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。 + +- 主机生成一个 DNS 查询报文,该报文具有 53 号端口,因为 DNS 服务器的端口号是 53。 + +- 该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中。 + +- 该 IP 数据报被放入一个以太网帧中,该帧将发送到网关路由器。 + +- DHCP 过程只知道网关路由器的 IP 地址,为了获取网关路由器的 MAC 地址,需要使用 ARP 协议。 + +- 主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文放入一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。 + +- 网关路由器接收到该帧后,不断向上分解得到 ARP 报文,发现其中的 IP 地址与其接口的 IP 地址匹配,因此就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。 + +## 3. DNS 解析域名 + +- 知道了网关路由器的 MAC 地址之后,就可以继续 DNS 的解析过程了。 + +- 网关路由器接收到包含 DNS 查询报文的以太网帧后,抽取出 IP 数据报,并根据转发表决定该 IP 数据报应该转发的路由器。 + +- 因为路由器具有内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,因此路由表中已经配置了网关路由器到达 DNS 服务器的路由表项。 + +- 到达 DNS 服务器之后,DNS 服务器抽取出 DNS 查询报文,并在 DNS 数据库中查找待解析的域名。 + +- 找到 DNS 记录之后,发送 DNS 回答报文,将该回答报文放入 UDP 报文段中,然后放入 IP 数据报中,通过路由器反向转发回网关路由器,并经过以太网交换机到达主机。 + +## 4. HTTP 请求页面 + +- 有了 HTTP 服务器的 IP 地址之后,主机就能够生成 TCP 套接字,该套接字将用于向 Web 服务器发送 HTTP GET 报文。 + +- 在生成 TCP 套接字之前,必须先与 HTTP 服务器进行三次握手来建立连接。生成一个具有目的端口 80 的 TCP SYN 报文段,并向 HTTP 服务器发送该报文段。 + +- HTTP 服务器收到该报文段之后,生成 TCP SYN ACK 报文段,发回给主机。 + +- 连接建立之后,浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。 + +- HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。 + +- 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。 + + + + + + + diff --git "a/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \346\246\202\350\277\260.md" "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \346\246\202\350\277\260.md" new file mode 100644 index 00000000..82aeffc0 --- /dev/null +++ "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \346\246\202\350\277\260.md" @@ -0,0 +1,139 @@ + +* [网络的网络](#网络的网络) +* [ISP](#isp) +* [主机之间的通信方式](#主机之间的通信方式) +* [电路交换与分组交换](#电路交换与分组交换) + * [1. 电路交换](#1-电路交换) + * [2. 分组交换](#2-分组交换) +* [时延](#时延) + * [1. 排队时延](#1-排队时延) + * [2. 处理时延](#2-处理时延) + * [3. 传输时延](#3-传输时延) + * [4. 传播时延](#4-传播时延) +* [计算机网络体系结构](#计算机网络体系结构) + * [1. 五层协议](#1-五层协议) + * [2. OSI](#2-osi) + * [3. TCP/IP](#3-tcpip) + * [4. 数据在各层之间的传递过程](#4-数据在各层之间的传递过程) + + + +# 网络的网络 + +网络把主机连接起来,而互连网(internet)是把多种不同的网络连接起来,因此互连网是网络的网络。而互联网(Internet)是全球范围的互连网。 + +

+ +# ISP + +互联网服务提供商 ISP 可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联网设备,个人或机构向 ISP 缴纳一定的费用就可以接入互联网。 + +

+ +目前的互联网是一种多层次 ISP 结构,ISP 根据覆盖面积的大小分为第一层 ISP、区域 ISP 和接入 ISP。互联网交换点 IXP 允许两个 ISP 直接相连而不用经过第三个 ISP。 + +

+ +# 主机之间的通信方式 + +- 客户-服务器(C/S):客户是服务的请求方,服务器是服务的提供方。 + +

+ +- 对等(P2P):不区分客户和服务器。 + +

+ +# 电路交换与分组交换 + +## 1. 电路交换 + +电路交换用于电话通信系统,两个用户要通信之前需要建立一条专用的物理链路,并且在整个通信过程中始终占用该链路。由于通信的过程中不可能一直在使用传输线路,因此电路交换对线路的利用率很低,往往不到 10%。 + +## 2. 分组交换 + +每个分组都有首部和尾部,包含了源地址和目的地址等控制信息,在同一个传输线路上同时传输多个分组互相不会影响,因此在同一条传输线路上允许同时传输多个分组,也就是说分组交换不需要占用传输线路。 + +在一个邮局通信系统中,邮局收到一份邮件之后,先存储下来,然后把相同目的地的邮件一起转发到下一个目的地,这个过程就是存储转发过程,分组交换也使用了存储转发过程。 + +# 时延 + +总时延 = 排队时延 + 处理时延 + 传输时延 + 传播时延 + +

+ +## 1. 排队时延 + +分组在路由器的输入队列和输出队列中排队等待的时间,取决于网络当前的通信量。 + +## 2. 处理时延 + +主机或路由器收到分组时进行处理所需要的时间,例如分析首部、从分组中提取数据、进行差错检验或查找适当的路由等。 + +## 3. 传输时延 + +主机或路由器传输数据帧所需要的时间。 + + + +

+ + +其中 l 表示数据帧的长度,v 表示传输速率。 + +## 4. 传播时延 + +电磁波在信道中传播所需要花费的时间,电磁波传播的速度接近光速。 + + + +

+ +其中 l 表示信道长度,v 表示电磁波在信道上的传播速度。 + +# 计算机网络体系结构 + +

+ +## 1. 五层协议 + +- **应用层** :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。 + +- **传输层** :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。 + +- **网络层** :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。 + +- **数据链路层** :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。 + +- **物理层** :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。 + +## 2. OSI + +其中表示层和会话层用途如下: + +- **表示层** :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。 + +- **会话层** :建立及管理会话。 + +五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理。 + +## 3. TCP/IP + +它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。 + +TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者网络接口层。 + +

+ +## 4. 数据在各层之间的传递过程 + +在向下的过程中,需要添加下层协议所需要的首部或者尾部,而在向上的过程中不断拆开首部和尾部。 + +路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。 + + + + + + + diff --git "a/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\211\251\347\220\206\345\261\202.md" "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\211\251\347\220\206\345\261\202.md" new file mode 100644 index 00000000..7c6b8a16 --- /dev/null +++ "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\211\251\347\220\206\345\261\202.md" @@ -0,0 +1,26 @@ + +* [通信方式](#通信方式) +* [带通调制](#带通调制) + + + +# 通信方式 + +根据信息在传输线上的传送方向,分为以下三种通信方式: + +- 单工通信:单向传输 +- 半双工通信:双向交替传输 +- 全双工通信:双向同时传输 + +# 带通调制 + +模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。 + + + + + + + + + diff --git "a/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\275\221\347\273\234\345\261\202.md" "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\275\221\347\273\234\345\261\202.md" new file mode 100644 index 00000000..36685f17 --- /dev/null +++ "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\275\221\347\273\234\345\261\202.md" @@ -0,0 +1,248 @@ + +* [概述](#概述) +* [IP 数据报格式](#ip-数据报格式) +* [IP 地址编址方式](#ip-地址编址方式) + * [1. 分类](#1-分类) + * [2. 子网划分](#2-子网划分) + * [3. 无分类](#3-无分类) +* [地址解析协议 ARP](#地址解析协议-arp) +* [网际控制报文协议 ICMP](#网际控制报文协议-icmp) + * [1. Ping](#1-ping) + * [2. Traceroute](#2-traceroute) +* [虚拟专用网 VPN](#虚拟专用网-vpn) +* [网络地址转换 NAT](#网络地址转换-nat) +* [路由器的结构](#路由器的结构) +* [路由器分组转发流程](#路由器分组转发流程) +* [路由选择协议](#路由选择协议) + * [1. 内部网关协议 RIP](#1-内部网关协议-rip) + * [2. 内部网关协议 OSPF](#2-内部网关协议-ospf) + * [3. 外部网关协议 BGP](#3-外部网关协议-bgp) + + + +# 概述 + +因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。 + +使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。 + +

+ +与 IP 协议配套使用的还有三个协议: + +- 地址解析协议 ARP(Address Resolution Protocol) +- 网际控制报文协议 ICMP(Internet Control Message Protocol) +- 网际组管理协议 IGMP(Internet Group Management Protocol) + +# IP 数据报格式 + +

+ +- **版本** : 有 4(IPv4)和 6(IPv6)两个值; + +- **首部长度** : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为固定部分长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。 + +- **区分服务** : 用来获得更好的服务,一般情况下不使用。 + +- **总长度** : 包括首部长度和数据部分长度。 + +- **生存时间** :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。 + +- **协议** :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。 + +- **首部检验和** :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。 + +- **标识** : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。 + +- **片偏移** : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。 + +

+ +# IP 地址编址方式 + +IP 地址的编址方式经历了三个历史阶段: + +- 分类 +- 子网划分 +- 无分类 + +## 1. 分类 + +由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。 + +IP 地址 ::= {< 网络号 >, < 主机号 >} + +

+ +## 2. 子网划分 + +通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。 + +IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >} + +要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。 + +注意,外部网络看不到子网的存在。 + +## 3. 无分类 + +无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。 + +IP 地址 ::= {< 网络前缀号 >, < 主机号 >} + +CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。 + +CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。 + +一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 **构成超网** 。 + +在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。 + +# 地址解析协议 ARP + +网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。 + +

+ +ARP 实现由 IP 地址得到 MAC 地址。 + +

+ +每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。 + +如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。 + +

+ +# 网际控制报文协议 ICMP + +ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。 + +

+ +ICMP 报文分为差错报告报文和询问报文。 + +

+ +## 1. Ping + +Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。 + +Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。 + +## 2. Traceroute + +Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。 + +Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。 + +- 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文; +- 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。 +- 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。 +- 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。 + +# 虚拟专用网 VPN + +由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。 + +有三个专用地址块: + +- 10.0.0.0 \~ 10.255.255.255 +- 172.16.0.0 \~ 172.31.255.255 +- 192.168.0.0 \~ 192.168.255.255 + +VPN 使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指好像是,而实际上并不是,它有经过公用的互联网。 + +下图中,场所 A 和 B 的通信经过互联网,如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信,IP 数据报的源地址是 10.1.0.1,目的地址是 10.2.0.3。数据报先发送到与互联网相连的路由器 R1,R1 对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为 10.2.0.3,就交付给 Y。 + +

+ +# 网络地址转换 NAT + +专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。 + +在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。 + +

+ +# 路由器的结构 + +路由器从功能上可以划分为:路由选择和分组转发。 + +分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。 + +

+ +# 路由器分组转发流程 + +- 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。 +- 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付; +- 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器; +- 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器; +- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器; +- 报告转发分组出错。 + +

+ +# 路由选择协议 + +路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。 + +互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。 + +可以把路由选择协议划分为两大类: + +- 自治系统内部的路由选择:RIP 和 OSPF +- 自治系统间的路由选择:BGP + +## 1. 内部网关协议 RIP + +RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。 + +RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。 + +距离向量算法: + +- 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1; +- 对修改后的 RIP 报文中的每一个项目,进行以下步骤: + - 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中; + - 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。 +- 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。 + +RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。 + +## 2. 内部网关协议 OSPF + +开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。 + +开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。 + +OSPF 具有以下特点: + +- 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。 +- 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。 +- 只有当链路状态发生变化时,路由器才会发送信息。 + +所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。 + +## 3. 外部网关协议 BGP + +BGP(Border Gateway Protocol,边界网关协议) + +AS 之间的路由选择很困难,主要是由于: + +- 互联网规模很大; +- 各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量; +- AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。 + +BGP 只能寻找一条比较好的路由,而不是最佳路由。 + +每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。 + + + + + + + + diff --git "a/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \351\223\276\350\267\257\345\261\202.md" "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \351\223\276\350\267\257\345\261\202.md" new file mode 100644 index 00000000..e7831ceb --- /dev/null +++ "b/other/netword/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \351\223\276\350\267\257\345\261\202.md" @@ -0,0 +1,202 @@ + +* [基本问题](#基本问题) + * [1. 封装成帧](#1-封装成帧) + * [2. 透明传输](#2-透明传输) + * [3. 差错检测](#3-差错检测) +* [信道分类](#信道分类) + * [1. 广播信道](#1-广播信道) + * [2. 点对点信道](#2-点对点信道) +* [信道复用技术](#信道复用技术) + * [1. 频分复用](#1-频分复用) + * [2. 时分复用](#2-时分复用) + * [3. 统计时分复用](#3-统计时分复用) + * [4. 波分复用](#4-波分复用) + * [5. 码分复用](#5-码分复用) +* [CSMA/CD 协议](#csmacd-协议) +* [PPP 协议](#ppp-协议) +* [MAC 地址](#mac-地址) +* [局域网](#局域网) +* [以太网](#以太网) +* [交换机](#交换机) +* [虚拟局域网](#虚拟局域网) + + + +# 基本问题 + +## 1. 封装成帧 + +将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。 + +

+ +## 2. 透明传输 + +透明表示一个实际存在的事物看起来好像不存在一样。 + +帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定。需要在数据部分出现首部尾部相同的内容前面插入转义字符。如果数据部分出现转义字符,那么就在转义字符前面再加个转义字符。在接收端进行处理之后可以还原出原始数据。这个过程透明传输的内容是转义字符,用户察觉不到转义字符的存在。 + +

+ +## 3. 差错检测 + +目前数据链路层广泛使用了循环冗余检验(CRC)来检查比特差错。 + +# 信道分类 + +## 1. 广播信道 + +一对多通信,一个节点发送的数据能够被广播信道上所有的节点接收到。 + +所有的节点都在同一个广播信道上发送数据,因此需要有专门的控制方法进行协调,避免发生冲突(冲突也叫碰撞)。 + +主要有两种控制方法进行协调,一个是使用信道复用技术,一是使用 CSMA/CD 协议。 + +## 2. 点对点信道 + +一对一通信。 + +因为不会发生碰撞,因此也比较简单,使用 PPP 协议进行控制。 + +# 信道复用技术 + +## 1. 频分复用 + +频分复用的所有主机在相同的时间占用不同的频率带宽资源。 + +

+ +## 2. 时分复用 + +时分复用的所有主机在不同的时间占用相同的频率带宽资源。 + +

+ +使用频分复用和时分复用进行通信,在通信的过程中主机会一直占用一部分信道资源。但是由于计算机数据的突发性质,通信过程没必要一直占用信道资源而不让出给其它用户使用,因此这两种方式对信道的利用率都不高。 + +## 3. 统计时分复用 + +是对时分复用的一种改进,不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。 + +

+ +## 4. 波分复用 + +光的频分复用。由于光的频率很高,因此习惯上用波长而不是频率来表示所使用的光载波。 + +## 5. 码分复用 + +为每个用户分配 m bit 的码片,并且所有的码片正交,对于任意两个码片 有 + + + +

+ +为了讨论方便,取 m=8,设码片 为 00011011。在拥有该码片的用户发送比特 1 时就发送该码片,发送比特 0 时就发送该码片的反码 11100100。 + +在计算时将 00011011 记作 (-1 -1 -1 +1 +1 -1 +1 +1),可以得到 + + + + + +

+ +

+ +其中 的反码。 + +利用上面的式子我们知道,当接收端使用码片 对接收到的数据进行内积运算时,结果为 0 的是其它用户发送的数据,结果为 1 的是用户发送的比特 1,结果为 -1 的是用户发送的比特 0。 + +码分复用需要发送的数据量为原先的 m 倍。 + +

+ + +# CSMA/CD 协议 + +CSMA/CD 表示载波监听多点接入 / 碰撞检测。 + +- **多点接入** :说明这是总线型网络,许多主机以多点的方式连接到总线上。 +- **载波监听** :每个主机都必须不停地监听信道。在发送前,如果监听到信道正在使用,就必须等待。 +- **碰撞检测** :在发送中,如果监听到信道已有其它主机正在发送数据,就表示发生了碰撞。虽然每个主机在发送数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞。 + +记端到端的传播时延为 τ,最先发送的站点最多经过 2τ 就可以知道是否发生了碰撞,称 2τ 为 **争用期** 。只有经过争用期之后还没有检测到碰撞,才能肯定这次发送不会发生碰撞。 + +当发生碰撞时,站点要停止发送,等待一段时间再发送。这个时间采用 **截断二进制指数退避算法** 来确定。从离散的整数集合 {0, 1, .., (2k-1)} 中随机取出一个数,记作 r,然后取 r 倍的争用期作为重传等待时间。 + +

+ +# PPP 协议 + +互联网用户通常需要连接到某个 ISP 之后才能接入到互联网,PPP 协议是用户计算机和 ISP 进行通信时所使用的数据链路层协议。 + +

+ +PPP 的帧格式: + +- F 字段为帧的定界符 +- A 和 C 字段暂时没有意义 +- FCS 字段是使用 CRC 的检验序列 +- 信息部分的长度不超过 1500 + +

+ +# MAC 地址 + +MAC 地址是链路层地址,长度为 6 字节(48 位),用于唯一标识网络适配器(网卡)。 + +一台主机拥有多少个网络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个 MAC 地址。 + +# 局域网 + +局域网是一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限。 + +主要有以太网、令牌环网、FDDI 和 ATM 等局域网技术,目前以太网占领着有线局域网市场。 + +可以按照网络拓扑结构对局域网进行分类: + +

+ +# 以太网 + +以太网是一种星型拓扑结构局域网。 + +早期使用集线器进行连接,集线器是一种物理层设备, 作用于比特而不是帧,当一个比特到达接口时,集线器重新生成这个比特,并将其能量强度放大,从而扩大网络的传输距离,之后再将这个比特发送到其它所有接口。如果集线器同时收到两个不同接口的帧,那么就发生了碰撞。 + +目前以太网使用交换机替代了集线器,交换机是一种链路层设备,它不会发生碰撞,能根据 MAC 地址进行存储转发。 + +以太网帧格式: + +- **类型** :标记上层使用的协议; +- **数据** :长度在 46-1500 之间,如果太小则需要填充; +- **FCS** :帧检验序列,使用的是 CRC 检验方法; + +

+ +# 交换机 + +交换机具有自学习能力,学习的是交换表的内容,交换表中存储着 MAC 地址到接口的映射。 + +正是由于这种自学习能力,因此交换机是一种即插即用设备,不需要网络管理员手动配置交换表内容。 + +下图中,交换机有 4 个接口,主机 A 向主机 B 发送数据帧时,交换机把主机 A 到接口 1 的映射写入交换表中。为了发送数据帧到 B,先查交换表,此时没有主机 B 的表项,那么主机 A 就发送广播帧,主机 C 和主机 D 会丢弃该帧,主机 B 回应该帧向主机 A 发送数据包时,交换机查找交换表得到主机 A 映射的接口为 1,就发送数据帧到接口 1,同时交换机添加主机 B 到接口 2 的映射。 + +

+ +# 虚拟局域网 + +虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。 + +例如下图中 (A1, A2, A3, A4) 属于一个虚拟局域网,A1 发送的广播会被 A2、A3、A4 收到,而其它站点收不到。 + +使用 VLAN 干线连接来建立虚拟局域网,每台交换机上的一个特殊接口被设置为干线接口,以互连 VLAN 交换机。IEEE 定义了一种扩展的以太网帧格式 802.1Q,它在标准以太网帧上加进了 4 字节首部 VLAN 标签,用于表示该帧属于哪一个虚拟局域网。 + + + + + + + + + diff --git "a/other/os/\345\206\205\345\255\230\347\256\241\347\220\206.md" "b/other/os/\345\206\205\345\255\230\347\256\241\347\220\206.md" new file mode 100644 index 00000000..b0518efd --- /dev/null +++ "b/other/os/\345\206\205\345\255\230\347\256\241\347\220\206.md" @@ -0,0 +1,144 @@ + +* [虚拟内存](#虚拟内存) +* [分页系统地址映射](#分页系统地址映射) +* [页面置换算法](#页面置换算法) + * [1. 最佳](#1-最佳) + * [2. 最近最久未使用](#2-最近最久未使用) + * [3. 最近未使用](#3-最近未使用) + * [4. 先进先出](#4-先进先出) + * [5. 第二次机会算法](#5-第二次机会算法) + * [6. 时钟](#6-时钟) +* [分段](#分段) +* [段页式](#段页式) +* [分页与分段的比较](#分页与分段的比较) + + + +# 虚拟内存 + +虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。 + +为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。 + +从上面的描述中可以看出,虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行,这使得有限的内存运行大程序成为可能。例如有一台计算机可以产生 16 位地址,那么一个程序的地址空间范围是 0\~64K。该计算机只有 32KB 的物理内存,虚拟内存技术允许该计算机运行一个 64K 大小的程序。 + +

+ +# 分页系统地址映射 + +内存管理单元(MMU)管理着地址空间和物理内存的转换,其中的页表(Page table)存储着页(程序地址空间)和页框(物理内存空间)的映射表。 + +一个虚拟地址分成两个部分,一部分存储页面号,一部分存储偏移量。 + +下图的页表存放着 16 个页,这 16 个页需要用 4 个比特位来进行索引定位。例如对于虚拟地址(0010 000000000100),前 4 位是存储页面号 2,读取表项内容为(110 1),页表项最后一位表示是否存在于内存中,1 表示存在。后 12 位存储偏移量。这个页对应的页框的地址为 (110 000000000100)。 + +

+ +# 页面置换算法 + +在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。 + +页面置换算法和缓存淘汰策略类似,可以将内存看成磁盘的缓存。在缓存系统中,缓存的大小有限,当有新的缓存到达时,需要淘汰一部分已经存在的缓存,这样才有空间存放新的缓存数据。 + +页面置换算法的主要目标是使页面置换频率最低(也可以说缺页率最低)。 + +## 1. 最佳 + +> OPT, Optimal replacement algorithm + +所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。 + +是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。 + +举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列: + +```html +7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 +``` + +开始运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。 + +## 2. 最近最久未使用 + +> LRU, Least Recently Used + +虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。 + +为了实现 LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的。 + +因为每次访问都需要更新链表,因此这种方式实现的 LRU 代价很高。 + +```html +4,7,0,7,1,0,1,2,1,2,6 +``` + +

+## 3. 最近未使用 + +> NRU, Not Recently Used + +每个页面都有两个状态位:R 与 M,当页面被访问时设置页面的 R=1,当页面被修改时设置 M=1。其中 R 位会定时被清零。可以将页面分成以下四类: + +- R=0,M=0 +- R=0,M=1 +- R=1,M=0 +- R=1,M=1 + +当发生缺页中断时,NRU 算法随机地从类编号最小的非空类中挑选一个页面将它换出。 + +NRU 优先换出已经被修改的脏页面(R=0,M=1),而不是被频繁使用的干净页面(R=1,M=0)。 + +## 4. 先进先出 + +> FIFO, First In First Out + +选择换出的页面是最先进入的页面。 + +该算法会将那些经常被访问的页面换出,导致缺页率升高。 + +## 5. 第二次机会算法 + +FIFO 算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改: + +当页面被访问 (读或写) 时设置该页面的 R 位为 1。需要替换的时候,检查最老页面的 R 位。如果 R 位是 0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是 1,就将 R 位清 0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索。 + +

+ +## 6. 时钟 + +> Clock + +第二次机会算法需要在链表中移动页面,降低了效率。时钟算法使用环形链表将页面连接起来,再使用一个指针指向最老的页面。 + +

+ +# 分段 + +虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,每一页再与内存进行映射。 + +下图为一个编译器在编译过程中建立的多个表,有 4 个表是动态增长的,如果使用分页系统的一维地址空间,动态增长的特点会导致覆盖问题的出现。 + +

+ +分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长。 + +

+ +# 段页式 + +程序的地址空间划分成多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。 + +# 分页与分段的比较 + +- 对程序员的透明性:分页透明,但是分段需要程序员显式划分每个段。 + +- 地址空间的维度:分页是一维地址空间,分段是二维的。 + +- 大小是否可以改变:页的大小不可变,段的大小可以动态改变。 + +- 出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。 + + + + + diff --git "a/other/os/\346\255\273\351\224\201.md" "b/other/os/\346\255\273\351\224\201.md" new file mode 100644 index 00000000..1346f087 --- /dev/null +++ "b/other/os/\346\255\273\351\224\201.md" @@ -0,0 +1,149 @@ + +* [必要条件](#必要条件) +* [处理方法](#处理方法) +* [鸵鸟策略](#鸵鸟策略) +* [死锁检测与死锁恢复](#死锁检测与死锁恢复) + * [1. 每种类型一个资源的死锁检测](#1-每种类型一个资源的死锁检测) + * [2. 每种类型多个资源的死锁检测](#2-每种类型多个资源的死锁检测) + * [3. 死锁恢复](#3-死锁恢复) +* [死锁预防](#死锁预防) + * [1. 破坏互斥条件](#1-破坏互斥条件) + * [2. 破坏占有和等待条件](#2-破坏占有和等待条件) + * [3. 破坏不可抢占条件](#3-破坏不可抢占条件) + * [4. 破坏环路等待](#4-破坏环路等待) +* [死锁避免](#死锁避免) + * [1. 安全状态](#1-安全状态) + * [2. 单个资源的银行家算法](#2-单个资源的银行家算法) + * [3. 多个资源的银行家算法](#3-多个资源的银行家算法) + + + +# 必要条件 + +

+ +- 互斥:每个资源要么已经分配给了一个进程,要么就是可用的。 +- 占有和等待:已经得到了某个资源的进程可以再请求新的资源。 +- 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。 +- 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。 + +# 处理方法 + +主要有以下四种方法: + +- 鸵鸟策略 +- 死锁检测与死锁恢复 +- 死锁预防 +- 死锁避免 + +# 鸵鸟策略 + +把头埋在沙子里,假装根本没发生问题。 + +因为解决死锁问题的代价很高,因此鸵鸟策略这种不采取任务措施的方案会获得更高的性能。 + +当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。 + +大多数操作系统,包括 Unix,Linux 和 Windows,处理死锁问题的办法仅仅是忽略它。 + +# 死锁检测与死锁恢复 + +不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。 + +## 1. 每种类型一个资源的死锁检测 + +

+ +上图为资源分配图,其中方框表示资源,圆圈表示进程。资源指向进程表示该资源已经分配给该进程,进程指向资源表示进程请求获取该资源。 + +图 a 可以抽取出环,如图 b,它满足了环路等待条件,因此会发生死锁。 + +每种类型一个资源的死锁检测算法是通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。 + +## 2. 每种类型多个资源的死锁检测 + +

+ +上图中,有三个进程四个资源,每个数据代表的含义如下: + +- E 向量:资源总量 +- A 向量:资源剩余量 +- C 矩阵:每个进程所拥有的资源数量,每一行都代表一个进程拥有资源的数量 +- R 矩阵:每个进程请求的资源数量 + +进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,让 P3 执行,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。P2 可以执行,执行后释放 P2 拥有的资源,A = (4 2 2 1) 。P1 也可以执行。所有进程都可以顺利执行,没有死锁。 + +算法总结如下: + +每个进程最开始时都不被标记,执行过程有可能被标记。当算法结束时,任何没有被标记的进程都是死锁进程。 + +1. 寻找一个没有标记的进程 Pi,它所请求的资源小于等于 A。 +2. 如果找到了这样一个进程,那么将 C 矩阵的第 i 行向量加到 A 中,标记该进程,并转回 1。 +3. 如果没有这样一个进程,算法终止。 + +## 3. 死锁恢复 + +- 利用抢占恢复 +- 利用回滚恢复 +- 通过杀死进程恢复 + +# 死锁预防 + +在程序运行之前预防发生死锁。 + +## 1. 破坏互斥条件 + +例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。 + +## 2. 破坏占有和等待条件 + +一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。 + +## 3. 破坏不可抢占条件 + +## 4. 破坏环路等待 + +给资源统一编号,进程只能按编号顺序来请求资源。 + +# 死锁避免 + +在程序运行时避免发生死锁。 + +## 1. 安全状态 + +

+ +图 a 的第二列 Has 表示已拥有的资源数,第三列 Max 表示总共需要的资源数,Free 表示还有可以使用的资源数。从图 a 开始出发,先让 B 拥有所需的所有资源(图 b),运行结束后释放 B,此时 Free 变为 5(图 c);接着以同样的方式运行 C 和 A,使得所有进程都能成功运行,因此可以称图 a 所示的状态时安全的。 + +定义:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。 + +安全状态的检测与死锁的检测类似,因为安全状态必须要求不能发生死锁。下面的银行家算法与死锁检测算法非常类似,可以结合着做参考对比。 + +## 2. 单个资源的银行家算法 + +一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。 + +

+ +上图 c 为不安全状态,因此算法会拒绝之前的请求,从而避免进入图 c 中的状态。 + +## 3. 多个资源的银行家算法 + +

+ +上图中有五个进程,四个资源。左边的图表示已经分配的资源,右边的图表示还需要分配的资源。最右边的 E、P 以及 A 分别表示:总资源、已分配资源以及可用资源,注意这三个为向量,而不是具体数值,例如 A=(1020),表示 4 个资源分别还剩下 1/0/2/0。 + +检查一个状态是否安全的算法如下: + +- 查找右边的矩阵是否存在一行小于等于向量 A。如果不存在这样的行,那么系统将会发生死锁,状态是不安全的。 +- 假若找到这样一行,将该进程标记为终止,并将其已分配资源加到 A 中。 +- 重复以上两步,直到所有进程都标记为终止,则状态时安全的。 + +如果一个状态不是安全的,需要拒绝进入这个状态。 + + + + + + + diff --git "a/other/os/\347\243\201\347\233\230\350\260\203\345\272\246.md" "b/other/os/\347\243\201\347\233\230\350\260\203\345\272\246.md" new file mode 100644 index 00000000..6a91822b --- /dev/null +++ "b/other/os/\347\243\201\347\233\230\350\260\203\345\272\246.md" @@ -0,0 +1,65 @@ + +* [磁盘结构](#磁盘结构) +* [磁盘调度算法](#磁盘调度算法) + * [1. 先来先服务](#1-先来先服务) + * [2. 最短寻道时间优先](#2-最短寻道时间优先) + * [3. 电梯算法](#3-电梯算法) + + + +# 磁盘结构 + +- 盘面(Platter):一个磁盘有多个盘面; +- 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道; +- 扇区(Track Sector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理储存单位,目前主要有 512 bytes 与 4 K 两种大小; +- 磁头(Head):与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写); +- 制动手臂(Actuator arm):用于在磁道之间移动磁头; +- 主轴(Spindle):使整个盘面转动。 + +

+ +# 磁盘调度算法 + +读写一个磁盘块的时间的影响因素有: + +- 旋转时间(主轴转动盘面,使得磁头移动到适当的扇区上) +- 寻道时间(制动手臂移动,使得磁头移动到适当的磁道上) +- 实际的数据传输时间 + +其中,寻道时间最长,因此磁盘调度的主要目标是使磁盘的平均寻道时间最短。 + +## 1. 先来先服务 + +> FCFS, First Come First Served + +按照磁盘请求的顺序进行调度。 + +优点是公平和简单。缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。 + +## 2. 最短寻道时间优先 + +> SSTF, Shortest Seek Time First + +优先调度与当前磁头所在磁道距离最近的磁道。 + +虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。具体来说,两端的磁道请求更容易出现饥饿现象。 + +

+ +## 3. 电梯算法 + +> SCAN + +电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。 + +电梯算法(扫描算法)和电梯的运行过程类似,总是按一个方向来进行磁盘调度,直到该方向上没有未完成的磁盘请求,然后改变方向。 + +因为考虑了移动方向,因此所有的磁盘请求都会被满足,解决了 SSTF 的饥饿问题。 + + + + + + + + diff --git "a/other/os/\350\277\233\347\250\213\347\256\241\347\220\206.md" "b/other/os/\350\277\233\347\250\213\347\256\241\347\220\206.md" new file mode 100644 index 00000000..60d4951c --- /dev/null +++ "b/other/os/\350\277\233\347\250\213\347\256\241\347\220\206.md" @@ -0,0 +1,601 @@ + +* [进程与线程](#进程与线程) + * [1. 进程](#1-进程) + * [2. 线程](#2-线程) + * [3. 区别](#3-区别) +* [进程状态的切换](#进程状态的切换) +* [进程调度算法](#进程调度算法) + * [1. 批处理系统](#1-批处理系统) + * [2. 交互式系统](#2-交互式系统) + * [3. 实时系统](#3-实时系统) +* [进程同步](#进程同步) + * [1. 临界区](#1-临界区) + * [2. 同步与互斥](#2-同步与互斥) + * [3. 信号量](#3-信号量) + * [4. 管程](#4-管程) +* [经典同步问题](#经典同步问题) + * [1. 哲学家进餐问题](#1-哲学家进餐问题) + * [2. 读者-写者问题](#2-读者-写者问题) +* [进程通信](#进程通信) + * [1. 管道](#1-管道) + * [2. FIFO](#2-fifo) + * [3. 消息队列](#3-消息队列) + * [4. 信号量](#4-信号量) + * [5. 共享存储](#5-共享存储) + * [6. 套接字](#6-套接字) + + + +# 进程与线程 + +## 1. 进程 + +进程是资源分配的基本单位。 + +进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。 + +下图显示了 4 个程序创建了 4 个进程,这 4 个进程可以并发地执行。 + +

+ +## 2. 线程 + +线程是独立调度的基本单位。 + +一个进程中可以有多个线程,它们共享进程资源。 + +QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。 + +

+ +## 3. 区别 + +Ⅰ 拥有资源 + +进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。 + +Ⅱ 调度 + +线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。 + +Ⅲ 系统开销 + +由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。 + +Ⅳ 通信方面 + +线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。 + +# 进程状态的切换 + +

+ +- 就绪状态(ready):等待被调度 +- 运行状态(running) +- 阻塞状态(waiting):等待资源 + +应该注意以下内容: + +- 只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。 +- 阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU 时间,缺少 CPU 时间会从运行态转换为就绪态。 + +# 进程调度算法 + +不同环境的调度算法目标不同,因此需要针对不同环境来讨论调度算法。 + +## 1. 批处理系统 + +批处理系统没有太多的用户操作,在该系统中,调度算法目标是保证吞吐量和周转时间(从提交到终止的时间)。 + +**1.1 先来先服务 first-come first-serverd(FCFS)** + +非抢占式的调度算法,按照请求的顺序进行调度。 + +有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。 + +**1.2 短作业优先 shortest job first(SJF)** + +非抢占式的调度算法,按估计运行时间最短的顺序进行调度。 + +长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业到来,那么长作业永远得不到调度。 + +**1.3 最短剩余时间优先 shortest remaining time next(SRTN)** + +最短作业优先的抢占式版本,按剩余运行时间的顺序进行调度。 当一个新的作业到达时,其整个运行时间与当前进程的剩余时间作比较。如果新的进程需要的时间更少,则挂起当前进程,运行新的进程。否则新的进程等待。 + +## 2. 交互式系统 + +交互式系统有大量的用户交互操作,在该系统中调度算法的目标是快速地进行响应。 + +**2.1 时间片轮转** + +将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。 + +时间片轮转算法的效率和时间片的大小有很大关系: + +- 因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。 +- 而如果时间片过长,那么实时性就不能得到保证。 + +

+ +**2.2 优先级调度** + +为每个进程分配一个优先级,按优先级进行调度。 + +为了防止低优先级的进程永远等不到调度,可以随着时间的推移增加等待进程的优先级。 + +**2.3 多级反馈队列** + +一个进程需要执行 100 个时间片,如果采用时间片轮转调度算法,那么需要交换 100 次。 + +多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同,例如 1,2,4,8,..。进程在第一个队列没执行完,就会被移到下一个队列。这种方式下,之前的进程只需要交换 7 次。 + +每个队列优先权也不同,最上面的优先权最高。因此只有上一个队列没有进程在排队,才能调度当前队列上的进程。 + +可以将这种调度算法看成是时间片轮转调度算法和优先级调度算法的结合。 + +

+ +## 3. 实时系统 + +实时系统要求一个请求在一个确定时间内得到响应。 + +分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时。 + +# 进程同步 + +## 1. 临界区 + +对临界资源进行访问的那段代码称为临界区。 + +为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查。 + +```html +// entry section +// critical section; +// exit section +``` + +## 2. 同步与互斥 + +- 同步:多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系。 +- 互斥:多个进程在同一时刻只有一个进程能进入临界区。 + +## 3. 信号量 + +信号量(Semaphore)是一个整型变量,可以对其执行 down 和 up 操作,也就是常见的 P 和 V 操作。 + +- **down** : 如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0,进程睡眠,等待信号量大于 0; +- **up** :对信号量执行 +1 操作,唤醒睡眠的进程让其完成 down 操作。 + +down 和 up 操作需要被设计成原语,不可分割,通常的做法是在执行这些操作的时候屏蔽中断。 + +如果信号量的取值只能为 0 或者 1,那么就成为了 **互斥量(Mutex)** ,0 表示临界区已经加锁,1 表示临界区解锁。 + +```c +typedef int semaphore; +semaphore mutex = 1; +void P1() { + down(&mutex); + // 临界区 + up(&mutex); +} + +void P2() { + down(&mutex); + // 临界区 + up(&mutex); +} +``` + + **使用信号量实现生产者-消费者问题**
+ +问题描述:使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品。 + +因为缓冲区属于临界资源,因此需要使用一个互斥量 mutex 来控制对缓冲区的互斥访问。 + +为了同步生产者和消费者的行为,需要记录缓冲区中物品的数量。数量可以使用信号量来进行统计,这里需要使用两个信号量:empty 记录空缓冲区的数量,full 记录满缓冲区的数量。其中,empty 信号量是在生产者进程中使用,当 empty 不为 0 时,生产者才可以放入物品;full 信号量是在消费者进程中使用,当 full 信号量不为 0 时,消费者才可以取走物品。 + +注意,不能先对缓冲区进行加锁,再测试信号量。也就是说,不能先执行 down(mutex) 再执行 down(empty)。如果这么做了,那么可能会出现这种情况:生产者对缓冲区加锁后,执行 down(empty) 操作,发现 empty = 0,此时生产者睡眠。消费者不能进入临界区,因为生产者对缓冲区加锁了,消费者就无法执行 up(empty) 操作,empty 永远都为 0,导致生产者永远等待下,不会释放锁,消费者因此也会永远等待下去。 + +```c +#define N 100 +typedef int semaphore; +semaphore mutex = 1; +semaphore empty = N; +semaphore full = 0; + +void producer() { + while(TRUE) { + int item = produce_item(); + down(&empty); + down(&mutex); + insert_item(item); + up(&mutex); + up(&full); + } +} + +void consumer() { + while(TRUE) { + down(&full); + down(&mutex); + int item = remove_item(); + consume_item(item); + up(&mutex); + up(&empty); + } +} +``` + +## 4. 管程 + +使用信号量机制实现的生产者消费者问题需要客户端代码做很多控制,而管程把控制的代码独立出来,不仅不容易出错,也使得客户端代码调用更容易。 + +c 语言不支持管程,下面的示例代码使用了类 Pascal 语言来描述管程。示例代码的管程提供了 insert() 和 remove() 方法,客户端代码通过调用这两个方法来解决生产者-消费者问题。 + +```pascal +monitor ProducerConsumer + integer i; + condition c; + + procedure insert(); + begin + // ... + end; + + procedure remove(); + begin + // ... + end; +end monitor; +``` + +管程有一个重要特性:在一个时刻只能有一个进程使用管程。进程在无法继续执行的时候不能一直占用管程,否则其它进程永远不能使用管程。 + +管程引入了 **条件变量** 以及相关的操作:**wait()** 和 **signal()** 来实现同步操作。对条件变量执行 wait() 操作会导致调用进程阻塞,把管程让出来给另一个进程持有。signal() 操作用于唤醒被阻塞的进程。 + + **使用管程实现生产者-消费者问题**
+ +```pascal +// 管程 +monitor ProducerConsumer + condition full, empty; + integer count := 0; + condition c; + + procedure insert(item: integer); + begin + if count = N then wait(full); + insert_item(item); + count := count + 1; + if count = 1 then signal(empty); + end; + + function remove: integer; + begin + if count = 0 then wait(empty); + remove = remove_item; + count := count - 1; + if count = N -1 then signal(full); + end; +end monitor; + +// 生产者客户端 +procedure producer +begin + while true do + begin + item = produce_item; + ProducerConsumer.insert(item); + end +end; + +// 消费者客户端 +procedure consumer +begin + while true do + begin + item = ProducerConsumer.remove; + consume_item(item); + end +end; +``` + +# 经典同步问题 + +生产者和消费者问题前面已经讨论过了。 + +## 1. 哲学家进餐问题 + +

+ +五个哲学家围着一张圆桌,每个哲学家面前放着食物。哲学家的生活有两种交替活动:吃饭以及思考。当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子。 + +下面是一种错误的解法,如果所有哲学家同时拿起左手边的筷子,那么所有哲学家都在等待其它哲学家吃完并释放自己手中的筷子,导致死锁。 + +```c +#define N 5 + +void philosopher(int i) { + while(TRUE) { + think(); + take(i); // 拿起左边的筷子 + take((i+1)%N); // 拿起右边的筷子 + eat(); + put(i); + put((i+1)%N); + } +} +``` + +为了防止死锁的发生,可以设置两个条件: + +- 必须同时拿起左右两根筷子; +- 只有在两个邻居都没有进餐的情况下才允许进餐。 + +```c +#define N 5 +#define LEFT (i + N - 1) % N // 左邻居 +#define RIGHT (i + 1) % N // 右邻居 +#define THINKING 0 +#define HUNGRY 1 +#define EATING 2 +typedef int semaphore; +int state[N]; // 跟踪每个哲学家的状态 +semaphore mutex = 1; // 临界区的互斥,临界区是 state 数组,对其修改需要互斥 +semaphore s[N]; // 每个哲学家一个信号量 + +void philosopher(int i) { + while(TRUE) { + think(i); + take_two(i); + eat(i); + put_two(i); + } +} + +void take_two(int i) { + down(&mutex); + state[i] = HUNGRY; + check(i); + up(&mutex); + down(&s[i]); // 只有收到通知之后才可以开始吃,否则会一直等下去 +} + +void put_two(i) { + down(&mutex); + state[i] = THINKING; + check(LEFT); // 尝试通知左右邻居,自己吃完了,你们可以开始吃了 + check(RIGHT); + up(&mutex); +} + +void eat(int i) { + down(&mutex); + state[i] = EATING; + up(&mutex); +} + +// 检查两个邻居是否都没有用餐,如果是的话,就 up(&s[i]),使得 down(&s[i]) 能够得到通知并继续执行 +void check(i) { + if(state[i] == HUNGRY && state[LEFT] != EATING && state[RIGHT] !=EATING) { + state[i] = EATING; + up(&s[i]); + } +} +``` + +## 2. 读者-写者问题 + +允许多个进程同时对数据进行读操作,但是不允许读和写以及写和写操作同时发生。 + +一个整型变量 count 记录在对数据进行读操作的进程数量,一个互斥量 count_mutex 用于对 count 加锁,一个互斥量 data_mutex 用于对读写的数据加锁。 + +```c +typedef int semaphore; +semaphore count_mutex = 1; +semaphore data_mutex = 1; +int count = 0; + +void reader() { + while(TRUE) { + down(&count_mutex); + count++; + if(count == 1) down(&data_mutex); // 第一个读者需要对数据进行加锁,防止写进程访问 + up(&count_mutex); + read(); + down(&count_mutex); + count--; + if(count == 0) up(&data_mutex); + up(&count_mutex); + } +} + +void writer() { + while(TRUE) { + down(&data_mutex); + write(); + up(&data_mutex); + } +} +``` + +以下内容由 [@Bandi Yugandhar](https://github.com/yugandharbandi) 提供。 + +The first case may result Writer to starve. This case favous Writers i.e no writer, once added to the queue, shall be kept waiting longer than absolutely necessary(only when there are readers that entered the queue before the writer). + +```c +int readcount, writecount; //(initial value = 0) +semaphore rmutex, wmutex, readLock, resource; //(initial value = 1) + +//READER +void reader() { + + down(&readLock); // reader is trying to enter + down(&rmutex); // lock to increase readcount + readcount++; + if (readcount == 1) + down(&resource); //if you are the first reader then lock the resource + up(&rmutex); //release for other readers + up(&readLock); //Done with trying to access the resource + + +//reading is performed + + + down(&rmutex); //reserve exit section - avoids race condition with readers + readcount--; //indicate you're leaving + if (readcount == 0) //checks if you are last reader leaving + up(&resource); //if last, you must release the locked resource + up(&rmutex); //release exit section for other readers +} + +//WRITER +void writer() { + + down(&wmutex); //reserve entry section for writers - avoids race conditions + writecount++; //report yourself as a writer entering + if (writecount == 1) //checks if you're first writer + down(&readLock); //if you're first, then you must lock the readers out. Prevent them from trying to enter CS + up(&wmutex); //release entry section + + + down(&resource); //reserve the resource for yourself - prevents other writers from simultaneously editing the shared resource + //writing is performed + up(&resource); //release file + + + down(&wmutex); //reserve exit section + writecount--; //indicate you're leaving + if (writecount == 0) //checks if you're the last writer + up(&readLock); //if you're last writer, you must unlock the readers. Allows them to try enter CS for reading + up(&wmutex); //release exit section +} +``` + +We can observe that every reader is forced to acquire ReadLock. On the otherhand, writers doesn’t need to lock individually. Once the first writer locks the ReadLock, it will be released only when there is no writer left in the queue. + +From the both cases we observed that either reader or writer has to starve. Below solutionadds the constraint that no thread shall be allowed to starve; that is, the operation of obtaining a lock on the shared data will always terminate in a bounded amount of time. + +```source-c +int readCount; // init to 0; number of readers currently accessing resource + +// all semaphores initialised to 1 +Semaphore resourceAccess; // controls access (read/write) to the resource +Semaphore readCountAccess; // for syncing changes to shared variable readCount +Semaphore serviceQueue; // FAIRNESS: preserves ordering of requests (signaling must be FIFO) + +void writer() +{ + down(&serviceQueue); // wait in line to be servicexs + // + down(&resourceAccess); // request exclusive access to resource + // + up(&serviceQueue); // let next in line be serviced + + // + writeResource(); // writing is performed + // + + // + up(&resourceAccess); // release resource access for next reader/writer + // +} + +void reader() +{ + down(&serviceQueue); // wait in line to be serviced + down(&readCountAccess); // request exclusive access to readCount + // + if (readCount == 0) // if there are no readers already reading: + down(&resourceAccess); // request resource access for readers (writers blocked) + readCount++; // update count of active readers + // + up(&serviceQueue); // let next in line be serviced + up(&readCountAccess); // release access to readCount + + // + readResource(); // reading is performed + // + + down(&readCountAccess); // request exclusive access to readCount + // + readCount--; // update count of active readers + if (readCount == 0) // if there are no readers left: + up(&resourceAccess); // release resource access for all + // + up(&readCountAccess); // release access to readCount +} + +``` + +# 进程通信 + +进程同步与进程通信很容易混淆,它们的区别在于: + +- 进程同步:控制多个进程按一定顺序执行; +- 进程通信:进程间传输信息。 + +进程通信是一种手段,而进程同步是一种目的。也可以说,为了能够达到进程同步的目的,需要让进程进行通信,传输一些进程同步所需要的信息。 + +## 1. 管道 + +管道是通过调用 pipe 函数创建的,fd[0] 用于读,fd[1] 用于写。 + +```c +#include +int pipe(int fd[2]); +``` + +它具有以下限制: + +- 只支持半双工通信(单向交替传输); +- 只能在父子进程或者兄弟进程中使用。 + +

+ +## 2. FIFO + +也称为命名管道,去除了管道只能在父子进程中使用的限制。 + +```c +#include +int mkfifo(const char *path, mode_t mode); +int mkfifoat(int fd, const char *path, mode_t mode); +``` + +FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户进程和服务器进程之间传递数据。 + +

+ +## 3. 消息队列 + +相比于 FIFO,消息队列具有以下优点: + +- 消息队列可以独立于读写进程存在,从而避免了 FIFO 中同步管道的打开和关闭时可能产生的困难; +- 避免了 FIFO 的同步阻塞问题,不需要进程自己提供同步方法; +- 读进程可以根据消息类型有选择地接收消息,而不像 FIFO 那样只能默认地接收。 + +## 4. 信号量 + +它是一个计数器,用于为多个进程提供对共享数据对象的访问。 + +## 5. 共享存储 + +允许多个进程共享一个给定的存储区。因为数据不需要在进程之间复制,所以这是最快的一种 IPC。 + +需要使用信号量用来同步对共享存储的访问。 + +多个进程可以将同一个文件映射到它们的地址空间从而实现共享内存。另外 XSI 共享内存不是使用文件,而是使用内存的匿名段。 + +## 6. 套接字 + +与其它通信机制不同的是,它可用于不同机器间的进程通信。 + + + + + + + diff --git "a/other/os/\351\241\265\351\235\242\347\275\256\346\215\242\347\256\227\346\263\225.md" "b/other/os/\351\241\265\351\235\242\347\275\256\346\215\242\347\256\227\346\263\225.md" new file mode 100644 index 00000000..e0c6a7ac --- /dev/null +++ "b/other/os/\351\241\265\351\235\242\347\275\256\346\215\242\347\256\227\346\263\225.md" @@ -0,0 +1,129 @@ + +* [基本特征](#基本特征) + * [1. 并发](#1-并发) + * [2. 共享](#2-共享) + * [3. 虚拟](#3-虚拟) + * [4. 异步](#4-异步) +* [基本功能](#基本功能) + * [1. 进程管理](#1-进程管理) + * [2. 内存管理](#2-内存管理) + * [3. 文件管理](#3-文件管理) + * [4. 设备管理](#4-设备管理) +* [系统调用](#系统调用) +* [大内核和微内核](#大内核和微内核) + * [1. 大内核](#1-大内核) + * [2. 微内核](#2-微内核) +* [中断分类](#中断分类) + * [1. 外中断](#1-外中断) + * [2. 异常](#2-异常) + * [3. 陷入](#3-陷入) + + + +# 基本特征 + +## 1. 并发 + +并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。 + +并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。 + +操作系统通过引入进程和线程,使得程序能够并发运行。 + +## 2. 共享 + +共享是指系统中的资源可以被多个并发进程共同使用。 + +有两种共享方式:互斥共享和同时共享。 + +互斥共享的资源称为临界资源,例如打印机等,在同一时刻只允许一个进程访问,需要用同步机制来实现互斥访问。 + +## 3. 虚拟 + +虚拟技术把一个物理实体转换为多个逻辑实体。 + +主要有两种虚拟技术:时(时间)分复用技术和空(空间)分复用技术。 + +多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占用处理器,每次只执行一小个时间片并快速切换。 + +虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。 + +## 4. 异步 + +异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。 + +# 基本功能 + +## 1. 进程管理 + +进程控制、进程同步、进程通信、死锁处理、处理机调度等。 + +## 2. 内存管理 + +内存分配、地址映射、内存保护与共享、虚拟内存等。 + +## 3. 文件管理 + +文件存储空间的管理、目录管理、文件读写管理和保护等。 + +## 4. 设备管理 + +完成用户的 I/O 请求,方便用户使用各种设备,并提高设备的利用率。 + +主要包括缓冲管理、设备分配、设备处理、虛拟设备等。 + +# 系统调用 + +如果一个进程在用户态需要使用内核态的功能,就进行系统调用从而陷入内核,由操作系统代为完成。 + +

+ +Linux 的系统调用主要有以下这些: + +| Task | Commands | +| :---: | --- | +| 进程控制 | fork(); exit(); wait(); | +| 进程通信 | pipe(); shmget(); mmap(); | +| 文件操作 | open(); read(); write(); | +| 设备操作 | ioctl(); read(); write(); | +| 信息维护 | getpid(); alarm(); sleep(); | +| 安全 | chmod(); umask(); chown(); | + +# 大内核和微内核 + +## 1. 大内核 + +大内核是将操作系统功能作为一个紧密结合的整体放到内核。 + +由于各模块共享信息,因此有很高的性能。 + +## 2. 微内核 + +由于操作系统不断复杂,因此将一部分操作系统功能移出内核,从而降低内核的复杂性。移出的部分根据分层的原则划分成若干服务,相互独立。 + +在微内核结构下,操作系统被划分成小的、定义良好的模块,只有微内核这一个模块运行在内核态,其余模块运行在用户态。 + +因为需要频繁地在用户态和核心态之间进行切换,所以会有一定的性能损失。 + +

+ +# 中断分类 + +## 1. 外中断 + +由 CPU 执行指令以外的事件引起,如 I/O 完成中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。 + +## 2. 异常 + +由 CPU 执行指令的内部事件引起,如非法操作码、地址越界、算术溢出等。 + +## 3. 陷入 + +在用户程序中使用系统调用。 + + + + + + + diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7faeec09..00000000 --- a/package-lock.json +++ /dev/null @@ -1,12150 +0,0 @@ -{ - "name": "geekxh.com", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@algolia/cache-browser-local-storage": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.2.0.tgz", - "integrity": "sha512-uji5zxBxwNu8qKtyqghg9lUsN0OOZ58NfRKk0Il4IZCcCo78E0KfT3Uxr7XiYCJMRnqIsvbKWf0xA67tYNBSbA==", - "dev": true, - "requires": { - "@algolia/cache-common": "4.2.0" - } - }, - "@algolia/cache-common": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.2.0.tgz", - "integrity": "sha512-ATBQCBBLt4hPNKIKn06y5zqZPWQmI+PBF0287rFVj8BGmEr82BzoKMa5XIkvgpjtxwx6c5nSKxZaYkEFqtrxtQ==", - "dev": true - }, - "@algolia/cache-in-memory": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.2.0.tgz", - "integrity": "sha512-NsVOR6ixK6jvurLW+1+h80/9N18QjU/AXdAZJoVeu4JXb2NPuej4Ld1zXFYvz/ypCFQE+dU8haaQnJIuTbD4vg==", - "dev": true, - "requires": { - "@algolia/cache-common": "4.2.0" - } - }, - "@algolia/client-account": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.2.0.tgz", - "integrity": "sha512-xz5OXU9DQ9pegABAgmTPV23f9tXmbUPO3w5J/b2QcP6jzfNnNfW3CkTwywgNLr16jIKLxmmClN5yqyJp6XmHBA==", - "dev": true, - "requires": { - "@algolia/client-common": "4.2.0", - "@algolia/client-search": "4.2.0", - "@algolia/transporter": "4.2.0" - } - }, - "@algolia/client-analytics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.2.0.tgz", - "integrity": "sha512-UNuZQOYuKPYl5fCgm1HZzoZ6Ewxtqrc4Cv5Dhdy5VatIV6lYEWOtdn+g+5qvWFGb6fv6688dg5EVJnXZNvVVZQ==", - "dev": true, - "requires": { - "@algolia/client-common": "4.2.0", - "@algolia/client-search": "4.2.0", - "@algolia/requester-common": "4.2.0", - "@algolia/transporter": "4.2.0" - } - }, - "@algolia/client-common": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.2.0.tgz", - "integrity": "sha512-KxZTWXf9FSl188iTAz9rhTMeBtbF/uaJcxw99jbWHxyK9KR87obZzTlTFYnIWLEBaTG1MmlgPSsDogAE4CHLOQ==", - "dev": true, - "requires": { - "@algolia/requester-common": "4.2.0", - "@algolia/transporter": "4.2.0" - } - }, - "@algolia/client-recommendation": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.2.0.tgz", - "integrity": "sha512-5QwvUJ5hpZVDz99o+EPgMg+z7maLWOZGUrUt5z8s+esl+taTb2h1PtyLpikAvC2d/BjYCEKyObTiRDYdzhqcoA==", - "dev": true, - "requires": { - "@algolia/client-common": "4.2.0", - "@algolia/requester-common": "4.2.0", - "@algolia/transporter": "4.2.0" - } - }, - "@algolia/client-search": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.2.0.tgz", - "integrity": "sha512-2SAz1/undr+RM7FNj3G0taWFG+8QEMQcYHxUhoOJKMIY9sPQN7UNCJRHYsulM+/g45oF67tXX09NSt14ewen0Q==", - "dev": true, - "requires": { - "@algolia/client-common": "4.2.0", - "@algolia/requester-common": "4.2.0", - "@algolia/transporter": "4.2.0" - } - }, - "@algolia/logger-common": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.2.0.tgz", - "integrity": "sha512-VQcJE5lr78oc+lbcGfPonCDTRwLNSxwtPrUP6Tj+CoDedsVHZhODAlHzLHhxc4vuyrU7xomvKJLqTUgfDNxzXQ==", - "dev": true - }, - "@algolia/logger-console": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.2.0.tgz", - "integrity": "sha512-/1GE43jY0xKfJUi5ZGtEqq+oTyOzs+EgGKj7/zEHIpUc5NyxokIPWTqt3q6pzGSWFEkNbaA1gAVgXM1zCMVWYw==", - "dev": true, - "requires": { - "@algolia/logger-common": "4.2.0" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.2.0.tgz", - "integrity": "sha512-+PZKOe+UBdZYQg/h/8AbKQ2Ha4uDeoLnpZFv00IMr/elym0m2hl76xAeIBiIqGYsLCmGybGBFUF9n1imsKJUJQ==", - "dev": true, - "requires": { - "@algolia/requester-common": "4.2.0" - } - }, - "@algolia/requester-common": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.2.0.tgz", - "integrity": "sha512-SSKPRM/7UP54/dxyK6EYt4p6nTeJxYb1P6xVh/Ic6noBTCfqg5vBEKDa1DZD5MBtCvABoODd97UOfAo3ECG/jg==", - "dev": true - }, - "@algolia/requester-node-http": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.2.0.tgz", - "integrity": "sha512-mRQgSM8qrMfjXaBnMjTmymR0NKwbr82Qwh1a5TgYyzMOBuRO5nRikawvTVgpNaEnQS0uesIiwd2ohOJ2gNu6oA==", - "dev": true, - "requires": { - "@algolia/requester-common": "4.2.0" - } - }, - "@algolia/transporter": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.2.0.tgz", - "integrity": "sha512-7CiwMYsEhrHySA8q70euIYOyhGtz/wz+MEC3nwGONBC82nGI6ntVqTFhCkpLIJqqbGbNlFgnCpwnLmSqLhRP3A==", - "dev": true, - "requires": { - "@algolia/cache-common": "4.2.0", - "@algolia/logger-common": "4.2.0", - "@algolia/requester-common": "4.2.0" - } - }, - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/compat-data": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.1.tgz", - "integrity": "sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - } - }, - "@babel/core": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.2.tgz", - "integrity": "sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.2", - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helpers": "^7.10.1", - "@babel/parser": "^7.10.2", - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz", - "integrity": "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz", - "integrity": "sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz", - "integrity": "sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.10.1", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz", - "integrity": "sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz", - "integrity": "sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-regex": "^7.10.1", - "regexpu-core": "^4.7.0" - } - }, - "@babel/helper-define-map": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz", - "integrity": "sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz", - "integrity": "sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz", - "integrity": "sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", - "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz", - "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.1.tgz", - "integrity": "sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==", - "dev": true, - "requires": { - "lodash": "^4.17.13" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz", - "integrity": "sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-wrap-function": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", - "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz", - "integrity": "sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helpers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", - "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz", - "integrity": "sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-remap-async-to-generator": "^7.10.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz", - "integrity": "sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.1.tgz", - "integrity": "sha512-xBfteh352MTke2U1NpclzMDmAmCdQ2fBZjhZQQfGTjXw6qcRYMkt528sA1U8o0ThDCSeuETXIj5bOGdxN+5gkw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-decorators": "^7.10.1" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz", - "integrity": "sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz", - "integrity": "sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz", - "integrity": "sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz", - "integrity": "sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-numeric-separator": "^7.10.1" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz", - "integrity": "sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz", - "integrity": "sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz", - "integrity": "sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz", - "integrity": "sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz", - "integrity": "sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz", - "integrity": "sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.1.tgz", - "integrity": "sha512-a9OAbQhKOwSle1Vr0NJu/ISg1sPfdEkfRKWpgPuzhnWWzForou2gIeUIIwjAMHRekhhpJ7eulZlYs0H14Cbi+g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz", - "integrity": "sha512-+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz", - "integrity": "sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz", - "integrity": "sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz", - "integrity": "sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz", - "integrity": "sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-remap-async-to-generator": "^7.10.1" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz", - "integrity": "sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz", - "integrity": "sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "lodash": "^4.17.13" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz", - "integrity": "sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-define-map": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz", - "integrity": "sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz", - "integrity": "sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz", - "integrity": "sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz", - "integrity": "sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz", - "integrity": "sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz", - "integrity": "sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz", - "integrity": "sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz", - "integrity": "sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz", - "integrity": "sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz", - "integrity": "sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz", - "integrity": "sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz", - "integrity": "sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.10.1", - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz", - "integrity": "sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", - "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz", - "integrity": "sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz", - "integrity": "sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz", - "integrity": "sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz", - "integrity": "sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz", - "integrity": "sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz", - "integrity": "sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz", - "integrity": "sha512-4w2tcglDVEwXJ5qxsY++DgWQdNJcCCsPxfT34wCUwIf2E7dI7pMpH8JczkMBbgBTNzBX62SZlNJ9H+De6Zebaw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz", - "integrity": "sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz", - "integrity": "sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz", - "integrity": "sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-regex": "^7.10.1" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz", - "integrity": "sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz", - "integrity": "sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz", - "integrity": "sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz", - "integrity": "sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } - }, - "@babel/preset-env": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.2.tgz", - "integrity": "sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.10.1", - "@babel/helper-compilation-targets": "^7.10.2", - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-proposal-async-generator-functions": "^7.10.1", - "@babel/plugin-proposal-class-properties": "^7.10.1", - "@babel/plugin-proposal-dynamic-import": "^7.10.1", - "@babel/plugin-proposal-json-strings": "^7.10.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", - "@babel/plugin-proposal-numeric-separator": "^7.10.1", - "@babel/plugin-proposal-object-rest-spread": "^7.10.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.1", - "@babel/plugin-proposal-optional-chaining": "^7.10.1", - "@babel/plugin-proposal-private-methods": "^7.10.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.1", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.1", - "@babel/plugin-transform-arrow-functions": "^7.10.1", - "@babel/plugin-transform-async-to-generator": "^7.10.1", - "@babel/plugin-transform-block-scoped-functions": "^7.10.1", - "@babel/plugin-transform-block-scoping": "^7.10.1", - "@babel/plugin-transform-classes": "^7.10.1", - "@babel/plugin-transform-computed-properties": "^7.10.1", - "@babel/plugin-transform-destructuring": "^7.10.1", - "@babel/plugin-transform-dotall-regex": "^7.10.1", - "@babel/plugin-transform-duplicate-keys": "^7.10.1", - "@babel/plugin-transform-exponentiation-operator": "^7.10.1", - "@babel/plugin-transform-for-of": "^7.10.1", - "@babel/plugin-transform-function-name": "^7.10.1", - "@babel/plugin-transform-literals": "^7.10.1", - "@babel/plugin-transform-member-expression-literals": "^7.10.1", - "@babel/plugin-transform-modules-amd": "^7.10.1", - "@babel/plugin-transform-modules-commonjs": "^7.10.1", - "@babel/plugin-transform-modules-systemjs": "^7.10.1", - "@babel/plugin-transform-modules-umd": "^7.10.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.10.1", - "@babel/plugin-transform-object-super": "^7.10.1", - "@babel/plugin-transform-parameters": "^7.10.1", - "@babel/plugin-transform-property-literals": "^7.10.1", - "@babel/plugin-transform-regenerator": "^7.10.1", - "@babel/plugin-transform-reserved-words": "^7.10.1", - "@babel/plugin-transform-shorthand-properties": "^7.10.1", - "@babel/plugin-transform-spread": "^7.10.1", - "@babel/plugin-transform-sticky-regex": "^7.10.1", - "@babel/plugin-transform-template-literals": "^7.10.1", - "@babel/plugin-transform-typeof-symbol": "^7.10.1", - "@babel/plugin-transform-unicode-escapes": "^7.10.1", - "@babel/plugin-transform-unicode-regex": "^7.10.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.10.2", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz", - "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs2": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.10.2.tgz", - "integrity": "sha512-ZLwsFnNm3WpIARU1aLFtufjMHsmEnc8TjtrfAjmbgMbeoyR+LuQoyESoNdTfeDhL6IdY12SpeycXMgSgl8XGXA==", - "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "dev": true - } - } - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@leancloud/adapter-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@leancloud/adapter-types/-/adapter-types-3.0.0.tgz", - "integrity": "sha512-/1l2PWJ6pXizHphBorMN7B0d2YjmxZJf1s+bitvLALt7wBid5qbGpHqGGKE/yRdNlCKwl9FbXG1x5wUFZfQwHQ==", - "dev": true - }, - "@leancloud/adapters-superagent": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@leancloud/adapters-superagent/-/adapters-superagent-1.0.4.tgz", - "integrity": "sha512-B8WndkFVoCRXJVZVV8FgSq2SQaSy2vDPwf2s20uKoUtCxe1Je/XuDnPd0Ujdr1Kt46a2w+uivxxuMPlW6JSOnQ==", - "dev": true, - "requires": { - "@leancloud/adapter-types": "^3.0.0", - "@types/superagent": "^4.1.7", - "superagent": "^5.2.2" - }, - "dependencies": { - "form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "superagent": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.2.2.tgz", - "integrity": "sha512-pMWBUnIllK4ZTw7p/UaobiQPwAO5w/1NRRTDpV0FTVNmECztsxKspj3ZWEordVEaqpZtmOQJJna4yTLyC/q7PQ==", - "dev": true, - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.1", - "methods": "^1.1.2", - "mime": "^2.4.4", - "qs": "^6.9.1", - "readable-stream": "^3.4.0", - "semver": "^6.3.0" - } - } - } - }, - "@leancloud/platform-adapters-browser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@leancloud/platform-adapters-browser/-/platform-adapters-browser-1.1.0.tgz", - "integrity": "sha512-XOCSOH4fiMxU0ykEwMpkxNLllLtZCfoH0y/NrWXpi/P2hmAJQchrPNbRcv2bUVevaoNiRG5HXZZAHzPxxYICUA==", - "dev": true, - "requires": { - "@leancloud/adapter-types": "^3.0.0", - "@leancloud/adapters-superagent": "^1.0.4" - } - }, - "@leancloud/platform-adapters-node": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@leancloud/platform-adapters-node/-/platform-adapters-node-1.1.0.tgz", - "integrity": "sha512-ewVJxTdgeSny9iUQ5jGwOaZpoHvWFTocInbpRCFfZjTCeY1LrgUsxHPdNXqMXRSfvI7kSeA0W3YFfnhu0g5s8g==", - "dev": true, - "requires": { - "@leancloud/adapter-types": "^3.0.0", - "@leancloud/adapters-superagent": "^1.0.4", - "@types/ws": "^7.2.2", - "localstorage-memory": "^1.0.2", - "ws": "^5.2.2" - }, - "dependencies": { - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "@leancloud/platform-adapters-weapp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@leancloud/platform-adapters-weapp/-/platform-adapters-weapp-1.2.0.tgz", - "integrity": "sha512-U5v/4yVfKzkw7ZaWaIgwLWHuC/2FXyXxSQCupPkn0Rvmk3nJbj8PbquZZiVL0FA6Qe+u5INAbJ+WSCdasgDA5g==", - "dev": true, - "requires": { - "@leancloud/adapter-types": "^3.0.0", - "event-target-shim": "^5.0.1", - "miniprogram-api-typings": "^2.10.2" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/cookiejar": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.1.tgz", - "integrity": "sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw==", - "dev": true - }, - "@types/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "14.0.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.13.tgz", - "integrity": "sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==", - "dev": true - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, - "@types/superagent": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.7.tgz", - "integrity": "sha512-JSwNPgRYjIC4pIeOqLwWwfGj6iP1n5NE6kNBEbGx2V8H78xCPwx7QpNp9plaI30+W3cFEzJO7BIIsXE+dbtaGg==", - "dev": true, - "requires": { - "@types/cookiejar": "*", - "@types/node": "*" - } - }, - "@types/ws": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.5.tgz", - "integrity": "sha512-4UEih9BI1nBKii385G9id1oFrSkLcClbwtDfcYj8HJLQqZVAtb/42vXVrYvRWCcufNF/a+rZD3MxNwghA7UmCg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@vssue/api-bitbucket-v2": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vssue/api-bitbucket-v2/-/api-bitbucket-v2-1.4.0.tgz", - "integrity": "sha512-xy0+5xOxDWj8i5NG5GM3irFz/MbxKMn40SZlE7cIc1V0d8seBHAbRTdBK7rYGObJh6710C2rxqF5Wb/sZDfBPw==", - "dev": true, - "requires": { - "@vssue/utils": "^1.4.0", - "axios": "^0.18.1" - } - }, - "@vssue/api-gitee-v5": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@vssue/api-gitee-v5/-/api-gitee-v5-1.4.4.tgz", - "integrity": "sha512-fQ4dt7H0lb770jZfga7ZkrdRv5wFXjcA+wyJekq2waS9pJvgHcJHmIHjqB4FiFsano0i9UBiP7qEXdTOyaR2Xg==", - "dev": true, - "requires": { - "@vssue/utils": "^1.4.0", - "axios": "^0.18.1" - } - }, - "@vssue/api-github-v3": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@vssue/api-github-v3/-/api-github-v3-1.4.4.tgz", - "integrity": "sha512-/ZQwO+/XgHz7hnVX6zLIWA0L1fmI4LBzQoRp1J56tonH6gbDpvl/VZ8VHIcSldHnpEsjf8wYmbIEz8rJd7jG2Q==", - "dev": true, - "requires": { - "@vssue/utils": "^1.4.0", - "axios": "^0.18.1" - } - }, - "@vssue/api-github-v4": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vssue/api-github-v4/-/api-github-v4-1.4.0.tgz", - "integrity": "sha512-AdMYX62zXolvbJl0YoLjMQfoyIaK+pso2TVb34L+tjqfxgfubRm6mE/pWU7cKLiWMn6IaiS0LotC2O4y/omqDQ==", - "dev": true, - "requires": { - "@vssue/utils": "^1.4.0", - "axios": "^0.18.1" - } - }, - "@vssue/api-gitlab-v4": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vssue/api-gitlab-v4/-/api-gitlab-v4-1.4.0.tgz", - "integrity": "sha512-NVjDsmIgswUFGw7jVnRlEr7RFH0+aqhfDRD/zFpgb+JG+FZNbM/h2d5A/HftYjNXzJglnl1q67yFUBrIxM78jQ==", - "dev": true, - "requires": { - "@vssue/utils": "^1.4.0", - "axios": "^0.18.1" - } - }, - "@vssue/utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vssue/utils/-/utils-1.4.0.tgz", - "integrity": "sha512-3d9WCYNurdFKApFzU8i7YD1GCGhunEVYnwSJxwQ2rDmEdpLneAYNJWg9+QS6bqzB+Pw7ymtwLf/Sqti9+xUGqA==", - "dev": true, - "requires": { - "date-fns": "^1.29.0", - "qs": "^6.6.0" - } - }, - "@vssue/vuepress-plugin-vssue": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@vssue/vuepress-plugin-vssue/-/vuepress-plugin-vssue-1.4.6.tgz", - "integrity": "sha512-oP63mMvue54ASrfMJVTpmT74is4eU2OeAqDqSOLYUytpqgba2AKPXnq6xhY8fua/+hxpttq0pOVajF6GL4WTgg==", - "dev": true, - "requires": { - "vssue": "^1.4.6" - } - }, - "@vue/babel-helper-vue-jsx-merge-props": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz", - "integrity": "sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==", - "dev": true - }, - "@vue/babel-plugin-transform-vue-jsx": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz", - "integrity": "sha512-YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", - "html-tags": "^2.0.0", - "lodash.kebabcase": "^4.1.1", - "svg-tags": "^1.0.0" - } - }, - "@vue/babel-preset-app": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-4.4.1.tgz", - "integrity": "sha512-VHVROEBBiW0dnuNuzlFElkncXo+zxh5Px0MZ51Th5da8UPbQodf43mnpotMnFtmCPTXAFL58tzDttu1FgrgfpQ==", - "dev": true, - "requires": { - "@babel/core": "^7.9.6", - "@babel/helper-compilation-targets": "^7.9.6", - "@babel/helper-module-imports": "^7.8.3", - "@babel/plugin-proposal-class-properties": "^7.8.3", - "@babel/plugin-proposal-decorators": "^7.8.3", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-jsx": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.9.6", - "@babel/preset-env": "^7.9.6", - "@babel/runtime": "^7.9.6", - "@vue/babel-preset-jsx": "^1.1.2", - "babel-plugin-dynamic-import-node": "^2.3.3", - "core-js": "^3.6.5", - "core-js-compat": "^3.6.5", - "semver": "^6.1.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@vue/babel-preset-jsx": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz", - "integrity": "sha512-zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ==", - "dev": true, - "requires": { - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", - "@vue/babel-sugar-functional-vue": "^1.1.2", - "@vue/babel-sugar-inject-h": "^1.1.2", - "@vue/babel-sugar-v-model": "^1.1.2", - "@vue/babel-sugar-v-on": "^1.1.2" - } - }, - "@vue/babel-sugar-functional-vue": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz", - "integrity": "sha512-YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0" - } - }, - "@vue/babel-sugar-inject-h": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz", - "integrity": "sha512-VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w==", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0" - } - }, - "@vue/babel-sugar-v-model": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz", - "integrity": "sha512-vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg==", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", - "camelcase": "^5.0.0", - "html-tags": "^2.0.0", - "svg-tags": "^1.0.0" - } - }, - "@vue/babel-sugar-v-on": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz", - "integrity": "sha512-T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", - "camelcase": "^5.0.0" - } - }, - "@vue/component-compiler-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz", - "integrity": "sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug==", - "dev": true, - "requires": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", - "postcss-selector-parser": "^6.0.2", - "prettier": "^1.18.2", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "@vuepress-reco/vuepress-plugin-back-to-top": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vuepress-reco/vuepress-plugin-back-to-top/-/vuepress-plugin-back-to-top-1.4.0.tgz", - "integrity": "sha512-h2pMkHTH/yTqVAyLsZSrS5Oh4RJpqM0xxtDMKZth4EaxnGeiB5VqrG+M6Fht8nxjUHFZ8Zy9JIduIe4tgP1jOw==", - "dev": true - }, - "@vuepress-reco/vuepress-plugin-comments": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@vuepress-reco/vuepress-plugin-comments/-/vuepress-plugin-comments-1.4.6.tgz", - "integrity": "sha512-T9Ny4EHVtIURxk+/m+QCCHshoDIRc6pn2tBkjpuStdbLunVijvOBQBBIz4g/uE0dBFXZnd4jtGpy/mOE+bHeyg==", - "dev": true, - "requires": { - "@vssue/api-bitbucket-v2": "^1.1.1", - "@vssue/api-gitee-v5": "^1.4.4", - "@vssue/api-github-v3": "^1.4.4", - "@vssue/api-github-v4": "^1.2.0", - "@vssue/api-gitlab-v4": "^1.1.1", - "valine": "^1.4.14", - "vssue": "^1.4.6" - }, - "dependencies": { - "valine": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/valine/-/valine-1.4.14.tgz", - "integrity": "sha512-1gVRXZUDqzTt2I43xivOotXchGdYCCW+Av+laXImzcUVI3DrGR4AQbh3LbDsFpZq+N26u+p+qzB9mjliLYO3YQ==", - "dev": true, - "requires": { - "balajs": "^1.0.7", - "balalaika": "^1.0.1", - "element-closest": "^3.0.2", - "leancloud-storage": "^3.0.4", - "storejs": "^1.0.25", - "xss": "^1.0.6" - } - } - } - }, - "@vuepress-reco/vuepress-plugin-loading-page": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vuepress-reco/vuepress-plugin-loading-page/-/vuepress-plugin-loading-page-1.4.0.tgz", - "integrity": "sha512-wDXvtZLKPEiEISPJBVrZQ/Xva5zMyQtmuUuPQpkEj96M5lnVPpJiFWlgZ4T2T9ANe2A7at8t59SszzVnSY1whw==", - "dev": true - }, - "@vuepress-reco/vuepress-plugin-pagation": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@vuepress-reco/vuepress-plugin-pagation/-/vuepress-plugin-pagation-1.4.6.tgz", - "integrity": "sha512-Y4n+MdkyOY10RMKtjhWQ7M4TlZ5KEkyGAin7BkBj8iJ5gudHB6vqCDX8aXzTrRpTECWZqnNhNs1uw02YU14eoQ==", - "dev": true - }, - "@vuepress/core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-1.4.1.tgz", - "integrity": "sha512-R1oJeSiDQPw8sVo70mrP1Zn2H0nCqnAHb6DV9mpJBQ6ur4VT6qQnCpd2onKU+bZRLlEhm4G8IQNDEV+DuE7zZQ==", - "dev": true, - "requires": { - "@babel/core": "^7.8.4", - "@vue/babel-preset-app": "^4.1.2", - "@vuepress/markdown": "1.4.1", - "@vuepress/markdown-loader": "1.4.1", - "@vuepress/plugin-last-updated": "1.4.1", - "@vuepress/plugin-register-components": "1.4.1", - "@vuepress/shared-utils": "1.4.1", - "autoprefixer": "^9.5.1", - "babel-loader": "^8.0.4", - "cache-loader": "^3.0.0", - "chokidar": "^2.0.3", - "connect-history-api-fallback": "^1.5.0", - "copy-webpack-plugin": "^5.0.2", - "core-js": "^3.6.4", - "cross-spawn": "^6.0.5", - "css-loader": "^2.1.1", - "file-loader": "^3.0.1", - "js-yaml": "^3.13.1", - "lru-cache": "^5.1.1", - "mini-css-extract-plugin": "0.6.0", - "optimize-css-assets-webpack-plugin": "^5.0.1", - "portfinder": "^1.0.13", - "postcss-loader": "^3.0.0", - "postcss-safe-parser": "^4.0.1", - "toml": "^3.0.0", - "url-loader": "^1.0.1", - "vue": "^2.6.10", - "vue-loader": "^15.7.1", - "vue-router": "^3.1.3", - "vue-server-renderer": "^2.6.10", - "vue-template-compiler": "^2.6.10", - "vuepress-html-webpack-plugin": "^3.2.0", - "vuepress-plugin-container": "^2.0.2", - "webpack": "^4.8.1", - "webpack-chain": "^6.0.0", - "webpack-dev-server": "^3.5.1", - "webpack-merge": "^4.1.2", - "webpackbar": "3.2.0" - } - }, - "@vuepress/markdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-1.4.1.tgz", - "integrity": "sha512-5a69ufnu1A3NXqQtzAE5LiR7EbtsQ1qe8UcIr+KizNO4gCg8+E8/uu3hxvDOLs2ElS6b0AihKIuwmeIgZkfeKA==", - "dev": true, - "requires": { - "@vuepress/shared-utils": "1.4.1", - "markdown-it": "^8.4.1", - "markdown-it-anchor": "^5.0.2", - "markdown-it-chain": "^1.3.0", - "markdown-it-emoji": "^1.4.0", - "markdown-it-table-of-contents": "^0.4.0", - "prismjs": "^1.13.0" - } - }, - "@vuepress/markdown-loader": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/markdown-loader/-/markdown-loader-1.4.1.tgz", - "integrity": "sha512-FGtZ15rRwo9iVMcJ0eX4tf1bxWSKKpC4NGNLJuYzaPlO9ND/U04jsj4Xj454piokr2JzBSmaJlIZTAG1EuiTNw==", - "dev": true, - "requires": { - "@vuepress/markdown": "1.4.1", - "loader-utils": "^1.1.0", - "lru-cache": "^5.1.1" - } - }, - "@vuepress/plugin-active-header-links": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.4.1.tgz", - "integrity": "sha512-xv/qDY6S8rHzLGDHtwn3XV7Gi3Fnevp6d3H18PFK3sNwT2KGzKIe2c7lbn1qHDRUWcxY7+EoT7zmdJwIeG6dWQ==", - "dev": true, - "requires": { - "lodash.debounce": "^4.0.8" - } - }, - "@vuepress/plugin-blog": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-blog/-/plugin-blog-1.9.2.tgz", - "integrity": "sha512-1y4C7miuJyhP2YV9+8SGPzcwbyNqQWB1WQQf1AYdWvlAK/QrFdTXOtFyBKoViJppHxIkLLz+45bvOm5sIqjv6w==", - "dev": true, - "requires": { - "@vssue/api-github-v3": "^1.1.2", - "@vssue/vuepress-plugin-vssue": "^1.2.0", - "dayjs": "^1.8.19", - "vuejs-paginate": "^2.1.0", - "vuepress-plugin-disqus": "^0.2.0", - "vuepress-plugin-feed": "^0.1.8", - "vuepress-plugin-mailchimp": "^1.4.1", - "vuepress-plugin-sitemap": "^2.3.1" - } - }, - "@vuepress/plugin-last-updated": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-last-updated/-/plugin-last-updated-1.4.1.tgz", - "integrity": "sha512-67ouc9cB3C19zcDqeJwhwqO9CXjy8G67tcXUgPpL/GsuK11oQbnR4rkupILvNa9HoemtCcF2aaxXSGsi/1VEtA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.5" - } - }, - "@vuepress/plugin-medium-zoom": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-1.4.1.tgz", - "integrity": "sha512-dMo8eDbmM1Y+zRRECjmCcqtuTirkpYn7FbByURRSauh2hFqjHSN/uOKOHEj71TTzs1vwrLCynHvKo6tFEuUMNA==", - "dev": true, - "requires": { - "medium-zoom": "^1.0.4" - } - }, - "@vuepress/plugin-nprogress": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-1.4.1.tgz", - "integrity": "sha512-CIhIuIgKtvk/ULENjefkZAJQqUstdZcqiM/Gs8CDyTKJITpwyqoZcgolFZ+1ZofUQuHuqDj1hKKm3AQ1cG3cBA==", - "dev": true, - "requires": { - "nprogress": "^0.2.0" - } - }, - "@vuepress/plugin-register-components": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-register-components/-/plugin-register-components-1.4.1.tgz", - "integrity": "sha512-6yI4J/tMhOASSLmlP+5p4ccljlWuNBRsyYSKiD5jWAV181oMmN32LtuoCggXBhSvQUgn2grxyjmYw+tcSV5KGQ==", - "dev": true, - "requires": { - "@vuepress/shared-utils": "1.4.1" - } - }, - "@vuepress/plugin-search": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-search/-/plugin-search-1.4.1.tgz", - "integrity": "sha512-J4JyXD6M1oOU013s4ZLKMkKEGd7qEtSIsAw2nZY2mckZ7ETX49R5Pv2S5uCqLRQfUQSIGR5TEABL22q0B8uCVA==", - "dev": true - }, - "@vuepress/shared-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/shared-utils/-/shared-utils-1.4.1.tgz", - "integrity": "sha512-FBUHFhvR7vk6glQy/qUntBz8bVeWiNYZ2/G16EKaerKKn15xAiD7tUFCQ3L/KjtQJ8TV38GK47UEXh7UTcRwQg==", - "dev": true, - "requires": { - "chalk": "^2.3.2", - "diacritics": "^1.3.0", - "escape-html": "^1.0.3", - "fs-extra": "^7.0.1", - "globby": "^9.2.0", - "gray-matter": "^4.0.1", - "hash-sum": "^1.0.2", - "semver": "^6.0.0", - "upath": "^1.1.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@vuepress/theme-default": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-1.4.1.tgz", - "integrity": "sha512-QhU1ORj20xmGr9Gk5szWJyzHm8i+NqxotBTeOF4WsKewB/3SPamJUoipgX4VdChw9jVew1oJQw0TpyDZfiHx+A==", - "dev": true, - "requires": { - "@vuepress/plugin-active-header-links": "1.4.1", - "@vuepress/plugin-nprogress": "1.4.1", - "@vuepress/plugin-search": "1.4.1", - "docsearch.js": "^2.5.2", - "lodash": "^4.17.15", - "stylus": "^0.54.5", - "stylus-loader": "^3.0.2", - "vuepress-plugin-container": "^2.0.2", - "vuepress-plugin-smooth-scroll": "^0.0.3" - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "agentkeepalive": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-2.2.0.tgz", - "integrity": "sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8=", - "dev": true - }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, - "algoliasearch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.2.0.tgz", - "integrity": "sha512-CgbyDBGMSzNISBFezPt68xAseknork+wNe/Oour1Hluk4OwbtobysRawFf93ZbLSQw/KbeGlVmVAvujeVIVdnQ==", - "dev": true, - "requires": { - "@algolia/cache-browser-local-storage": "4.2.0", - "@algolia/cache-common": "4.2.0", - "@algolia/cache-in-memory": "4.2.0", - "@algolia/client-account": "4.2.0", - "@algolia/client-analytics": "4.2.0", - "@algolia/client-common": "4.2.0", - "@algolia/client-recommendation": "4.2.0", - "@algolia/client-search": "4.2.0", - "@algolia/logger-common": "4.2.0", - "@algolia/logger-console": "4.2.0", - "@algolia/requester-browser-xhr": "4.2.0", - "@algolia/requester-common": "4.2.0", - "@algolia/requester-node-http": "4.2.0", - "@algolia/transporter": "4.2.0" - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "requires": { - "string-width": "^3.0.0" - } - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "ascli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", - "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", - "dev": true, - "requires": { - "colour": "~0.7.1", - "optjs": "~3.2.2" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autocomplete.js": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/autocomplete.js/-/autocomplete.js-0.36.0.tgz", - "integrity": "sha512-jEwUXnVMeCHHutUt10i/8ZiRaCb0Wo+ZyKxeGsYwBDtw6EJHqEeDrq4UwZRD8YBSvp3g6klP678il2eeiVXN2Q==", - "dev": true, - "requires": { - "immediate": "^3.2.3" - } - }, - "autoprefixer": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.0.tgz", - "integrity": "sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001061", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.30", - "postcss-value-parser": "^4.1.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", - "dev": true - }, - "axios": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", - "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", - "dev": true, - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "=3.1.0" - } - }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "balajs": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/balajs/-/balajs-1.0.7.tgz", - "integrity": "sha512-ef6Gb4Nb44Y3fh1NHj1U9cjnkrj5pcz/16USEziNX+qZd0SEoXegU2IEl2DEcBUAKZnL9hWPT2yOPlBPAlCRSA==", - "dev": true - }, - "balalaika": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/balalaika/-/balalaika-1.0.1.tgz", - "integrity": "sha1-BmQUeiV+oq1K5mRRcR5SZoMNUdk=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", - "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001043", - "electron-to-chromium": "^1.3.413", - "node-releases": "^1.1.53", - "pkg-up": "^2.0.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", - "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytebuffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", - "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", - "dev": true, - "requires": { - "long": "~3" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cac": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.5.10.tgz", - "integrity": "sha512-uxyxsID5p5kYlFFnhw86A4c8K5QTLRp6JM4AY2OtCq5lnnn4DGxV8YI1Z5rlt6KUjEKpA4qM+WZQshMoJY6dQQ==", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cache-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-3.0.1.tgz", - "integrity": "sha512-HzJIvGiGqYsFUrMjAJNDbVZoG7qQA+vy9AIoKs7s9DscNfki0I589mf2w6/tW+kkFH3zyiknoWV5Jdynu6b/zw==", - "dev": true, - "requires": { - "buffer-json": "^2.0.0", - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.2.3", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true - } - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001081", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001081.tgz", - "integrity": "sha512-iZdh3lu09jsUtLE6Bp8NAbJskco4Y3UDtkR3GTCJGsbMowBU5IWDFF79sV2ws7lSqTzWyKazxam2thasHymENQ==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "cli-boxes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", - "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==", - "dev": true - }, - "clipboard": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", - "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", - "dev": true, - "optional": true, - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colour": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", - "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "consola": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.12.2.tgz", - "integrity": "sha512-c9mzemrAk57s3UIjepn8KKkuEH5fauMdot5kFSJUnqHcnApVS9Db8Rbv5AZ1Iz6lXzaGe9z1crQXhJtGX4h/Og==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", - "dev": true, - "requires": { - "bluebird": "^3.1.1" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==", - "dev": true, - "requires": { - "cacache": "^12.0.3", - "find-cache-dir": "^2.1.0", - "glob-parent": "^3.1.0", - "globby": "^7.1.1", - "is-glob": "^4.0.1", - "loader-utils": "^1.2.3", - "minimatch": "^3.0.4", - "normalize-path": "^3.0.0", - "p-limit": "^2.2.1", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } - } - }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "dev": true, - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", - "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", - "dev": true, - "requires": { - "camelcase": "^5.2.0", - "icss-utils": "^4.1.0", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.14", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^2.0.6", - "postcss-modules-scope": "^2.1.0", - "postcss-modules-values": "^2.0.0", - "postcss-value-parser": "^3.3.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "css-parse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", - "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", - "dev": true, - "requires": { - "css": "^2.0.0" - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=", - "dev": true - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", - "dev": true, - "requires": { - "css-tree": "1.0.0-alpha.39" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", - "dev": true, - "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, - "dayjs": { - "version": "1.8.28", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.28.tgz", - "integrity": "sha512-ccnYgKC0/hPSGXxj7Ju6AV/BP4HUkXC2u15mikXT5mX9YorEaoi1bEKOmAqdkJHN4EEkmAf97SpH66Try5Mbeg==", - "dev": true - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deepmerge": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", - "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", - "dev": true - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "dev": true, - "optional": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "diacritics": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz", - "integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E=", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "docsearch.js": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/docsearch.js/-/docsearch.js-2.6.3.tgz", - "integrity": "sha512-GN+MBozuyz664ycpZY0ecdQE0ND/LSgJKhTLA0/v3arIS3S1Rpf2OJz6A35ReMsm91V5apcmzr5/kM84cvUg+A==", - "dev": true, - "requires": { - "algoliasearch": "^3.24.5", - "autocomplete.js": "0.36.0", - "hogan.js": "^3.0.2", - "request": "^2.87.0", - "stack-utils": "^1.0.1", - "to-factory": "^1.0.0", - "zepto": "^1.2.0" - }, - "dependencies": { - "algoliasearch": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-3.35.1.tgz", - "integrity": "sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ==", - "dev": true, - "requires": { - "agentkeepalive": "^2.2.0", - "debug": "^2.6.9", - "envify": "^4.0.0", - "es6-promise": "^4.1.0", - "events": "^1.1.0", - "foreach": "^2.0.5", - "global": "^4.3.2", - "inherits": "^2.0.1", - "isarray": "^2.0.1", - "load-script": "^1.0.0", - "object-keys": "^1.0.11", - "querystring-es3": "^0.2.1", - "reduce": "^1.0.1", - "semver": "^5.1.0", - "tunnel-agent": "^0.6.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - } - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.467", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.467.tgz", - "integrity": "sha512-U+QgsL8TZDU/n+rDnYDa3hY5uy3C4iry9mrJS0PNBBGwnocuQ+aHSfgY44mdlaK9744X5YqrrGUvD9PxCLY1HA==", - "dev": true - }, - "element-closest": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/element-closest/-/element-closest-3.0.2.tgz", - "integrity": "sha512-JxKQiJKX0Zr5Q2/bCaTx8P+UbfyMET1OQd61qu5xQFeWr1km3fGaxelSJtnfT27XQ5Uoztn2yIyeamAc/VX13g==", - "dev": true - }, - "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "envify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz", - "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==", - "dev": true, - "requires": { - "esprima": "^4.0.0", - "through": "~2.3.4" - } - }, - "envinfo": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.5.1.tgz", - "integrity": "sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ==", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", - "dev": true - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "feed": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/feed/-/feed-2.0.4.tgz", - "integrity": "sha512-sWatfulDP6d18qVaWcu34qmq9ml6UeN6nHSBJpNZ2muBqxjPAdT375whPYAHP+gqLfyabtYU5qf2Dv4nqtlp0w==", - "dev": true, - "requires": { - "luxon": "^1.3.3", - "xml": "^1.0.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", - "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", - "dev": true, - "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", - "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", - "dev": true, - "requires": { - "debug": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", - "dev": true - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github-markdown-css": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/github-markdown-css/-/github-markdown-css-3.0.1.tgz", - "integrity": "sha512-9G5CIPsHoyk5ObDsb/H4KTi23J8KE1oDd4KYU51qwqeM+lKWAiO7abpSgCkyWswgmSKBiuE7/4f8xUz7f2qAiQ==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", - "dev": true, - "requires": { - "ini": "^1.3.5" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - } - }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "dev": true, - "optional": true, - "requires": { - "delegate": "^3.1.2" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "gray-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", - "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", - "dev": true, - "requires": { - "js-yaml": "^3.11.0", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hogan.js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", - "integrity": "sha1-TNnhq9QpQUbnZ55B14mHMrAse/0=", - "dev": true, - "requires": { - "mkdirp": "0.3.0", - "nopt": "1.0.10" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "dev": true - } - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, - "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", - "dev": true - }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - } - }, - "html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", - "dev": true - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - } - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - }, - "dependencies": { - "is-path-inside": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", - "dev": true - } - } - }, - "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "javascript-state-machine": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/javascript-state-machine/-/javascript-state-machine-2.4.0.tgz", - "integrity": "sha1-2L4x7DjySsGhgy8LZy/DzV95yW4=", - "dev": true - }, - "javascript-stringify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", - "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/jsonp/-/jsonp-0.2.1.tgz", - "integrity": "sha1-pltPoPEL2nGaBUQep7lMVfPhW64=", - "dev": true, - "requires": { - "debug": "^2.1.3" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "leancloud-realtime": { - "version": "5.0.0-rc.3", - "resolved": "https://registry.npmjs.org/leancloud-realtime/-/leancloud-realtime-5.0.0-rc.3.tgz", - "integrity": "sha512-LGhxz2LY8/G7+dK4SQydaKdlBOcnaNi4r7Cl2otxOV6IyWPDRNiwSTjhAZLV7wHSDep6clrZVoZZGA0YuV24Lg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs2": "^7.10.2", - "@leancloud/adapter-types": "^3.0.0", - "@leancloud/platform-adapters-browser": "^1.1.0", - "@leancloud/platform-adapters-node": "^1.1.0", - "@leancloud/platform-adapters-weapp": "^1.2.0", - "base64-arraybuffer": "^0.1.5", - "debug": "^3.1.0", - "eventemitter3": "^3.0.0", - "javascript-state-machine": "^2.3.5", - "lodash": "^4.17.10", - "promise-timeout": "^1.3.0", - "protobufjs": "^5.0.1", - "uuid": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true - } - } - }, - "leancloud-realtime-plugin-live-query": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/leancloud-realtime-plugin-live-query/-/leancloud-realtime-plugin-live-query-1.2.0.tgz", - "integrity": "sha512-eJooIH8/FyUoozr3Eeby2DpDnmX39m1bfxfxlYPuojkio+i/DLwPD+aTHnRDH6QXJcT6tNTt85RcxVR/Txg98Q==", - "dev": true - }, - "leancloud-storage": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/leancloud-storage/-/leancloud-storage-3.15.0.tgz", - "integrity": "sha512-UbR6pLA0tVYPcY7AND0pey45iFsB2PkIo8Wz0DZ9BabKyqndA1ey2LKzYpFDGNh3ODrmT3fValVn9yY4bgf9Uw==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "es6-promise": "4.2.3", - "eventemitter3": "^2.0.3", - "leancloud-realtime": "^5.0.0-alpha.3", - "leancloud-realtime-plugin-live-query": "^1.2.0", - "localstorage-memory": "^1.0.1", - "md5": "^2.0.0", - "superagent": "^3.3.1", - "underscore": "^1.8.3", - "uuid": "^3.3.2" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "es6-promise": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.3.tgz", - "integrity": "sha512-vLf5iali3jKqlJoo6SryDwe3nxCmiueNjbjLWDIpNbAcKnQXAsAdZk+pM17nSYp3AQMbTmAQVCQSeDLfA87SNA==", - "dev": true - }, - "eventemitter3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", - "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=", - "dev": true - } - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "load-script": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", - "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=", - "dev": true - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "localstorage-memory": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/localstorage-memory/-/localstorage-memory-1.0.3.tgz", - "integrity": "sha512-t9P8WB6DcVttbw/W4PIE8HOqum8Qlvx5SjR6oInwR9Uia0EEmyUeBh7S+weKByW+l/f45Bj4L/dgZikGFDM6ng==", - "dev": true - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", - "dev": true - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", - "dev": true - }, - "lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg=", - "dev": true - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.trimend": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.trimend/-/lodash.trimend-4.5.1.tgz", - "integrity": "sha1-EoBENyhrmMrYmWt5QU4RMAEUCC8=", - "dev": true - }, - "lodash.trimstart": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz", - "integrity": "sha1-j/TexTLYJIavWVc8OURZFOlEp/E=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", - "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", - "dev": true - }, - "long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "luxon": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.24.1.tgz", - "integrity": "sha512-CgnIMKAWT0ghcuWFfCWBnWGOddM0zu6c4wZAWmD0NN7MZTnro0+833DF6tJep+xlxRPg4KtsYEHYLfTMBQKwYg==", - "dev": true - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-it": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", - "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~1.1.1", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, - "markdown-it-anchor": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", - "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", - "dev": true - }, - "markdown-it-chain": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/markdown-it-chain/-/markdown-it-chain-1.3.0.tgz", - "integrity": "sha512-XClV8I1TKy8L2qsT9iX3qiV+50ZtcInGXI80CA+DP62sMs7hXlyV/RM3hfwy5O3Ad0sJm9xIwQELgANfESo8mQ==", - "dev": true, - "requires": { - "webpack-chain": "^4.9.0" - }, - "dependencies": { - "webpack-chain": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.12.1.tgz", - "integrity": "sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==", - "dev": true, - "requires": { - "deepmerge": "^1.5.2", - "javascript-stringify": "^1.6.0" - } - } - } - }, - "markdown-it-container": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-2.0.0.tgz", - "integrity": "sha1-ABm0P9Au7+zi8ZYKKJX7qBpARpU=", - "dev": true - }, - "markdown-it-emoji": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz", - "integrity": "sha1-m+4OmpkKljupbfaYDE/dsF37Tcw=", - "dev": true - }, - "markdown-it-meta": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/markdown-it-meta/-/markdown-it-meta-0.0.1.tgz", - "integrity": "sha1-11to8RVlnK9WjkrUPLRgpHEkjDk=", - "dev": true, - "requires": { - "js-yaml": "^3.8.1" - } - }, - "markdown-it-table-of-contents": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.4.tgz", - "integrity": "sha512-TAIHTHPwa9+ltKvKPWulm/beozQU41Ab+FIefRaQV1NRnpzwcV9QOe6wXQS5WLivm5Q/nlo0rl6laGkMDZE7Gw==", - "dev": true - }, - "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", - "dev": true, - "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "medium-zoom": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.5.tgz", - "integrity": "sha512-aLGa6WlTuFKWvH88bqTrY5ztJMN+D0hd8UX6BYc4YSoPayppzETjZUcdVcksgaoQEMg4cZSmXPg846fTp2rjRQ==", - "dev": true - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "mini-css-extract-plugin": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz", - "integrity": "sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "^2.0.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "miniprogram-api-typings": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/miniprogram-api-typings/-/miniprogram-api-typings-2.11.0.tgz", - "integrity": "sha512-W+V267Ys4YqyMpLrAmpYCOzDlDAjd3Hhy7UKOAoztoyS/hDZgNQ1OhM2/pGnqVyLmz78U3oqxGx8Z+/SMrMZaQ==", - "dev": true - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.58", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", - "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", - "dev": true - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=", - "dev": true - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", - "dev": true, - "requires": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" - } - }, - "optjs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", - "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=", - "dev": true - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "optional": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - } - } - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "portfinder": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", - "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-calc": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", - "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", - "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz", - "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0", - "postcss-value-parser": "^3.3.1" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz", - "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==", - "dev": true, - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^7.0.6" - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-safe-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", - "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", - "dev": true, - "requires": { - "postcss": "^7.0.26" - } - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "dev": true, - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true, - "optional": true - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "dev": true - }, - "prismjs": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.20.0.tgz", - "integrity": "sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ==", - "dev": true, - "requires": { - "clipboard": "^2.0.0" - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "promise-timeout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/promise-timeout/-/promise-timeout-1.3.0.tgz", - "integrity": "sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==", - "dev": true - }, - "protobufjs": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz", - "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==", - "dev": true, - "requires": { - "ascli": "~1", - "bytebuffer": "~5", - "glob": "^7.0.5", - "yargs": "^3.10.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dev": true, - "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - } - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "pupa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", - "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "reduce": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce/-/reduce-1.0.2.tgz", - "integrity": "sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ==", - "dev": true, - "requires": { - "object-keys": "^1.1.0" - } - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", - "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4", - "private": "^0.1.8" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "registry-auth-token": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", - "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-markdown": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.3.0.tgz", - "integrity": "sha1-XktmdJOpNXlyjz1S7MHbnKUF3Jg=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", - "dev": true, - "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - }, - "dependencies": { - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "dev": true, - "optional": true - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", - "dev": true, - "requires": { - "node-forge": "0.9.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, - "sitemap": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-3.2.2.tgz", - "integrity": "sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg==", - "dev": true, - "requires": { - "lodash.chunk": "^4.2.0", - "lodash.padstart": "^4.6.1", - "whatwg-url": "^7.0.0", - "xmlbuilder": "^13.0.0" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "smoothscroll-polyfill": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz", - "integrity": "sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", - "dev": true, - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - } - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "std-env": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", - "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", - "dev": true, - "requires": { - "ci-info": "^1.6.0" - } - }, - "storejs": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/storejs/-/storejs-1.0.25.tgz", - "integrity": "sha512-UPHetMA+eg1il3GZI1Lnu5/uVszkEkozgnekbjyEFrRHmkjYygbTGJcdKz65Fae6myA+/VnVoes9835E6WS0zw==", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - } - }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "striptags": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.1.1.tgz", - "integrity": "sha1-yMPn/db7S7OjKjt1LltePjgJPr0=", - "dev": true - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "stylus": { - "version": "0.54.7", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz", - "integrity": "sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==", - "dev": true, - "requires": { - "css-parse": "~2.0.0", - "debug": "~3.1.0", - "glob": "^7.1.3", - "mkdirp": "~0.5.x", - "safer-buffer": "^2.1.2", - "sax": "~1.2.4", - "semver": "^6.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "stylus-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", - "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", - "dev": true, - "requires": { - "loader-utils": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "when": "~3.6.x" - } - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "dev": true, - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", - "dev": true - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "term-size": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", - "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", - "dev": true - }, - "terser": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz", - "integrity": "sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", - "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "dev": true, - "optional": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-factory": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-factory/-/to-factory-1.0.0.tgz", - "integrity": "sha1-hzivi9lxIK0dQEeXKtpVY7+UebE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", - "dev": true - }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "transliteration": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/transliteration/-/transliteration-2.1.11.tgz", - "integrity": "sha512-CMCKB2VHgc9JabQ3NiC2aXG5hEd3FKoU+F+zRQJoDRtZFdQwLYKfRSK8zH/B/4HML4WnOx8U0xmob1ehlt/xvw==", - "dev": true, - "requires": { - "yargs": "^15.3.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "dev": true, - "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "underscore": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", - "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "update-notifier": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", - "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==", - "dev": true, - "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "valine": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/valine/-/valine-1.4.4.tgz", - "integrity": "sha512-iy78hTnsFFsRmWtKRfTIZFe3LBU/d0MlRo81zY42Vbw6hIAhFr9eXQzZFK9LWfBhUvmhp+DjtT7a8413i/YpZg==", - "dev": true, - "requires": { - "balajs": "^1.0.7", - "balalaika": "^1.0.1", - "element-closest": "^3.0.2", - "leancloud-storage": "^3.0.4", - "storejs": "^1.0.25", - "xss": "^1.0.6" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "vssue": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/vssue/-/vssue-1.4.6.tgz", - "integrity": "sha512-s92qMIaI/9LzBQCUUaX0fpNlA3kRRGtm0hQxDN/YBziOB4NXTWgPvoimLreyjP75hRItHvVhKzkXiZ8bIMjy7A==", - "dev": true, - "requires": { - "@vssue/utils": "^1.4.0", - "github-markdown-css": "^3.0.1", - "vue": "^2.6.10", - "vue-i18n": "^8.11.2", - "vue-property-decorator": "^8.1.1" - } - }, - "vue": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", - "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==", - "dev": true - }, - "vue-class-component": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.3.tgz", - "integrity": "sha512-oEqYpXKaFN+TaXU+mRLEx8dX0ah85aAJEe61mpdoUrq0Bhe/6sWhyZX1JjMQLhVsHAkncyhedhmCdDVSasUtDw==", - "dev": true - }, - "vue-click-outside": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vue-click-outside/-/vue-click-outside-1.1.0.tgz", - "integrity": "sha512-pNyvAA9mRXJwPHlHJyjMb4IONSc7khS5lxGcMyE2EIKgNMAO279PWM9Hyq0d5J4FkiSRdmFLwnbjDd5UtPizHQ==", - "dev": true - }, - "vue-disqus": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/vue-disqus/-/vue-disqus-3.0.5.tgz", - "integrity": "sha512-T3Y68lXf5W2lYt6j4Y3kZ4opLPH0EAzqriy11MS4D4Q2+UN0tFuUXeYP1MxfvdyaCEboXSM6CUswxsULuNV70Q==", - "dev": true - }, - "vue-hot-reload-api": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", - "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", - "dev": true - }, - "vue-i18n": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.18.2.tgz", - "integrity": "sha512-0X5nBTCZAVjlwcrPaYJwNs3iipBBTv0AUHwQUOa8yP3XbQGWKbRHqBb3OhCYtum/IHDD21d/df5Xd2VgyxbxfA==", - "dev": true - }, - "vue-loader": { - "version": "15.9.2", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.2.tgz", - "integrity": "sha512-oXBubaY//CYEISBlHX+c2YPJbmOH68xXPXjFv4MAgPqQvUsnjrBAjCJi8HXZ/r/yfn0tPL5VZj1Zcp8mJPI8VA==", - "dev": true, - "requires": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - } - }, - "vue-property-decorator": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.4.2.tgz", - "integrity": "sha512-IqbARlvgPE2pzKfbecKxsu2yEH0Wv7hfHR6m4eZA3LTnNw9hveAX77vDfLFyTeMISS5N7Kucp/xRSHjcQ6bAfQ==", - "dev": true, - "requires": { - "vue-class-component": "^7.1.0" - } - }, - "vue-router": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.3.2.tgz", - "integrity": "sha512-5sEbcfb7MW8mY8lbUVbF4kgcipGXsagkM/X+pb6n0MhjP+RorWIUTPAPSqgPaiPOxVCXgAItBl8Vwz8vq78faA==", - "dev": true - }, - "vue-server-renderer": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.6.11.tgz", - "integrity": "sha512-V3faFJHr2KYfdSIalL+JjinZSHYUhlrvJ9pzCIjjwSh77+pkrsXpK4PucdPcng57+N77pd1LrKqwbqjQdktU1A==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "hash-sum": "^1.0.2", - "he": "^1.1.0", - "lodash.template": "^4.5.0", - "lodash.uniq": "^4.5.0", - "resolve": "^1.2.0", - "serialize-javascript": "^2.1.2", - "source-map": "0.5.6" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "vue-style-loader": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", - "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", - "dev": true, - "requires": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" - } - }, - "vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", - "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", - "dev": true, - "requires": { - "de-indent": "^1.0.2", - "he": "^1.1.0" - } - }, - "vue-template-es2015-compiler": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", - "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", - "dev": true - }, - "vuejs-paginate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vuejs-paginate/-/vuejs-paginate-2.1.0.tgz", - "integrity": "sha512-gnwyXlmCiDOu9MLWxN5UJ4PGijKGNOMpHG8ujsrynCzTJljn/rp7Jq0WiDGDAMi5/u0AHuYIHhced+tUW4jblA==" - }, - "vuepress": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-1.4.1.tgz", - "integrity": "sha512-vFePZLEx9FRJf5buDqSSBHHbTrPzBsL1u3Z4LX0HI9iQmHjkP+cGA8MMS0zVYy/xyYf28xWLWo3L/gj0rdMy7w==", - "dev": true, - "requires": { - "@vuepress/core": "1.4.1", - "@vuepress/theme-default": "1.4.1", - "cac": "^6.5.6", - "envinfo": "^7.2.0", - "opencollective-postinstall": "^2.0.2", - "update-notifier": "^4.0.0" - } - }, - "vuepress-html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vuepress-html-webpack-plugin/-/vuepress-html-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-BebAEl1BmWlro3+VyDhIOCY6Gef2MCBllEVAP3NUAtMguiyOwo/dClbwJ167WYmcxHJKLl7b0Chr9H7fpn1d0A==", - "dev": true, - "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - } - } - }, - "vuepress-plugin-autobar": { - "version": "github:boboidream/vuepress-bar#70525e843c81c8b2f8006245377a11bfdc6e323f", - "from": "github:boboidream/vuepress-bar", - "dev": true, - "requires": { - "glob": "^7.1.4", - "lodash.escaperegexp": "^4.1.2", - "lodash.sortby": "^4.7.0", - "lodash.startcase": "^4.4.0", - "markdown-it": "^8.4.2", - "markdown-it-meta": "0.0.1", - "transliteration": "^2.1.2" - } - }, - "vuepress-plugin-container": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/vuepress-plugin-container/-/vuepress-plugin-container-2.1.4.tgz", - "integrity": "sha512-l+EkeL+rC6DJch1wAZUFIkNDaz2TNOg4NQTHa3yMAsYkC+QaSRubGdN6YwOSmfjxVmM9s9D3gwBWw0O7OBhqRg==", - "dev": true, - "requires": { - "markdown-it-container": "^2.0.0" - } - }, - "vuepress-plugin-disqus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/vuepress-plugin-disqus/-/vuepress-plugin-disqus-0.2.0.tgz", - "integrity": "sha512-kx+AeVzjJ9lx9bufLt1/X35V1VXfnQ1srkDMIzFKD9NyQ3eycsWQRcGO1dFe1HMrY3+7fTu+1/JeUEUEpGZ5tw==", - "dev": true, - "requires": { - "vue-disqus": "^3.0.5" - } - }, - "vuepress-plugin-feed": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/vuepress-plugin-feed/-/vuepress-plugin-feed-0.1.8.tgz", - "integrity": "sha512-ZDJ2KTAxdeXiykBKOWTht4qleImaY9OEbm9cqQdc/54j0P45ax1PhJjsq5aTs3GcIE1nbZKLCd4fSzhRY6bijg==", - "dev": true, - "requires": { - "feed": "2.0.4", - "lodash.defaultsdeep": "4.6.1", - "lodash.isempty": "4.4.0", - "lodash.trimend": "^4.5.1", - "lodash.trimstart": "^4.5.1", - "remove-markdown": "0.3.0", - "striptags": "3.1.1" - } - }, - "vuepress-plugin-mailchimp": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/vuepress-plugin-mailchimp/-/vuepress-plugin-mailchimp-1.4.2.tgz", - "integrity": "sha512-4t5ZaKZXu5ZkwgE+WW//7CgXgz6DEhRefGrO5aql4PwapauNXlHKgQ2JMf9FRe5y5WHjNpDHYveEDNzISZmxJw==", - "dev": true, - "requires": { - "jsonp": "^0.2.1", - "query-string": "^6.9.0" - }, - "dependencies": { - "query-string": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.13.1.tgz", - "integrity": "sha512-RfoButmcK+yCta1+FuU8REvisx1oEzhMKwhLUNcepQTPGcNMp1sIqjnfCtfnvGSQZQEhaBHvccujtWoUV3TTbA==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", - "dev": true - } - } - }, - "vuepress-plugin-sitemap": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/vuepress-plugin-sitemap/-/vuepress-plugin-sitemap-2.3.1.tgz", - "integrity": "sha512-n+8lbukhrKrsI9H/EX0EBgkE1pn85LAQFvQ5dIvrZP4Kz6JxPOPPNTQmZMhahQV1tXbLZQCEN7A1WZH4x+arJQ==", - "dev": true, - "requires": { - "sitemap": "^3.0.0" - } - }, - "vuepress-plugin-smooth-scroll": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/vuepress-plugin-smooth-scroll/-/vuepress-plugin-smooth-scroll-0.0.3.tgz", - "integrity": "sha512-qsQkDftLVFLe8BiviIHaLV0Ea38YLZKKonDGsNQy1IE0wllFpFIEldWD8frWZtDFdx6b/O3KDMgVQ0qp5NjJCg==", - "dev": true, - "requires": { - "smoothscroll-polyfill": "^0.4.3" - } - }, - "vuepress-theme-reco": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/vuepress-theme-reco/-/vuepress-theme-reco-1.4.5.tgz", - "integrity": "sha512-6PUIzDIzfs8ZCdnUiPdYuCc1IHpRDuNXvD0RuBCbw8N6LsBsPSJy7aiffcDebjDyOpFFkEzTBDNH1EtVGkbExg==", - "dev": true, - "requires": { - "@vuepress-reco/vuepress-plugin-back-to-top": "^1.4.0", - "@vuepress-reco/vuepress-plugin-comments": "^1.4.3", - "@vuepress-reco/vuepress-plugin-loading-page": "^1.4.0", - "@vuepress-reco/vuepress-plugin-pagation": "^1.4.0", - "@vuepress/plugin-blog": "1.9.2", - "@vuepress/plugin-medium-zoom": "1.4.1", - "docsearch.js": "2.6.3", - "md5": "2.2.1", - "valine": "1.4.4", - "vue-click-outside": "1.1.0" - } - }, - "watchpack": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", - "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", - "dev": true, - "requires": { - "chokidar": "^3.4.0", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true, - "optional": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", - "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "webpack-chain": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.4.0.tgz", - "integrity": "sha512-f97PYqxU+9/u0IUqp/ekAHRhBD1IQwhBv3wlJo2nvyELpr2vNnUqO3XQEk+qneg0uWGP54iciotszpjfnEExFA==", - "dev": true, - "requires": { - "deepmerge": "^1.5.2", - "javascript-stringify": "^2.0.1" - }, - "dependencies": { - "javascript-stringify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.1.tgz", - "integrity": "sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow==", - "dev": true - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "webpackbar": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-3.2.0.tgz", - "integrity": "sha512-PC4o+1c8gWWileUfwabe0gqptlXUDJd5E0zbpr2xHP1VSOVlZVPBZ8j6NCR8zM5zbKdxPhctHXahgpNK1qFDPw==", - "dev": true, - "requires": { - "ansi-escapes": "^4.1.0", - "chalk": "^2.4.1", - "consola": "^2.6.0", - "figures": "^3.0.0", - "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true, - "requires": { - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "when": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", - "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, - "xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", - "dev": true - }, - "xmlbuilder": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", - "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==", - "dev": true - }, - "xss": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.7.tgz", - "integrity": "sha512-A9v7tblGvxu8TWXQC9rlpW96a+LN1lyw6wyhpTmmGW+FwRMactchBR3ROKSi33UPCUcUHSu8s9YP6F+K3Mw//w==", - "dev": true, - "requires": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "zepto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zepto/-/zepto-1.2.0.tgz", - "integrity": "sha1-4Se9nmb9hGvl6rSME5SIL3wOT5g=", - "dev": true - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 54330ab8..00000000 --- a/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "geekxh.com", - "version": "1.0.0", - "author": "geek小浩", - "scripts": { - "dev": "vuepress dev website", - "build": "vuepress build website" - }, - "devDependencies": { - "algoliasearch": "^4.2.0", - "vuepress": "^1.4.1", - "vuepress-theme-reco": "^1.4.5", - "vuepress-plugin-autobar": "github:boboidream/vuepress-bar" - }, - "description": "易懂的算法教程", - "dependencies": { - "vuejs-paginate": "^2.1.0" - } -} diff --git a/run.js b/run.js deleted file mode 100644 index 1f0d46f0..00000000 --- a/run.js +++ /dev/null @@ -1,9 +0,0 @@ -const { exec } = require('child_process') -exec('npm run build',(error, stdout, stderr) => { - if(error){ - console.log(`exec error: ${error}`) - return - } - console.log(`stdout: ${stdout}`); - console.log(`stderr: ${stderr}`); -}) diff --git a/website/.vuepress/config.js b/website/.vuepress/config.js deleted file mode 100644 index 4996ec52..00000000 --- a/website/.vuepress/config.js +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - title: "小浩算法", - plugins: [require('../../lib/autobar.js'), require('../../lib/Notification.js')], - description: '和小浩一起学算法', - // root : "./hell-algorithm", - theme: "reco", - themeConfig: { - sidebar: "auto", - searchPlaceholder: "搜索:KMP", - nav: [ - {text: 'GitHub', link: 'https://github.com/geekxh/hello-algorithm', icon: 'reco-github'} - ], - head:[ - ['link',{rel:'shortcut icon',href:'/favicon.ico'}] - ], - type: 'blog', - search: true, - searchMaxSuggestions: 10, - lastUpdated: '文章修订于', - author: '程序员小浩', - authorAvatar: '/code.png', - startYear: '2019', - valineConfig: { - placeholder: "留下你的问题,或者你想要的资源...", - avatar: "wavatar", - requiredFields: ['nick'], - appId: 'sINkW5sfpPxoqDyBqbpvTN79-gzGzoHsz', - appKey: '5tkDVulRNyjuAbCUekxU6zHW', - }, - noFoundPageByTencent: false - }, - markdown: { - lineNumbers: true, - } -} \ No newline at end of file diff --git a/website/.vuepress/public/1.gif b/website/.vuepress/public/1.gif deleted file mode 100644 index fedbb863..00000000 Binary files a/website/.vuepress/public/1.gif and /dev/null differ diff --git a/website/.vuepress/public/avatar.png b/website/.vuepress/public/avatar.png deleted file mode 100644 index 589db88f..00000000 Binary files a/website/.vuepress/public/avatar.png and /dev/null differ diff --git a/website/.vuepress/public/book.png b/website/.vuepress/public/book.png deleted file mode 100644 index d618cb0e..00000000 Binary files a/website/.vuepress/public/book.png and /dev/null differ diff --git a/website/.vuepress/public/code-2.jpg b/website/.vuepress/public/code-2.jpg deleted file mode 100644 index be466d72..00000000 Binary files a/website/.vuepress/public/code-2.jpg and /dev/null differ diff --git a/website/.vuepress/public/code-3.png b/website/.vuepress/public/code-3.png deleted file mode 100644 index 48592707..00000000 Binary files a/website/.vuepress/public/code-3.png and /dev/null differ diff --git a/website/.vuepress/public/code.jpeg b/website/.vuepress/public/code.jpeg deleted file mode 100644 index 14bab389..00000000 Binary files a/website/.vuepress/public/code.jpeg and /dev/null differ diff --git a/website/.vuepress/public/code.png b/website/.vuepress/public/code.png deleted file mode 100644 index 14bab389..00000000 Binary files a/website/.vuepress/public/code.png and /dev/null differ diff --git a/website/.vuepress/public/contact.jpeg b/website/.vuepress/public/contact.jpeg deleted file mode 100644 index ce2f3dbf..00000000 Binary files a/website/.vuepress/public/contact.jpeg and /dev/null differ diff --git a/website/.vuepress/public/daotu-1.png b/website/.vuepress/public/daotu-1.png deleted file mode 100644 index 77974f64..00000000 Binary files a/website/.vuepress/public/daotu-1.png and /dev/null differ diff --git a/website/.vuepress/public/daotu-2.png b/website/.vuepress/public/daotu-2.png deleted file mode 100644 index c65b7f63..00000000 Binary files a/website/.vuepress/public/daotu-2.png and /dev/null differ diff --git a/website/.vuepress/public/demo-1.png b/website/.vuepress/public/demo-1.png deleted file mode 100644 index c65b7f63..00000000 Binary files a/website/.vuepress/public/demo-1.png and /dev/null differ diff --git a/website/.vuepress/public/demo-2.png b/website/.vuepress/public/demo-2.png deleted file mode 100644 index da88e99a..00000000 Binary files a/website/.vuepress/public/demo-2.png and /dev/null differ diff --git a/website/.vuepress/public/demo.png b/website/.vuepress/public/demo.png deleted file mode 100644 index 550093fd..00000000 Binary files a/website/.vuepress/public/demo.png and /dev/null differ diff --git a/website/.vuepress/public/favicon.ico b/website/.vuepress/public/favicon.ico deleted file mode 100755 index 2582fc5c..00000000 Binary files a/website/.vuepress/public/favicon.ico and /dev/null differ diff --git a/website/.vuepress/public/img.png b/website/.vuepress/public/img.png deleted file mode 100644 index f4f1e1dd..00000000 Binary files a/website/.vuepress/public/img.png and /dev/null differ diff --git a/website/.vuepress/public/img2.png b/website/.vuepress/public/img2.png deleted file mode 100644 index 263b6bbb..00000000 Binary files a/website/.vuepress/public/img2.png and /dev/null differ diff --git a/website/.vuepress/public/suggest.jpeg b/website/.vuepress/public/suggest.jpeg deleted file mode 100644 index f4022145..00000000 Binary files a/website/.vuepress/public/suggest.jpeg and /dev/null differ diff --git a/website/.vuepress/styles/palette.styl b/website/.vuepress/styles/palette.styl deleted file mode 100644 index 36b7a734..00000000 --- a/website/.vuepress/styles/palette.styl +++ /dev/null @@ -1,15 +0,0 @@ -// 默认值 -$accentColor = #0074af // 主题颜色 -$textColor = #2c3e50 // 文本颜色 -$borderColor = #eaecef // 边框线颜色 -$codeBgColor = #282c34 // 代码块背景色 -$backgroundColor = #ffffff // 悬浮块背景色 - - -.navbar .logo { - height: 2.2rem; - min-width: 2.2rem; - margin-right: 0.8rem; - vertical-align: top; - border-radius: 0%; -} \ No newline at end of file diff --git a/website/.vuepress/tags/README.md b/website/.vuepress/tags/README.md deleted file mode 100644 index 45c5a70f..00000000 --- a/website/.vuepress/tags/README.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -isTags: true -sidebar: false -isComment: false ---- - -## tag cloud \ No newline at end of file diff --git "a/website/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/01.md" "b/website/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/01.md" deleted file mode 100644 index 5118a355..00000000 --- "a/website/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/01.md" +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: 小浩算法 ---- - - - -小浩算法是我在疫情期间完成的一部图解算法题典!目前共完成 105道 -高频面试算法题目,全部采用漫画图解的方式。该教程目前共有 11w 人阅读。 -面向 算法小白初中阶读者。所有代码均在 leetcode 上测试运行,可以直接右上角搜索题号。 - -::: danger 重要 -目前该教程全部免费,正因如此被一些不良商家拿去卖钱! 所以我把全部的内容都同步到了 [github](https://github.com/geekxh/hello-algorithm -),希望大家可以帮我点一个 star,防止有更多的人上当受骗! 小浩感激不尽! -::: - -*** - -为了提高大家的学习效率,我做了两件事: - -1、首先创建了万人刷题群,群里无广告,不套路。下方扫码回复【进群】 即可。 - -2、同时我把自己写的所有内容整理成了一本电子书。下方扫码回复【999】 下载。 - -
JPEG
\ No newline at end of file diff --git "a/website/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/02.md" "b/website/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/02.md" deleted file mode 100644 index 0a88d00b..00000000 --- "a/website/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/02.md" +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: 阅读指南 ---- - -## 为什么要做这样的一个算法图解合集 - -网上的算法教程杂乱且分散,质量层次不齐,浪费了大家大量宝贵的时间。很多题解,在我掌握题目后去看都费劲,更何况对于一些初学者。 - -## 本教程阅读门槛 - -本教程基本没有学习门槛。因为在每道题目中,我都会尽量去串基础知识,以达到学以致用的效果。 - -## 学完本教程期望达到什么样的目的 - -- 掌握基本的数据结构与算法 -- 掌握各类型高频面试算法题 - -## 本教程有何特色 - -每一道算法题都配有完整图解!仅此一家! - -## 题解是围绕什么编写的 - -掌握!所有的题解都以掌握二字为前提。不会追求过多的奇淫技巧,毕竟我们不是专门研究算法的人。我见过太多算法初学者,一个题解看不懂,转头又去看第二个题解,第二个看不懂,又去看第三个,直到最后放弃掉。浪费了时间,题目还是不会做,这图什么呢?所以本教程所有的题解都是以掌握为目标,尽量把每一道题的思路都讲的明明白白的。 - -## 题解是否严谨 - -绝对严谨,所有的题解都在leetcode上进行过测试运行。 - -## 没学过 java、go 是否可以学习 - -当然可以。我期望大家更多的是去关注算法的本身,而不是语言层面的东西。所以本教程,其实各语言都会使用一些,并不局限于 java、go。但是,我绝对不会使用任何语法特性!我希望大家不要被语言所束缚! - -## 是否可以按照本教程顺序来刷题 - -当然可以。一般刷题我们有两种策略,一种就是刷 leetcode 前一百道题目,另一种就是根据分类刷题。刷 leetcode 前一百道题,是因为这些题目都是经典题目。而根据分类,更适合算法小白和初中阶段读者。所以我在这里选择了根据分类来汇编,这样我们还可以在做一些题目的时候,与前面同类型的题目进行比较。 - -## 这些题目刷完能达到什么效果 - -刷完再说! - -## 你需要做什么 - -开干!奥利给! - -## 看完题目还是不懂怎么办? - -下方扫码,加我微信,我拉你到刷题群。和大家一起交流学习!(备注:进群) - -PNG \ No newline at end of file diff --git "a/website/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/03.md" "b/website/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/03.md" deleted file mode 100644 index 9e4333ea..00000000 --- "a/website/0.0.\345\255\246\344\271\240\351\241\273\347\237\245/03.md" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: 资源下载 ---- - -::: danger 重要 - -有一件事想额外告诉大家,我自己写的教程目前是全部免费的,但是近日我发现有人把我的教程拿去贩卖。 -正因如此, 我将我的内容全部放在 github 免费公开,希望大家可以进去帮我点一个 star ,支持一下,也防止有更多的人上当受骗!小浩感激不尽! - -[点这里支持](https://github.com/geekxh/hello-algorithm) -::: -::: tip -[点击即可下载我写的电子书:mx48 (希望下方扫码支持一下,谢谢)](https://pan.baidu.com/s/1Gb8m42Aktl3HYqI5HRmEow) - -扫码回复【999】,下载我整理的 40 张高清思维导图。 - -扫码回复【进群】,加入万人刷题群,群内可 BAT 内推。 - -扫码回复【面试】,下载 BAT 面试汇总题目。 -::: - -
JPEG
- -思维导图展示(扫码获取): - -
JPEG
- - - -我写的电子书展示(扫码获取): - -
JPEG
- diff --git "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/021/1.jpg" "b/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/021/1.jpg" deleted file mode 100644 index 3878fadd..00000000 Binary files "a/website/0.01.\346\214\207\345\257\274\345\255\246\344\271\240/021/1.jpg" and /dev/null differ diff --git "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002/1.png" "b/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002/1.png" deleted file mode 100644 index 356397ea..00000000 Binary files "a/website/1.0.\346\225\260\347\273\204\347\263\273\345\210\227/002/1.png" and /dev/null differ diff --git "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1.md" "b/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1.md" deleted file mode 100644 index 5746bbb2..00000000 --- "a/website/1.41.\345\233\236\346\272\257\347\263\273\345\210\227/1.md" +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: 全排列算法 -date: 2020-07-11 ---- - -> 今天为大家分享如何用算法来求全排列!话不多说,直接看题! - -## 01、全排列概念 - -> 什么是全排列?从 n 个不同元素中任取 m(m≤n)个元素,按照一定的顺序排列起来,叫做从 n 个不同元素中取出 m 个元素的一个排列。当 m=n 时所有的排列情况叫全排列。 - -
- -比如 [1,2,3] 全排列共有 6 种: - -PNG - -## 02、全排列题目 - -> 然后把上面的全排列稍微改改,就变成了一道算法题。。。 - -| 全排列问题 | -| ---------------------------------------------------------- | -| 给定一个 **没有重复** 数字的序列,返回其所有可能的全排列。 | - -**示例:** - -``` -输入: [1,2,3] - -输出: -[ - [1,2,3], - [1,3,2], - [2,1,3], - [2,3,1], - [3,1,2], - [3,2,1] -] -``` - -## 03、题解分析 - -> 这种由基础数学知识改编而成的题目,在面试时还是很受欢迎的。因为作为面试官,可以用这种题目,来显示自己的博学。(谬论) - -
- -假如我们不是做算法题,而是做数学题。我们会一个位置一个位置的来考虑,先写出以1开头的排列,再写出以2开头的排列,最后写出以3开头的排列。 - -PNG - -这种思路是不是很像深度优先(DFS)的求解过程呢? - -
- -1、我们先选择 1,然后为 1 的第二位选择 2,此时 1 的 第三位只能选择 3。 - -PNG - -2、然后完成了上面的步骤,我们需要回退到 1,因为只有 1 这里还存在别的选择 1-3,然后填写 1-3 后,只有 1-3-2 一种选择。 - -PNG - -3、此时我们需要从 1-3-2,回退到 1-3,再回退到 1,再回退到 根节点,然后重新选择 2。 - -PNG - -4、后面的流程与前面相似,我就不一步步的描述了。 - -PNG - -当然,如果不省略其回溯过程,就是下面这个样子: - -[TODO] - -上面分析是分析完了,但是仍然不妨碍你继续懵逼。。。“题目中不是给我的是一个数组吗?作为一个合格的算法小白,我特么根本就不知道 DFS 在这里面咋用啊!!”本来想扔完代码就走,想了想还是决定讲一下。 - -
- -我们把代码先丢出来(注意,这个代码不是最优的,这样写只是易于大家理解。比如我们还可以通过置换的方式来进行优化,又或者其他的优化方法。但是都大同小异,核心是回溯的过程): - -```java -//JAVA -class Solution { - List> ans = new ArrayList<>(); - - public List> permute(int[] nums) { - dfs(nums, new ArrayList<>()); - return ans; - } - - private void dfs(int[] nums, List tmp) { - System.out.println(Arrays.toString(nums) + "," + tmp); - if (tmp.size() == nums.length) { - ans.add(new ArrayList<>(tmp)); - } else { - for (int num : nums) { - if (!tmp.contains(num)) { - tmp.add(num); - dfs(nums, tmp); - tmp.remove(tmp.size() - 1); - } - } - } - } - -} -``` - -假若 nums 为 [1,2,3],会有下面的输出: - -PNG - -其实这个代码还是很容易理解的,他干了个啥事?就是当我们按顺序去枚举每一位时,我们要把已经选择过的数字排除掉(第16行代码),比如我们上面选择三个数字: - -
- -- 在枚举第一位的时候,就有三种情况 -- 在枚举第二位的时候,就只有两种情况(前面已经出现的一个数字不可以再出现) -- 在枚举第三位的时候,就只有一种情况(前面已经出现的两个数字不可以再出现) - -
- -整个代码其实就干了这么一件事!而 第12行 的代码,其实就是说**当枚举到最后一位的时候,这个就是我们要的排列结果,所以我们要放入到全排列结果集中。** - -
- -那这里还有一个很重要的代码,其实是 第19行,这一步其实是干啥!说白了就是在回到上一位时,我们要就把上一次的选择结果**撤销**掉。不然如果你之前选过了,后面不就不能继续用了么。 - -## 04、总结 - -> 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 - -
- -这是最简单的一道全排列题目,注意我在上面的题解中,并没有引入什么状态、路径、选择列表、结束条件之类的专业术语,甚至我连回溯的概念都没有提及。 - -PNG - -之所以这样讲,我是希望咱可以从最简单的人类思考出发,而不是去套用一些框架之类的东东。。。。当然,至于更多的概念和回溯框架的东西,我会在后面更为复杂的题目中为大家引入。 - -
- -好了,基本就是这样了。周末写文不容易,求个转发,来个评论。感谢~ \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01.md" "b/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01.md" deleted file mode 100644 index 2d7b886f..00000000 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/01.md" +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: 螺旋矩阵Ⅰ(54) -date: 2020-06-15 ---- - -> 今天为大家分享一道关于**螺旋矩阵**的问题。话不多说,直接看题目吧。 - -## 01、题目分析 - -| 第54题:螺旋矩阵 | -| ------------------------------------------------------------ | -| 定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 | - -**示例 1:** - -``` -输入: -[ - [ 1, 2, 3 ], - [ 4, 5, 6 ], - [ 7, 8, 9 ] -] -输出: [1,2,3,6,9,8,7,4,5] -``` - -**示例 2:** - -``` -输入: -[ - [1, 2, 3, 4], - [5, 6, 7, 8], - [9,10,11,12] -] -输出: [1,2,3,4,8,12,11,10,9,5,6,7] - - -``` - -## 02、题目分析 - -本题的思路,在于**模拟螺旋的移动轨迹**。 - -问题的难点,在于**想明白模拟过程中会遇到什么问题**。 - -那模拟的过程中会遇到什么样的问题?**边界处理**。 - -
- -因为只有我们能找到边界(边界包括:1、数组的边界 2、已经访问过的元素),才可以通过“**右,下,左,上**”的方向来进行移动。同时,每一次**碰壁**,就可以调整到下一个方向。 - -
- -思路明确了,我们看一下整个过程。假如我们的数组为: - -[ - - [1, 2, 3, 4], - - [5, 6, 7, 8], - - [9,10,11,12] - -] - -数组如下图所示: - -PNG - -我们首先对其设置好四个边界: - -``` -up := 0 -down := len(matrix) - 1 -left := 0 -right := len(matrix[0]) - 1 -``` - -如下图所示: - -PNG - -同时,我们定义x和y,来代表行和列。 - -如x=2,y=1,则 arr[2][1]=10(第3行第2列) - -PNG - -然后我们从第一个元素开始行军(y=left),完成第一行的遍历,直到碰壁。(y<=right) - -PNG - -下面关键的一步来了,**因为第一行已经走过了,我们将上界下调****(up++)**,同时转弯向下走。 - -PNG - -直到碰到底部时(x<=down),我们将**右界左调(right--)**,转弯向左走。 - -PNG - -后面向左和向上,分别完成**下界上调(down--)**和**左界右调(left++)**。 - -PNG - -最后,对剩下的矩阵重复整个过程,直到上下、左右的壁与壁碰在一起**(up <= down && left <= right,这是避免碰壁的条件)**。 - -## 03、Go语言示例 - -所以这道题很简单,只要会碰壁,就可以顺利得到代码(很漂亮,不是吗?),代码如下: - -```go -func spiralOrder(matrix [][]int) []int { - var result []int - if len(matrix) == 0 { - return result - } - left, right, up, down := 0, len(matrix[0])-1, 0, len(matrix)-1 - - var x, y int - for left <= right && up <= down { - for y = left; y <= right && avoid(left, right, up, down); y++ { - result = append(result, matrix[x][y]) - } - y-- - up++ - for x = up; x <= down && avoid(left, right, up, down); x++ { - result = append(result, matrix[x][y]) - } - x-- - right-- - for y = right; y >= left && avoid(left, right, up, down); y-- { - result = append(result, matrix[x][y]) - } - y++ - down-- - for x = down; x >= up && avoid(left, right, up, down); x-- { - result = append(result, matrix[x][y]) - } - x++ - left++ - } - return result -} - -func avoid(left, right, up, down int) bool { - return up <= down && left <= right -} -``` - -执行结果: - -PNG \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02.md" "b/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02.md" deleted file mode 100644 index 1aad5e42..00000000 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/02.md" +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: 只有两个键的键盘(650) -date: 2020-06-15 ---- - ->今天为大家分享一道关于**“复制” + “粘贴”**的题目。话不多说,直接看题吧。 - -## 01、题目分析 - -| 第650题:只有两个键的键盘 | -| ------------------------------------------------------------ | -| 最初在一个记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) : 你可以粘贴你上一次复制的字符。 | - -给定一个数字 n 。你需要使用**最少的操作次数**,在记事本中打印出恰好 n 个 'A'。输出能够打印出 n 个 'A' 的最少操作次数。 - -
- -**示例 1:** - -``` -输入: 3 -输出: 3 -解释: -最初, 我们只有一个字符 'A'。 -第 1 步, 我们使用 Copy All 操作。 -第 2 步, 我们使用 Paste 操作来获得 'AA'。 -第 3 步, 我们使用 Paste 操作来获得 'AAA'。 -``` - -
- -**说明:** - -n 的取值范围是 [1, 1000] 。 - -## 02、题目分析 - -本题的思路,在于**想明白复制和粘贴过程中的规律,找到如何组成N个A的最小操作数。** - -
- -我们从最简单的开始分析,假如我们给定数字为1,那啥也不用做,因为面板上本来就有一个A。 - -PNG - -假如我们给定数字为2,那我们需要做C-P,共计2次操作来得到。 - -PNG - -假如我们给定数字为3,那我们需要做C-P-P,共计3次操作来得到。 - -PNG - -假如我们给定数字为4,我们发现好像变得不一样了。因为我们有两种方法都可以得到目标。(C-P-C-P) - -PNG - -或者(C-P-P-P) - -PNG - -但是需要的步骤还是一样。 - -
- -好了,到这里为止,STOP!通过上面的分析,我们至少可以观察出:**如果 i 为质数,那么 i 是多少,就需要粘贴多少次**。即:素数次数为本身的结论。如 两个A = 2,三个A = 3,五个A = 5。 - -
- -那对于合数又该如何分析呢?(自然数中除能被1和本身整除外,还能被其他的数整除的数)这里我们直接给出答案:合数的次数为**将其分解质因数的操作次数的和。**解释一下,这是个啥意思?举个例子: - -
- -比如30,可以分解为:3*2*5。什么意思呢?我们演示一遍:首先复制1,进行2次粘贴得到3。然后复制3,进行1次粘贴得到6。然后复制6,进行4次粘贴得到30。总共需要(CPPCPCPPPP) - -PNG - -> 注意:这里由于每一次都需要进行一次复制,**所以直接就等于分解质因数的操作次数的和**。并且分解的顺序,不会影响到结果。 - -
- -综合上面的分析,我们得出分析结果: - -1、质数次数为其本身。 - -2、合数次数为将其分解到**所有不能再分解的质数的操作次数的和**。 - -
- -## 03、Go语言示例 - -分析完毕,代码如下所示: - -```go -func minSteps(n int) int { - res := 0 - for i := 2; i <= n; i++ { - for n%i == 0 { - res += i - n /= i - } - } - return res -} -``` - -执行结果: - -PNG \ No newline at end of file diff --git "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03.md" "b/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03.md" deleted file mode 100644 index 9a7cdce8..00000000 --- "a/website/1.99.\345\205\266\344\273\226\350\241\245\345\205\205\351\242\230\347\233\256/03.md" +++ /dev/null @@ -1,265 +0,0 @@ ---- -title: 24点游戏(679) -date: 2020-06-15 ---- - ->“**24点**”是一种数学游戏,正如象棋、围棋一样是一种人们喜闻乐见的娱乐活动。它始于何年何月已无从考究,但它以自己独具的数学魅力和丰富的内涵正逐渐被越来越多的人们所接受。今天就为大家分享一道关于“24点”的算法题目。 -> ->
-> ->话不多说,直接看题。 - -## 01、题目分析 - -| 第679题:24点游戏 | -| ------------------------------------------------------------ | -| 你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通 *,/,+,-,(,) 的运算得到 24 。 | - -**示例 1:** - -``` -输入: [4, 1, 8, 7] -输出: True -解释: (8-4) * (7-1) = 24 -``` - -**示例 2:** - -``` -输入: [1, 2, 1, 2] -输出: False -``` - -注意: - -​ 1、除法**运算符 / 表示实数除法,而不是整数除法**。例如 4 / (1 - 2/3) = 12 。 - -​ 2、每个运算符对两个数进行运算。特别是我们不能用 - 作为一元运算符。例如,[1, 1, 1, 1] 作为输入时,表达式 -1 - 1 - 1 - 1 是不允许的。 - -​ 3、你不能将数字连接在一起。例如,输入为 [1, 2, 1, 2] 时,不能写成 12 + 12 。 - -
- -## 02、题目分析 - -拿到题目,第一反应就可以想到**暴力求解。如果我们要判断给出的4张牌是否可以通过组合得到24,那我们只需找出所有的可组合的方式进行遍历。** - -
- -4个数字,3个操作符,外加括号,基本目测就能想到组合数不会大到超出边界。所以,我们只要**把他们统统列出来,不就可以进行求解了吗**?说干就干! - -
- -我们首先定义个方法,用来判断**两个数的的所有操作符组合是否可以得到24**。 - -```go -func judgePoint24_2(a, b float64) bool { - return a+b == 24 || a*b == 24 || a-b == 24 || b-a == 24 || a/b == 24 || b/a == 24  -} -``` - -但是这个方法写的正确吗?其实不对!因为在计算机中,实数在计算和存储过程中会有一些微小的误差,**对于一些与零作比较的语句来说,有时会因误差而导致原本是等于零但结果却小于或大于零之类的情况发生**,所以常用一个很小的数 **1e-6** 代替 0,进行判读! - -
- -(1e-6:表示1乘以10的负6次方。Math.abs(x)<1e-6 其实相当于x==0。1e-6(也就是0.000001)叫做**epslon**,用来抵消浮点运算中因为误差造成的相等无法判断的情况。这个知识点需要掌握!) - -
- -举个例子: - -```go -func main() { - var a float64 - var b float64 - b = 2.0 - //math.Sqrt:开平方根 - c := math.Sqrt(2) - a = b - c*c - fmt.Println(a == 0)                  //false - fmt.Println(a < 1e-6 && a > -(1e-6)) //true -} -``` - -这里直接用 **a==0** 就会得到false,但是通过 **a < 1e-6 && a > -(1e-6)** 却可以进行准确的判断。 - -
- -所以我们将上面的方法改写: - -```go -//go语言 -//judgePoint24_2:判断两个数的所有操作符组合是否可以得到24 func judgePoint24_2(a, b float64) bool { - return (a+b < 24+1e-6 && a+b > 24-1e-6) || - (a*b < 24+1e-6 && a*b > 24-1e-6) || - (a-b < 24+1e-6 && a-b > 24-1e-6) || - (b-a < 24+1e-6 && b-a > 24-1e-6) || - (a/b < 24+1e-6 && a/b > 24-1e-6) || - (b/a < 24+1e-6 && b/a > 24-1e-6)  -} -``` - -完善了通过两个数来判断是否可以得到24的方法,现在我们加一个判断三个数是否可以得到24的方法。 - -```go -//硬核代码,不服来辩! -func judgePoint24_3(a, b, c float64) bool { 3 - return judgePoint24_2(a+b, c) || - judgePoint24_2(a-b, c) || - judgePoint24_2(a*b, c) || - judgePoint24_2(a/b, c) || - judgePoint24_2(b-a, c) || - judgePoint24_2(b/a, c) ||        - judgePoint24_2(a+c, b) || - judgePoint24_2(a-c, b) || - judgePoint24_2(a*c, b) || - judgePoint24_2(a/c, b) || - judgePoint24_2(c-a, b) || - judgePoint24_2(c/a, b) || - judgePoint24_2(c+b, a) || - judgePoint24_2(c-b, a) || - judgePoint24_2(c*b, a) || - judgePoint24_2(c/b, a) || - judgePoint24_2(b-c, a) || - judgePoint24_2(b/c, a) -} -``` - -好了。三个数的也出来了,我们再加一个判断4个数为24点的方法:(排列组合,我想大家都会....) - -```go -//硬核代码,不服来辩! -func judgePoint24(nums []int) bool { - return judgePoint24_3(float64(nums[0])+float64(nums[1]), float64(nums[2]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])-float64(nums[1]), float64(nums[2]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])*float64(nums[1]), float64(nums[2]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])/float64(nums[1]), float64(nums[2]), float64(nums[3])) || - judgePoint24_3(float64(nums[1])-float64(nums[0]), float64(nums[2]), float64(nums[3])) || - judgePoint24_3(float64(nums[1])/float64(nums[0]), float64(nums[2]), float64(nums[3])) || - - judgePoint24_3(float64(nums[0])+float64(nums[2]), float64(nums[1]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])-float64(nums[2]), float64(nums[1]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])*float64(nums[2]), float64(nums[1]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])/float64(nums[2]), float64(nums[1]), float64(nums[3])) || - judgePoint24_3(float64(nums[2])-float64(nums[0]), float64(nums[1]), float64(nums[3])) || - judgePoint24_3(float64(nums[2])/float64(nums[0]), float64(nums[1]), float64(nums[3])) || - - judgePoint24_3(float64(nums[0])+float64(nums[3]), float64(nums[2]), float64(nums[1])) || - judgePoint24_3(float64(nums[0])-float64(nums[3]), float64(nums[2]), float64(nums[1])) || - judgePoint24_3(float64(nums[0])*float64(nums[3]), float64(nums[2]), float64(nums[1])) || - judgePoint24_3(float64(nums[0])/float64(nums[3]), float64(nums[2]), float64(nums[1])) || - judgePoint24_3(float64(nums[3])-float64(nums[0]), float64(nums[2]), float64(nums[1])) || - judgePoint24_3(float64(nums[3])/float64(nums[0]), float64(nums[2]), float64(nums[1])) || - - judgePoint24_3(float64(nums[2])+float64(nums[3]), float64(nums[0]), float64(nums[1])) || - judgePoint24_3(float64(nums[2])-float64(nums[3]), float64(nums[0]), float64(nums[1])) || - judgePoint24_3(float64(nums[2])*float64(nums[3]), float64(nums[0]), float64(nums[1])) || - judgePoint24_3(float64(nums[2])/float64(nums[3]), float64(nums[0]), float64(nums[1])) || - judgePoint24_3(float64(nums[3])-float64(nums[2]), float64(nums[0]), float64(nums[1])) || - judgePoint24_3(float64(nums[3])/float64(nums[2]), float64(nums[0]), float64(nums[1])) || - - judgePoint24_3(float64(nums[1])+float64(nums[2]), float64(nums[0]), float64(nums[3])) || - judgePoint24_3(float64(nums[1])-float64(nums[2]), float64(nums[0]), float64(nums[3])) || - judgePoint24_3(float64(nums[1])*float64(nums[2]), float64(nums[0]), float64(nums[3])) || - judgePoint24_3(float64(nums[1])/float64(nums[2]), float64(nums[0]), float64(nums[3])) || - judgePoint24_3(float64(nums[2])-float64(nums[1]), float64(nums[0]), float64(nums[3])) || - judgePoint24_3(float64(nums[2])/float64(nums[1]), float64(nums[0]), float64(nums[3])) || - - judgePoint24_3(float64(nums[1])+float64(nums[3]), float64(nums[2]), float64(nums[0])) || - judgePoint24_3(float64(nums[1])-float64(nums[3]), float64(nums[2]), float64(nums[0])) || - judgePoint24_3(float64(nums[1])*float64(nums[3]), float64(nums[2]), float64(nums[0])) || - judgePoint24_3(float64(nums[1])/float64(nums[3]), float64(nums[2]), float64(nums[0])) || - judgePoint24_3(float64(nums[3])-float64(nums[1]), float64(nums[2]), float64(nums[0])) || - judgePoint24_3(float64(nums[3])/float64(nums[1]), float64(nums[2]), float64(nums[0])) -} -``` - -## 03、Go语言示例 - -我们整合全部代码如下: - -```go -func judgePoint24(nums []int) bool { - return judgePoint24_3(float64(nums[0])+float64(nums[1]), float64(nums[2]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])-float64(nums[1]), float64(nums[2]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])*float64(nums[1]), float64(nums[2]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])/float64(nums[1]), float64(nums[2]), float64(nums[3])) || - judgePoint24_3(float64(nums[1])-float64(nums[0]), float64(nums[2]), float64(nums[3])) || - judgePoint24_3(float64(nums[1])/float64(nums[0]), float64(nums[2]), float64(nums[3])) || - - judgePoint24_3(float64(nums[0])+float64(nums[2]), float64(nums[1]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])-float64(nums[2]), float64(nums[1]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])*float64(nums[2]), float64(nums[1]), float64(nums[3])) || - judgePoint24_3(float64(nums[0])/float64(nums[2]), float64(nums[1]), float64(nums[3])) || - judgePoint24_3(float64(nums[2])-float64(nums[0]), float64(nums[1]), float64(nums[3])) || - judgePoint24_3(float64(nums[2])/float64(nums[0]), float64(nums[1]), float64(nums[3])) || - - judgePoint24_3(float64(nums[0])+float64(nums[3]), float64(nums[2]), float64(nums[1])) || - judgePoint24_3(float64(nums[0])-float64(nums[3]), float64(nums[2]), float64(nums[1])) || - judgePoint24_3(float64(nums[0])*float64(nums[3]), float64(nums[2]), float64(nums[1])) || - judgePoint24_3(float64(nums[0])/float64(nums[3]), float64(nums[2]), float64(nums[1])) || - judgePoint24_3(float64(nums[3])-float64(nums[0]), float64(nums[2]), float64(nums[1])) || - judgePoint24_3(float64(nums[3])/float64(nums[0]), float64(nums[2]), float64(nums[1])) || - - judgePoint24_3(float64(nums[2])+float64(nums[3]), float64(nums[0]), float64(nums[1])) || - judgePoint24_3(float64(nums[2])-float64(nums[3]), float64(nums[0]), float64(nums[1])) || - judgePoint24_3(float64(nums[2])*float64(nums[3]), float64(nums[0]), float64(nums[1])) || - judgePoint24_3(float64(nums[2])/float64(nums[3]), float64(nums[0]), float64(nums[1])) || - judgePoint24_3(float64(nums[3])-float64(nums[2]), float64(nums[0]), float64(nums[1])) || - judgePoint24_3(float64(nums[3])/float64(nums[2]), float64(nums[0]), float64(nums[1])) || - - judgePoint24_3(float64(nums[1])+float64(nums[2]), float64(nums[0]), float64(nums[3])) || - judgePoint24_3(float64(nums[1])-float64(nums[2]), float64(nums[0]), float64(nums[3])) || - judgePoint24_3(float64(nums[1])*float64(nums[2]), float64(nums[0]), float64(nums[3])) || - judgePoint24_3(float64(nums[1])/float64(nums[2]), float64(nums[0]), float64(nums[3])) || - judgePoint24_3(float64(nums[2])-float64(nums[1]), float64(nums[0]), float64(nums[3])) || - judgePoint24_3(float64(nums[2])/float64(nums[1]), float64(nums[0]), float64(nums[3])) || - - judgePoint24_3(float64(nums[1])+float64(nums[3]), float64(nums[2]), float64(nums[0])) || - judgePoint24_3(float64(nums[1])-float64(nums[3]), float64(nums[2]), float64(nums[0])) || - judgePoint24_3(float64(nums[1])*float64(nums[3]), float64(nums[2]), float64(nums[0])) || - judgePoint24_3(float64(nums[1])/float64(nums[3]), float64(nums[2]), float64(nums[0])) || - judgePoint24_3(float64(nums[3])-float64(nums[1]), float64(nums[2]), float64(nums[0])) || - judgePoint24_3(float64(nums[3])/float64(nums[1]), float64(nums[2]), float64(nums[0])) -} - -func judgePoint24_3(a, b, c float64) bool { - return judgePoint24_2(a+b, c) || - judgePoint24_2(a-b, c) || - judgePoint24_2(a*b, c) || - judgePoint24_2(a/b, c) || - judgePoint24_2(b-a, c) || - judgePoint24_2(b/a, c) || - - judgePoint24_2(a+c, b) || - judgePoint24_2(a-c, b) || - judgePoint24_2(a*c, b) || - judgePoint24_2(a/c, b) || - judgePoint24_2(c-a, b) || - judgePoint24_2(c/a, b) || - - judgePoint24_2(c+b, a) || - judgePoint24_2(c-b, a) || - judgePoint24_2(c*b, a) || - judgePoint24_2(c/b, a) || - judgePoint24_2(b-c, a) || - judgePoint24_2(b/c, a) -} - -func judgePoint24_2(a, b float64) bool { - return (a+b < 24+1e-6 && a+b > 24-1e-6) || - (a*b < 24+1e-6 && a*b > 24-1e-6) || - (a-b < 24+1e-6 && a-b > 24-1e-6) || - (b-a < 24+1e-6 && b-a > 24-1e-6) || - (a/b < 24+1e-6 && a/b > 24-1e-6) || - (b/a < 24+1e-6 && b/a > 24-1e-6) -} -``` - -执行结果: - -PNG - -
- -> 由于代码**过于硬核**,我们直接击败100%的对手:(没想到吧!代码还可以这么写~) \ No newline at end of file diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/0.hello.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/0.hello.md" deleted file mode 100644 index fb065357..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/0.hello.md" +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: 排序专栏 ---- - -所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。是《数据结构与算法》中最基本的算法之一。 - -> 我们常说的十大排序算法为:冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数 - -## 基本分类 - -我们常根据是否可以在线性时间内比较对其分类: - -![总体分类](./res/sort-0.png) - -## 时间复杂度: - -![时间复杂度](./res/sort-1.png) - -## 如何记忆时间复杂度呢? - -1. 平方阶 (O(n2)) 插入、选择、冒泡 -2. 线性对数阶 (O(nlog2n)) 快速、归并、堆 -3. 特殊的希尔 O(n^(1.3—2)) -4. 牛皮的线性 基数、桶、箱、计数 - -## 啥是稳定: - -稳定:如果 a 原本在 b 前面,而 a=b,排序之后 a 仍然在 b 的前面。 -不稳定:如果 a 原本在 b 的前面,而 a=b,排序之后 a 可能会出现在 b 的后面。 - -## 哪些稳定: - -稳定:冒泡、插入、归并和基数。 -不稳定:选择、快速、希尔、堆。 - -**排序算法大纲** - -1. [冒泡排序](1.bubbleSort.md) -2. [选择排序](2.selectionSort.md) -3. [插入排序](3.insertionSort.md) -4. [希尔排序](4.shellSort.md) -5. [归并排序](5.mergeSort.md) -6. [快速排序](6.quickSort.md) -7. [堆排序](7.heapSort.md) -8. [计数排序](8.countingSort.md) -9. [桶排序](9.bucketSort.md) -10. [基数排序](10.radixSort.md) - ----- \ No newline at end of file diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/1.bubbleSort.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/1.bubbleSort.md" deleted file mode 100644 index 91af5806..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/1.bubbleSort.md" +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: 冒泡排序 ---- - -冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 - -作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。 - - -## 1. 算法步骤 - -1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 - -2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 - -3. 针对所有的元素重复以上的步骤,除了最后一个。 - -4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 - - -## 2. 动图演示 - -![动图演示](./res/bubbleSort.gif) - - -## 3. 最慢和最快 - -正序时最快,反序时最慢 - -## 4. JavaScript 代码实现 - -```js -function bubbleSort(arr) { - var len = arr.length; - for (var i = 0; i < len - 1; i++) { - for (var j = 0; j < len - 1 - i; j++) { - if (arr[j] > arr[j+1]) { // 相邻元素两两对比 - var temp = arr[j+1]; // 元素交换 - arr[j+1] = arr[j]; - arr[j] = temp; - } - } - } - return arr; -} -``` - -## 5. Python 代码实现 - -```python -def bubbleSort(arr): - for i in range(1, len(arr)): - for j in range(0, len(arr)-i): - if arr[j] > arr[j+1]: - arr[j], arr[j + 1] = arr[j + 1], arr[j] - return arr -``` - -## 6. Go 代码实现 - -```go -func bubbleSort(arr []int) []int { - length := len(arr) - for i := 0; i < length; i++ { - for j := 0; j < length-1-i; j++ { - if arr[j] > arr[j+1] { - arr[j], arr[j+1] = arr[j+1], arr[j] - } - } - } - return arr -} -``` - -## 7. Java 代码实现 - -```java -public class BubbleSort implements IArraySort { - - @Override - public int[] sort(int[] sourceArray) throws Exception { - // 对 arr 进行拷贝,不改变参数内容 - int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); - - for (int i = 1; i < arr.length; i++) { - // 设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。 - boolean flag = true; - - for (int j = 0; j < arr.length - i; j++) { - if (arr[j] > arr[j + 1]) { - int tmp = arr[j]; - arr[j] = arr[j + 1]; - arr[j + 1] = tmp; - - flag = false; - } - } - - if (flag) { - break; - } - } - return arr; - } -} -``` - -## 8. PHP 代码实现 - -```php -function bubbleSort($arr) -{ - $len = count($arr); - for ($i = 0; $i < $len - 1; $i++) { - for ($j = 0; $j < $len - 1 - $i; $j++) { - if ($arr[$j] > $arr[$j+1]) { - $tmp = $arr[$j]; - $arr[$j] = $arr[$j+1]; - $arr[$j+1] = $tmp; - } - } - } - return $arr; -} -``` diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/10.radixSort.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/10.radixSort.md" deleted file mode 100644 index f7c39662..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/10.radixSort.md" +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: 基数排序 ---- - -基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 - - -## 1. 基数排序 vs 计数排序 vs 桶排序 - -基数排序有两种方法: - -这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异案例看大家发的: - - - 基数排序:根据键值的每位数字来分配桶; - - 计数排序:每个桶只存储单一键值; - - 桶排序:每个桶存储一定范围的数值; - - -## 2. LSD 基数排序动图演示 - -![动图演示](./res/radixSort.gif) - - -## 3. JavaScript 代码实现 - -```js -//LSD Radix Sort -var counter = []; -function radixSort(arr, maxDigit) { - var mod = 10; - var dev = 1; - for (var i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) { - for(var j = 0; j < arr.length; j++) { - var bucket = parseInt((arr[j] % mod) / dev); - if(counter[bucket]==null) { - counter[bucket] = []; - } - counter[bucket].push(arr[j]); - } - var pos = 0; - for(var j = 0; j < counter.length; j++) { - var value = null; - if(counter[j]!=null) { - while ((value = counter[j].shift()) != null) { - arr[pos++] = value; - } - } - } - } - return arr; -} -``` - - -## 4. python 代码实现 - -```python -def radix(arr): - - digit = 0 - max_digit = 1 - max_value = max(arr) - --- -title: 找出列表中最大的位数 - while 10**max_digit < max_value: - max_digit = max_digit + 1 - - while digit < max_digit: - temp = [[] for i in range(10)] - for i in arr: - --- -title: 求出每一个元素的个、十、百位的值 - t = int((i/10**digit)%10) - temp[t].append(i) - - coll = [] - for bucket in temp: - for i in bucket: - coll.append(i) - - arr = coll - digit = digit + 1 - - return arr -``` - - -## 5. Java 代码实现 - -```java -/** - * 基数排序 - * 考虑负数的情况还可以参考: https://code.i-harness.com/zh-CN/q/e98fa9 - */ -public class RadixSort implements IArraySort { - - @Override - public int[] sort(int[] sourceArray) throws Exception { - // 对 arr 进行拷贝,不改变参数内容 - int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); - - int maxDigit = getMaxDigit(arr); - return radixSort(arr, maxDigit); - } - - /** - * 获取最高位数 - */ - private int getMaxDigit(int[] arr) { - int maxValue = getMaxValue(arr); - return getNumLenght(maxValue); - } - - private int getMaxValue(int[] arr) { - int maxValue = arr[0]; - for (int value : arr) { - if (maxValue < value) { - maxValue = value; - } - } - return maxValue; - } - - protected int getNumLenght(long num) { - if (num == 0) { - return 1; - } - int lenght = 0; - for (long temp = num; temp != 0; temp /= 10) { - lenght++; - } - return lenght; - } - - private int[] radixSort(int[] arr, int maxDigit) { - int mod = 10; - int dev = 1; - - for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) { - // 考虑负数的情况,这里扩展一倍队列数,其中 [0-9]对应负数,[10-19]对应正数 (bucket + 10) - int[][] counter = new int[mod * 2][0]; - - for (int j = 0; j < arr.length; j++) { - int bucket = ((arr[j] % mod) / dev) + mod; - counter[bucket] = arrayAppend(counter[bucket], arr[j]); - } - - int pos = 0; - for (int[] bucket : counter) { - for (int value : bucket) { - arr[pos++] = value; - } - } - } - - return arr; - } - - /** - * 自动扩容,并保存数据 - * - * @param arr - * @param value - */ - private int[] arrayAppend(int[] arr, int value) { - arr = Arrays.copyOf(arr, arr.length + 1); - arr[arr.length - 1] = value; - return arr; - } -} -``` - -## 6. PHP 代码实现 - -```php -function radixSort($arr, $maxDigit = null) -{ - if ($maxDigit === null) { - $maxDigit = max($arr); - } - $counter = []; - for ($i = 0; $i < $maxDigit; $i++) { - for ($j = 0; $j < count($arr); $j++) { - preg_match_all('/\d/', (string) $arr[$j], $matches); - $numArr = $matches[0]; - $lenTmp = count($numArr); - $bucket = array_key_exists($lenTmp - $i - 1, $numArr) - ? intval($numArr[$lenTmp - $i - 1]) - : 0; - if (!array_key_exists($bucket, $counter)) { - $counter[$bucket] = []; - } - $counter[$bucket][] = $arr[$j]; - } - $pos = 0; - for ($j = 0; $j < count($counter); $j++) { - $value = null; - if ($counter[$j] !== null) { - while (($value = array_shift($counter[$j])) !== null) { - $arr[$pos++] = $value; - } - } - } - } - - return $arr; -} -``` diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/2.selectionSort.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/2.selectionSort.md" deleted file mode 100644 index b16ba180..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/2.selectionSort.md" +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: 选择排序 ---- - -选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。 - - -## 1. 算法步骤 - -1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 - -2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 - -3. 重复第二步,直到所有元素均排序完毕。 - - -## 2. 动图演示 - -![动图演示](./res/selectionSort.gif) - - -## 3. JavaScript 代码实现 - -```js -function selectionSort(arr) { - var len = arr.length; - var minIndex, temp; - for (var i = 0; i < len - 1; i++) { - minIndex = i; - for (var j = i + 1; j < len; j++) { - if (arr[j] < arr[minIndex]) { // 寻找最小的数 - minIndex = j; // 将最小数的索引保存 - } - } - temp = arr[i]; - arr[i] = arr[minIndex]; - arr[minIndex] = temp; - } - return arr; -} -``` - -## 4. Python 代码实现 - -```python -def selectionSort(arr): - for i in range(len(arr) - 1): - --- -title: 记录最小数的索引 - minIndex = i - for j in range(i + 1, len(arr)): - if arr[j] < arr[minIndex]: - minIndex = j - --- -title: i 不是最小数时,将 i 和最小数进行交换 - if i != minIndex: - arr[i], arr[minIndex] = arr[minIndex], arr[i] - return arr -``` - -## 5. Go 代码实现 - -```go -func selectionSort(arr []int) []int { - length := len(arr) - for i := 0; i < length-1; i++ { - min := i - for j := i + 1; j < length; j++ { - if arr[min] > arr[j] { - min = j - } - } - arr[i], arr[min] = arr[min], arr[i] - } - return arr -} -``` - -## 6. Java 代码实现 - -```java -public class SelectionSort implements IArraySort { - - @Override - public int[] sort(int[] sourceArray) throws Exception { - int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); - - // 总共要经过 N-1 轮比较 - for (int i = 0; i < arr.length - 1; i++) { - int min = i; - - // 每轮需要比较的次数 N-i - for (int j = i + 1; j < arr.length; j++) { - if (arr[j] < arr[min]) { - // 记录目前能找到的最小值元素的下标 - min = j; - } - } - - // 将找到的最小值和i位置所在的值进行交换 - if (i != min) { - int tmp = arr[i]; - arr[i] = arr[min]; - arr[min] = tmp; - } - - } - return arr; - } -} -``` - -## 7. PHP 代码实现 - -```php -function selectionSort($arr) -{ - $len = count($arr); - for ($i = 0; $i < $len - 1; $i++) { - $minIndex = $i; - for ($j = $i + 1; $j < $len; $j++) { - if ($arr[$j] < $arr[$minIndex]) { - $minIndex = $j; - } - } - $temp = $arr[$i]; - $arr[$i] = $arr[$minIndex]; - $arr[$minIndex] = $temp; - } - return $arr; -} -``` diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/3.insertionSort.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/3.insertionSort.md" deleted file mode 100644 index daf30736..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/3.insertionSort.md" +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: 插入排序 ---- - -插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 - -插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。 - - -## 1. 算法步骤 - -1. 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 - -2. 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。) - - -## 2. 动图演示 - -![动图演示](./res/insertionSort.gif) - - -## 3. JavaScript 代码实现 - -```js -function insertionSort(arr) { - var len = arr.length; - var preIndex, current; - for (var i = 1; i < len; i++) { - preIndex = i - 1; - current = arr[i]; - while(preIndex >= 0 && arr[preIndex] > current) { - arr[preIndex+1] = arr[preIndex]; - preIndex--; - } - arr[preIndex+1] = current; - } - return arr; -} -``` - -## 4. Python 代码实现 - -```python -def insertionSort(arr): - for i in range(len(arr)): - preIndex = i-1 - current = arr[i] - while preIndex >= 0 and arr[preIndex] > current: - arr[preIndex+1] = arr[preIndex] - preIndex-=1 - arr[preIndex+1] = current -    return arr -``` - -## 5. Go 代码实现 -```go -func insertionSort(arr []int) []int { - for i := range arr { - preIndex := i - 1 - current := arr[i] - for preIndex >= 0 && arr[preIndex] > current { - arr[preIndex+1] = arr[preIndex] - preIndex -= 1 - } - arr[preIndex+1] = current - } - return arr -} -``` - -## 6. Java 代码实现 - -```java -public class InsertSort implements IArraySort { - - @Override - public int[] sort(int[] sourceArray) throws Exception { - // 对 arr 进行拷贝,不改变参数内容 - int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); - - // 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的 - for (int i = 1; i < arr.length; i++) { - - // 记录要插入的数据 - int tmp = arr[i]; - - // 从已经排序的序列最右边的开始比较,找到比其小的数 - int j = i; - while (j > 0 && tmp < arr[j - 1]) { - arr[j] = arr[j - 1]; - j--; - } - - // 存在比其小的数,插入 - if (j != i) { - arr[j] = tmp; - } - - } - return arr; - } -} -``` - -## 7. PHP 代码实现 - -```php -function insertionSort($arr) -{ - $len = count($arr); - for ($i = 1; $i < $len; $i++) { - $preIndex = $i - 1; - $current = $arr[$i]; - while($preIndex >= 0 && $arr[$preIndex] > $current) { - $arr[$preIndex+1] = $arr[$preIndex]; - $preIndex--; - } - $arr[$preIndex+1] = $current; - } - return $arr; -} -``` diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/4.shellSort.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/4.shellSort.md" deleted file mode 100644 index 83466cb4..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/4.shellSort.md" +++ /dev/null @@ -1,148 +0,0 @@ ---- -title: 希尔排序 ---- - -希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 - -希尔排序是基于插入排序的以下两点性质而提出改进方法的: - - - 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率; - - 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位; - -希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。 - - -## 1. 算法步骤 - -1. 选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1; - -2. 按增量序列个数 k,对序列进行 k 趟排序; - -3. 每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。 - - -## 2. JavaScript 代码实现 - -```js -function shellSort(arr) { - var len = arr.length, - temp, - gap = 1; - while(gap < len/3) { //动态定义间隔序列 - gap =gap*3+1; - } - for (gap; gap > 0; gap = Math.floor(gap/3)) { - for (var i = gap; i < len; i++) { - temp = arr[i]; - for (var j = i-gap; j >= 0 && arr[j] > temp; j-=gap) { - arr[j+gap] = arr[j]; - } - arr[j+gap] = temp; - } - } - return arr; -} -``` - -## 3. Python 代码实现 - -```python -def shellSort(arr): - import math - gap=1 - while(gap < len(arr)/3): - gap = gap*3+1 - while gap > 0: - for i in range(gap,len(arr)): - temp = arr[i] - j = i-gap - while j >=0 and arr[j] > temp: - arr[j+gap]=arr[j] - j-=gap - arr[j+gap] = temp - gap = math.floor(gap/3) - return arr -} -``` - -## 4. Go 代码实现 - -```go -func shellSort(arr []int) []int { - length := len(arr) - gap := 1 - for gap < length/3 { - gap = gap*3 + 1 - } - for gap > 0 { - for i := gap; i < length; i++ { - temp := arr[i] - j := i - gap - for j >= 0 && arr[j] > temp { - arr[j+gap] = arr[j] - j -= gap - } - arr[j+gap] = temp - } - gap = gap / 3 - } - return arr -} -``` - -## 5. Java 代码实现 - -```java -public class ShellSort implements IArraySort { - - @Override - public int[] sort(int[] sourceArray) throws Exception { - // 对 arr 进行拷贝,不改变参数内容 - int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); - - int gap = 1; - while (gap < arr.length/3) { - gap = gap * 3 + 1; - } - - while (gap > 0) { - for (int i = gap; i < arr.length; i++) { - int tmp = arr[i]; - int j = i - gap; - while (j >= 0 && arr[j] > tmp) { - arr[j + gap] = arr[j]; - j -= gap; - } - arr[j + gap] = tmp; - } - gap = (int) Math.floor(gap / 3); - } - - return arr; - } -} -``` - -## 6. PHP 代码实现 - -```php -function shellSort($arr) -{ - $len = count($arr); - $temp = 0; - $gap = 1; - while($gap < $len / 3) { - $gap = $gap * 3 + 1; - } - for ($gap; $gap > 0; $gap = floor($gap / 3)) { - for ($i = $gap; $i < $len; $i++) { - $temp = $arr[$i]; - for ($j = $i - $gap; $j >= 0 && $arr[$j] > $temp; $j -= $gap) { - $arr[$j+$gap] = $arr[$j]; - } - $arr[$j+$gap] = $temp; - } - } - return $arr; -} -``` diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/5.mergeSort.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/5.mergeSort.md" deleted file mode 100644 index 79ad1b14..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/5.mergeSort.md" +++ /dev/null @@ -1,227 +0,0 @@ ---- -title: 归并排序 ---- - -归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 - -作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: - - 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法); - - 自下而上的迭代; - -在《数据结构与算法 JavaScript 描述》中,作者给出了自下而上的迭代方法。但是对于递归法,作者却认为: - -> However, it is not possible to do so in JavaScript, as the recursion goes too deep for the language to handle. -> -> 然而,在 JavaScript 中这种方式不太可行,因为这个算法的递归深度对它来讲太深了。 - - -说实话,我不太理解这句话。意思是 JavaScript 编译器内存太小,递归太深容易造成内存溢出吗?还望有大神能够指教。 - -和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 的时间复杂度。代价是需要额外的内存空间。 - - -## 2. 算法步骤 - -1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列; - -2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置; - -3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置; - -4. 重复步骤 3 直到某一指针达到序列尾; - -5. 将另一序列剩下的所有元素直接复制到合并序列尾。 - - -## 3. 动图演示 - -![动图演示](./res/mergeSort.gif) - - -## 4. JavaScript 代码实现 - -```js -function mergeSort(arr) { // 采用自上而下的递归方法 - var len = arr.length; - if(len < 2) { - return arr; - } - var middle = Math.floor(len / 2), - left = arr.slice(0, middle), - right = arr.slice(middle); - return merge(mergeSort(left), mergeSort(right)); -} - -function merge(left, right) -{ - var result = []; - - while (left.length && right.length) { - if (left[0] <= right[0]) { - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - while (left.length) - result.push(left.shift()); - - while (right.length) - result.push(right.shift()); - - return result; -} -``` - -## 5. Python 代码实现 - -```python -def mergeSort(arr): - import math - if(len(arr)<2): - return arr - middle = math.floor(len(arr)/2) - left, right = arr[0:middle], arr[middle:] - return merge(mergeSort(left), mergeSort(right)) - -def merge(left,right): - result = [] - while left and right: - if left[0] <= right[0]: - result.append(left.pop(0)); - else: - result.append(right.pop(0)); - while left: - result.append(left.pop(0)); - while right: - result.append(right.pop(0)); - return result -``` - -## 6. Go 代码实现 - -```go -func mergeSort(arr []int) []int { - length := len(arr) - if length < 2 { - return arr - } - middle := length / 2 - left := arr[0:middle] - right := arr[middle:] - return merge(mergeSort(left), mergeSort(right)) -} - -func merge(left []int, right []int) []int { - var result []int - for len(left) != 0 && len(right) != 0 { - if left[0] <= right[0] { - result = append(result, left[0]) - left = left[1:] - } else { - result = append(result, right[0]) - right = right[1:] - } - } - - for len(left) != 0 { - result = append(result, left[0]) - left = left[1:] - } - - for len(right) != 0 { - result = append(result, right[0]) - right = right[1:] - } - - return result -} -``` - -## 7. Java 代码实现 - -```java -public class MergeSort implements IArraySort { - - @Override - public int[] sort(int[] sourceArray) throws Exception { - // 对 arr 进行拷贝,不改变参数内容 - int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); - - if (arr.length < 2) { - return arr; - } - int middle = (int) Math.floor(arr.length / 2); - - int[] left = Arrays.copyOfRange(arr, 0, middle); - int[] right = Arrays.copyOfRange(arr, middle, arr.length); - - return merge(sort(left), sort(right)); - } - - protected int[] merge(int[] left, int[] right) { - int[] result = new int[left.length + right.length]; - int i = 0; - while (left.length > 0 && right.length > 0) { - if (left[0] <= right[0]) { - result[i++] = left[0]; - left = Arrays.copyOfRange(left, 1, left.length); - } else { - result[i++] = right[0]; - right = Arrays.copyOfRange(right, 1, right.length); - } - } - - while (left.length > 0) { - result[i++] = left[0]; - left = Arrays.copyOfRange(left, 1, left.length); - } - - while (right.length > 0) { - result[i++] = right[0]; - right = Arrays.copyOfRange(right, 1, right.length); - } - - return result; - } - -} -``` - -## 8. PHP 代码实现 - -```php -function mergeSort($arr) -{ - $len = count($arr); - if ($len < 2) { - return $arr; - } - $middle = floor($len / 2); - $left = array_slice($arr, 0, $middle); - $right = array_slice($arr, $middle); - return merge(mergeSort($left), mergeSort($right)); -} - -function merge($left, $right) -{ - $result = []; - - while (count($left) > 0 && count($right) > 0) { - if ($left[0] <= $right[0]) { - $result[] = array_shift($left); - } else { - $result[] = array_shift($right); - } - } - - while (count($left)) - $result[] = array_shift($left); - - while (count($right)) - $result[] = array_shift($right); - - return $result; -} -``` \ No newline at end of file diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/6.quickSort.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/6.quickSort.md" deleted file mode 100644 index 6511131b..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/6.quickSort.md" +++ /dev/null @@ -1,257 +0,0 @@ ---- -title: 快速排序 ---- - -快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 - -快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。 - -快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。 - -快速排序的名字起的是简单粗暴,因为一听到这个名字你就知道它存在的意义,就是快,而且效率高!它是处理大数据最快的排序算法之一了。虽然 Worst Case 的时间复杂度达到了 O(n²),但是人家就是优秀,在大多数情况下都比平均时间复杂度为 O(n logn) 的排序算法表现要更好,可是这是为什么呢,我也不知道。好在我的强迫症又犯了,查了 N 多资料终于在《算法艺术与信息学竞赛》上找到了满意的答案: - -> 快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。 - - -## 1. 算法步骤 - -1. 从数列中挑出一个元素,称为 “基准”(pivot); - -2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作; - -3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序; - -递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 - - -## 2. 动图演示 - -![动图演示](./res/quickSort.gif) - - -## 3. JavaScript 代码实现 - -```js -function quickSort(arr, left, right) { - var len = arr.length, - partitionIndex, - left = typeof left != 'number' ? 0 : left, - right = typeof right != 'number' ? len - 1 : right; - - if (left < right) { - partitionIndex = partition(arr, left, right); - quickSort(arr, left, partitionIndex-1); - quickSort(arr, partitionIndex+1, right); - } - return arr; -} - -function partition(arr, left ,right) { // 分区操作 - var pivot = left, // 设定基准值(pivot) - index = pivot + 1; - for (var i = index; i <= right; i++) { - if (arr[i] < arr[pivot]) { - swap(arr, i, index); - index++; - } - } - swap(arr, pivot, index - 1); - return index-1; -} - -function swap(arr, i, j) { - var temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; -} -function partition2(arr, low, high) { - let pivot = arr[low]; - while (low < high) { - while (low < high && arr[high] > pivot) { - --high; - } - arr[low] = arr[high]; - while (low < high && arr[low] <= pivot) { - ++low; - } - arr[high] = arr[low]; - } - arr[low] = pivot; - return low; -} - -function quickSort2(arr, low, high) { - if (low < high) { - let pivot = partition2(arr, low, high); - quickSort2(arr, low, pivot - 1); - quickSort2(arr, pivot + 1, high); - } - return arr; -} - -``` - - -## 4. Python 代码实现 - -```python -def quickSort(arr, left=None, right=None): - left = 0 if not isinstance(left,(int, float)) else left - right = len(arr)-1 if not isinstance(right,(int, float)) else right - if left < right: - partitionIndex = partition(arr, left, right) - quickSort(arr, left, partitionIndex-1) - quickSort(arr, partitionIndex+1, right) - return arr - -def partition(arr, left, right): - pivot = left - index = pivot+1 - i = index - while i <= right: - if arr[i] < arr[pivot]: - swap(arr, i, index) - index+=1 - i+=1 - swap(arr,pivot,index-1) - return index-1 - -def swap(arr, i, j): - arr[i], arr[j] = arr[j], arr[i] -``` - -## 5. Go 代码实现 - -```go -func quickSort(arr []int) []int { - return _quickSort(arr, 0, len(arr)-1) -} - -func _quickSort(arr []int, left, right int) []int { - if left < right { - partitionIndex := partition(arr, left, right) - _quickSort(arr, left, partitionIndex-1) - _quickSort(arr, partitionIndex+1, right) - } - return arr -} - -func partition(arr []int, left, right int) int { - pivot := left - index := pivot + 1 - - for i := index; i <= right; i++ { - if arr[i] < arr[pivot] { - swap(arr, i, index) - index += 1 - } - } - swap(arr, pivot, index-1) - return index - 1 -} - -func swap(arr []int, i, j int) { - arr[i], arr[j] = arr[j], arr[i] -} -``` - -## 6. C++版 - - -```C++ - //严蔚敏《数据结构》标准分割函数 - Paritition1(int A[], int low, int high) { - int pivot = A[low]; - while (low < high) { - while (low < high && A[high] >= pivot) { - --high; - } - A[low] = A[high]; - while (low < high && A[low] <= pivot) { - ++low; - } - A[high] = A[low]; - } - A[low] = pivot; - return low; - } - - void QuickSort(int A[], int low, int high) //快排母函数 - { - if (low < high) { - int pivot = Paritition1(A, low, high); - QuickSort(A, low, pivot - 1); - QuickSort(A, pivot + 1, high); - } - } -``` - -## 7. Java 代码实现 - -```java -public class QuickSort implements IArraySort { - - @Override - public int[] sort(int[] sourceArray) throws Exception { - // 对 arr 进行拷贝,不改变参数内容 - int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); - - return quickSort(arr, 0, arr.length - 1); - } - - private int[] quickSort(int[] arr, int left, int right) { - if (left < right) { - int partitionIndex = partition(arr, left, right); - quickSort(arr, left, partitionIndex - 1); - quickSort(arr, partitionIndex + 1, right); - } - return arr; - } - - private int partition(int[] arr, int left, int right) { - // 设定基准值(pivot) - int pivot = left; - int index = pivot + 1; - for (int i = index; i <= right; i++) { - if (arr[i] < arr[pivot]) { - swap(arr, i, index); - index++; - } - } - swap(arr, pivot, index - 1); - return index - 1; - } - - private void swap(int[] arr, int i, int j) { - int temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - } - -} -``` - -## 8. PHP 代码实现 - -```php -function quickSort($arr) -{ - if (count($arr) <= 1) - return $arr; - $middle = $arr[0]; - $leftArray = array(); - $rightArray = array(); - - for ($i = 1; $i < count($arr); $i++) { - if ($arr[$i] > $middle) - $rightArray[] = $arr[$i]; - else - $leftArray[] = $arr[$i]; - } - $leftArray = quickSort($leftArray); - $leftArray[] = $middle; - - $rightArray = quickSort($rightArray); - return array_merge($leftArray, $rightArray); -} -``` diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/7.heapSort.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/7.heapSort.md" deleted file mode 100644 index b51c46e0..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/7.heapSort.md" +++ /dev/null @@ -1,259 +0,0 @@ ---- -title: 堆排序 ---- - -堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法: - -1. 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列; -2. 小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列; - -堆排序的平均时间复杂度为 Ο(nlogn)。 - - -## 1. 算法步骤 - -1. 将待排序序列构建成一个堆 H[0……n-1],根据(升序降序需求)选择大顶堆或小顶堆; - -2. 把堆首(最大值)和堆尾互换; - -3. 把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置; - -4. 重复步骤 2,直到堆的尺寸为 1。 - - -## 2. 动图演示 - -![动图演示](./res/heapSort.gif) - - -## 3. JavaScript 代码实现 - -```js -var len; // 因为声明的多个函数都需要数据长度,所以把len设置成为全局变量 - -function buildMaxHeap(arr) { // 建立大顶堆 - len = arr.length; - for (var i = Math.floor(len/2); i >= 0; i--) { - heapify(arr, i); - } -} - -function heapify(arr, i) { // 堆调整 - var left = 2 * i + 1, - right = 2 * i + 2, - largest = i; - - if (left < len && arr[left] > arr[largest]) { - largest = left; - } - - if (right < len && arr[right] > arr[largest]) { - largest = right; - } - - if (largest != i) { - swap(arr, i, largest); - heapify(arr, largest); - } -} - -function swap(arr, i, j) { - var temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; -} - -function heapSort(arr) { - buildMaxHeap(arr); - - for (var i = arr.length-1; i > 0; i--) { - swap(arr, 0, i); - len--; - heapify(arr, 0); - } - return arr; -} -``` -## 4. Python 代码实现 - -```python -def buildMaxHeap(arr): - import math - for i in range(math.floor(len(arr)/2),-1,-1): - heapify(arr,i) - -def heapify(arr, i): - left = 2*i+1 - right = 2*i+2 - largest = i - if left < arrLen and arr[left] > arr[largest]: - largest = left - if right < arrLen and arr[right] > arr[largest]: - largest = right - - if largest != i: - swap(arr, i, largest) - heapify(arr, largest) - -def swap(arr, i, j): - arr[i], arr[j] = arr[j], arr[i] - -def heapSort(arr): - global arrLen - arrLen = len(arr) - buildMaxHeap(arr) - for i in range(len(arr)-1,0,-1): - swap(arr,0,i) - arrLen -=1 - heapify(arr, 0) -    return arr -``` - -## 5. Go 代码实现 - -```go -func heapSort(arr []int) []int { - arrLen := len(arr) - buildMaxHeap(arr, arrLen) - for i := arrLen - 1; i >= 0; i-- { - swap(arr, 0, i) - arrLen -= 1 - heapify(arr, 0, arrLen) - } - return arr -} - -func buildMaxHeap(arr []int, arrLen int) { - for i := arrLen / 2; i >= 0; i-- { - heapify(arr, i, arrLen) - } -} - -func heapify(arr []int, i, arrLen int) { - left := 2*i + 1 - right := 2*i + 2 - largest := i - if left < arrLen && arr[left] > arr[largest] { - largest = left - } - if right < arrLen && arr[right] > arr[largest] { - largest = right - } - if largest != i { - swap(arr, i, largest) - heapify(arr, largest, arrLen) - } -} - -func swap(arr []int, i, j int) { - arr[i], arr[j] = arr[j], arr[i] -} -``` - -## 6. Java 代码实现 - -```java -public class HeapSort implements IArraySort { - - @Override - public int[] sort(int[] sourceArray) throws Exception { - // 对 arr 进行拷贝,不改变参数内容 - int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); - - int len = arr.length; - - buildMaxHeap(arr, len); - - for (int i = len - 1; i > 0; i--) { - swap(arr, 0, i); - len--; - heapify(arr, 0, len); - } - return arr; - } - - private void buildMaxHeap(int[] arr, int len) { - for (int i = (int) Math.floor(len / 2); i >= 0; i--) { - heapify(arr, i, len); - } - } - - private void heapify(int[] arr, int i, int len) { - int left = 2 * i + 1; - int right = 2 * i + 2; - int largest = i; - - if (left < len && arr[left] > arr[largest]) { - largest = left; - } - - if (right < len && arr[right] > arr[largest]) { - largest = right; - } - - if (largest != i) { - swap(arr, i, largest); - heapify(arr, largest, len); - } - } - - private void swap(int[] arr, int i, int j) { - int temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - } - -} -``` - -## 7. PHP 代码实现 - -```php -function buildMaxHeap(&$arr) -{ - global $len; - for ($i = floor($len/2); $i >= 0; $i--) { - heapify($arr, $i); - } -} - -function heapify(&$arr, $i) -{ - global $len; - $left = 2 * $i + 1; - $right = 2 * $i + 2; - $largest = $i; - - if ($left < $len && $arr[$left] > $arr[$largest]) { - $largest = $left; - } - - if ($right < $len && $arr[$right] > $arr[$largest]) { - $largest = $right; - } - - if ($largest != $i) { - swap($arr, $i, $largest); - heapify($arr, $largest); - } -} - -function swap(&$arr, $i, $j) -{ - $temp = $arr[$i]; - $arr[$i] = $arr[$j]; - $arr[$j] = $temp; -} - -function heapSort($arr) { - global $len; - $len = count($arr); - buildMaxHeap($arr); - for ($i = count($arr) - 1; $i > 0; $i--) { - swap($arr, 0, $i); - $len--; - heapify($arr, 0); - } - return $arr; -} -``` diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/8.countingSort.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/8.countingSort.md" deleted file mode 100644 index 9a415c26..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/8.countingSort.md" +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: 计数排序 ---- - -计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 - - -## 1. 算法步骤 - -1. 找出原数组中元素值最大的,记为max。 - -2. 创建一个新数组count,其长度是max加1,其元素默认值都为0。 - -3. 遍历原数组中的元素,以原数组中的元素作为count数组的索引,以原数组中的元素出现次数作为count数组的元素值。 - -4. 创建结果数组result,起始索引index。 - -5. 遍历count数组,找出其中元素值大于0的元素,将其对应的索引作为元素值填充到result数组中去,每处理一次,count中的该元素值减1,直到该元素值不大于0,依次处理count中剩下的元素。 - -6. 返回结果数组result。 - -## 2. 动图演示 - -![动图演示](./res/countingSort.gif) - -## 3. JavaScript 代码实现 - -```js -function countingSort(arr, maxValue) { - var bucket = new Array(maxValue+1), - sortedIndex = 0; - arrLen = arr.length, - bucketLen = maxValue + 1; - - for (var i = 0; i < arrLen; i++) { - if (!bucket[arr[i]]) { - bucket[arr[i]] = 0; - } - bucket[arr[i]]++; - } - - for (var j = 0; j < bucketLen; j++) { - while(bucket[j] > 0) { - arr[sortedIndex++] = j; - bucket[j]--; - } - } - - return arr; -} -``` - -## 4. Python 代码实现 - - -```python -def countingSort(arr, maxValue): - bucketLen = maxValue+1 - bucket = [0]*bucketLen - sortedIndex =0 - arrLen = len(arr) - for i in range(arrLen): - if not bucket[arr[i]]: - bucket[arr[i]]=0 - bucket[arr[i]]+=1 - for j in range(bucketLen): - while bucket[j]>0: - arr[sortedIndex] = j - sortedIndex+=1 - bucket[j]-=1 - return arr -``` - -## 5. Go 代码实现 - -```go -func countingSort(arr []int, maxValue int) []int { - bucketLen := maxValue + 1 - bucket := make([]int, bucketLen) // 初始为0的数组 - - sortedIndex := 0 - length := len(arr) - - for i := 0; i < length; i++ { - bucket[arr[i]] += 1 - } - - for j := 0; j < bucketLen; j++ { - for bucket[j] > 0 { - arr[sortedIndex] = j - sortedIndex += 1 - bucket[j] -= 1 - } - } - - return arr -} -``` - -## 6. Java 代码实现 - -```java -public class CountingSort implements IArraySort { - - @Override - public int[] sort(int[] sourceArray) throws Exception { - // 对 arr 进行拷贝,不改变参数内容 - int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); - - int maxValue = getMaxValue(arr); - - return countingSort(arr, maxValue); - } - - private int[] countingSort(int[] arr, int maxValue) { - int bucketLen = maxValue + 1; - int[] bucket = new int[bucketLen]; - - for (int value : arr) { - bucket[value]++; - } - - int sortedIndex = 0; - for (int j = 0; j < bucketLen; j++) { - while (bucket[j] > 0) { - arr[sortedIndex++] = j; - bucket[j]--; - } - } - return arr; - } - - private int getMaxValue(int[] arr) { - int maxValue = arr[0]; - for (int value : arr) { - if (maxValue < value) { - maxValue = value; - } - } - return maxValue; - } - -} -``` - -## 7. PHP 代码实现 - -```php -function countingSort($arr, $maxValue = null) -{ - if ($maxValue === null) { - $maxValue = max($arr); - } - for ($m = 0; $m < $maxValue + 1; $m++) { - $bucket[] = null; - } - - $arrLen = count($arr); - for ($i = 0; $i < $arrLen; $i++) { - if (!array_key_exists($arr[$i], $bucket)) { - $bucket[$arr[$i]] = 0; - } - $bucket[$arr[$i]]++; - } - - $sortedIndex = 0; - foreach ($bucket as $key => $len) { - if($len !== null){ - for($j = 0; $j < $len; $j++){ - $arr[$sortedIndex++] = $key; - } - } - } - - return $arr; -} -``` \ No newline at end of file diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/9.bucketSort.md" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/9.bucketSort.md" deleted file mode 100644 index 93b59012..00000000 --- "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/9.bucketSort.md" +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: 桶排序 ---- - -桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点: - -1. 在额外空间充足的情况下,尽量增大桶的数量 -2. 使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中 - -同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。 - - -## 1. 什么时候最快 - -当输入的数据可以均匀的分配到每一个桶中。 - - -## 2. 什么时候最慢 - -当输入的数据被分配到了同一个桶中。 - -## 3. 动图演示 - -![动图演示](./res/bucket.gif) - -## 4. JavaScript 代码实现 - -```js -function bucketSort(arr, bucketSize) { - if (arr.length === 0) { - return arr; - } - - var i; - var minValue = arr[0]; - var maxValue = arr[0]; - for (i = 1; i < arr.length; i++) { - if (arr[i] < minValue) { - minValue = arr[i]; // 输入数据的最小值 - } else if (arr[i] > maxValue) { - maxValue = arr[i]; // 输入数据的最大值 - } - } - - //桶的初始化 - var DEFAULT_BUCKET_SIZE = 5; // 设置桶的默认数量为5 - bucketSize = bucketSize || DEFAULT_BUCKET_SIZE; - var bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1; - var buckets = new Array(bucketCount); - for (i = 0; i < buckets.length; i++) { - buckets[i] = []; - } - - //利用映射函数将数据分配到各个桶中 - for (i = 0; i < arr.length; i++) { - buckets[Math.floor((arr[i] - minValue) / bucketSize)].push(arr[i]); - } - - arr.length = 0; - for (i = 0; i < buckets.length; i++) { - insertionSort(buckets[i]); // 对每个桶进行排序,这里使用了插入排序 - for (var j = 0; j < buckets[i].length; j++) { - arr.push(buckets[i][j]); - } - } - - return arr; -} -``` - -## 5. Java 代码实现 - -```java -public class BucketSort implements IArraySort { - - private static final InsertSort insertSort = new InsertSort(); - - @Override - public int[] sort(int[] sourceArray) throws Exception { - // 对 arr 进行拷贝,不改变参数内容 - int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); - - return bucketSort(arr, 5); - } - - private int[] bucketSort(int[] arr, int bucketSize) throws Exception { - if (arr.length == 0) { - return arr; - } - - int minValue = arr[0]; - int maxValue = arr[0]; - for (int value : arr) { - if (value < minValue) { - minValue = value; - } else if (value > maxValue) { - maxValue = value; - } - } - - int bucketCount = (int) Math.floor((maxValue - minValue) / bucketSize) + 1; - int[][] buckets = new int[bucketCount][0]; - - // 利用映射函数将数据分配到各个桶中 - for (int i = 0; i < arr.length; i++) { - int index = (int) Math.floor((arr[i] - minValue) / bucketSize); - buckets[index] = arrAppend(buckets[index], arr[i]); - } - - int arrIndex = 0; - for (int[] bucket : buckets) { - if (bucket.length <= 0) { - continue; - } - // 对每个桶进行排序,这里使用了插入排序 - bucket = insertSort.sort(bucket); - for (int value : bucket) { - arr[arrIndex++] = value; - } - } - - return arr; - } - - /** - * 自动扩容,并保存数据 - * - * @param arr - * @param value - */ - private int[] arrAppend(int[] arr, int value) { - arr = Arrays.copyOf(arr, arr.length + 1); - arr[arr.length - 1] = value; - return arr; - } - -} -``` - -## 6. PHP 代码实现 - -```php -function bucketSort($arr, $bucketSize = 5) -{ - if (count($arr) === 0) { - return $arr; - } - - $minValue = $arr[0]; - $maxValue = $arr[0]; - for ($i = 1; $i < count($arr); $i++) { - if ($arr[$i] < $minValue) { - $minValue = $arr[$i]; - } else if ($arr[$i] > $maxValue) { - $maxValue = $arr[$i]; - } - } - - $bucketCount = floor(($maxValue - $minValue) / $bucketSize) + 1; - $buckets = array(); - for ($i = 0; $i < count($buckets); $i++) { - $buckets[$i] = []; - } - - for ($i = 0; $i < count($arr); $i++) { - $buckets[floor(($arr[$i] - $minValue) / $bucketSize)][] = $arr[$i]; - } - - $arr = array(); - for ($i = 0; $i < count($buckets); $i++) { - $bucketTmp = $buckets[$i]; - sort($bucketTmp); - for ($j = 0; $j < count($bucketTmp); $j++) { - $arr[] = $bucketTmp[$j]; - } - } - - return $arr; -} -``` \ No newline at end of file diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/bubbleSort.gif" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/bubbleSort.gif" deleted file mode 100644 index 5f767d45..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/bubbleSort.gif" and /dev/null differ diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/bucket.gif" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/bucket.gif" deleted file mode 100644 index 3137e0fb..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/bucket.gif" and /dev/null differ diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/countingSort.gif" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/countingSort.gif" deleted file mode 100644 index df987af7..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/countingSort.gif" and /dev/null differ diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/heapSort.gif" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/heapSort.gif" deleted file mode 100644 index 653e17b7..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/heapSort.gif" and /dev/null differ diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/insertionSort.gif" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/insertionSort.gif" deleted file mode 100644 index bab6db57..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/insertionSort.gif" and /dev/null differ diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/mergeSort.gif" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/mergeSort.gif" deleted file mode 100644 index 3f0adb94..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/mergeSort.gif" and /dev/null differ diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/quickSort.gif" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/quickSort.gif" deleted file mode 100644 index 6a3faec9..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/quickSort.gif" and /dev/null differ diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/radixSort.gif" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/radixSort.gif" deleted file mode 100644 index f5f8c801..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/radixSort.gif" and /dev/null differ diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/selectionSort.gif" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/selectionSort.gif" deleted file mode 100644 index 17a2cc7b..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/selectionSort.gif" and /dev/null differ diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/sort-0.png" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/sort-0.png" deleted file mode 100644 index eafe9d6e..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/sort-0.png" and /dev/null differ diff --git "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/sort-1.png" "b/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/sort-1.png" deleted file mode 100644 index 7935fff2..00000000 Binary files "a/website/2.0.\346\216\222\345\272\217\347\263\273\345\210\227/res/sort-1.png" and /dev/null differ diff --git a/website/README.md b/website/README.md deleted file mode 100644 index a03eab9e..00000000 --- a/website/README.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 奥利给 ---- - -这是一个彩蛋。 \ No newline at end of file diff --git a/yarn-error.log b/yarn-error.log deleted file mode 100644 index d5ae00cd..00000000 --- a/yarn-error.log +++ /dev/null @@ -1,45 +0,0 @@ -Arguments: - /Users/lilifan/.nvm/versions/node/v10.15.3/bin/node /Users/lilifan/.yarn/bin/yarn.js install - -PATH: - /Users/lilifan/.yarn/bin:/Users/lilifan/.config/yarn/global/node_modules/.bin:/Users/lilifan/.nvm/versions/node/v10.15.3/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/Users/lilifan/.tnvm/versions/node/v8.11.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Users/lilifan/.yarn/bin:/Users/lilifan/.config/yarn/global/node_modules/.bin:/Users/lilifan/.nvm/versions/node/v10.15.3/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/mysql/bin:/Users/lilifan/Downloads/apache-maven-3.3.9/bin:/usr/local/mysql/bin:/Users/lilifan/Downloads/apache-maven-3.3.9/bin - -Yarn version: - 1.22.4 - -Node version: - 10.15.3 - -Platform: - darwin x64 - -Trace: - Error: connect ECONNREFUSED 0.0.0.0:443 - at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1097:14) - -npm manifest: - { - "name": "geekxh.com", - "version": "1.0.0", - "author": "geek小浩", - "scripts": { - "dev": "vuepress dev learning", - "build": "vuepress build learning" - }, - "devDependencies": { - "algoliasearch": "^4.2.0", - "vuepress": "^1.4.1", - "vuepress-theme-reco": "^1.4.5", - "vuepress-plugin-autobar": "github:boboidream/vuepress-bar" - }, - "description": "易懂的算法教程", - "dependencies": { - "vuejs-paginate": "^2.1.0" - } - } - -yarn manifest: - No manifest - -Lockfile: - No lockfile diff --git "a/\345\215\203\346\234\254\345\274\200\346\272\220\347\224\265\345\255\220\344\271\246/README.md" "b/\345\215\203\346\234\254\345\274\200\346\272\220\347\224\265\345\255\220\344\271\246/README.md" new file mode 100644 index 00000000..3b50abec --- /dev/null +++ "b/\345\215\203\346\234\254\345\274\200\346\272\220\347\224\265\345\255\220\344\271\246/README.md" @@ -0,0 +1,293 @@ +### 千本开源电子书 + +> Free Ebook Foundation 维护了一个项目,包含了超过 10000 本免费的编程电子书。而其中中文书籍约 800 本。 + +当然,也许你想直接进行下载(建议): + +下载地址:https://pan.baidu.com/s/1AWV78STNtSjuxn2r4BDVMg + +提取码:请下方扫码回复【book】进行获取 + +
+ +
+ +![](./book_1000.png) + +## 目录 + +* 语言无关类 + * [操作系统](#操作系统) + * [智能系统](#智能系统) + * [分布式系统](#分布式系统) + * [编译原理](#编译原理) + * [函数式概念](#函数式概念) + * [计算机图形学](#计算机图形学) + * [WEB服务器](#web服务器) + * [版本控制](#版本控制) + * [编辑器](#编辑器) + * [NoSQL](#nosql) + * [PostgreSQL](#postgresql) + * [MySQL](#mysql) + * [管理和监控](#管理和监控) + * [项目相关](#项目相关) + * [设计模式](#设计模式) + * [Web](#web) + * [大数据](#大数据) + * [编程艺术](#编程艺术) + * [其它](#其它) + +* 语言相关类 + * [Android](#android) + * [APP](#app) + * [AWK](#awk) + * [C/C++](#cc) + * [C#](#c) + * [Clojure](#clojure) + * [CSS/HTML](#csshtml) + * [Dart](#dart) + * [Elixir](#elixir) + * [Erlang](#erlang) + * [Fortran](#fortran) + * [Go](#go) + * [Groovy](#groovy) + * [Haskell](#haskell) + * [iOS](#ios) + * [Java](#java) + * [JavaScript](#javascript) + * [Kotlin](#kotlin) + * [LaTeX](#latex) + * [LISP](#lisp) + * [Lua](#lua) + * [OCaml](#OCaml) + * [Perl](#perl) + * [PHP](#php) + * [Prolog](#prolog) + * [Python](#python) + * [R](#r) + * [Ruby](#ruby) + * [Rust](#rust) + * [Scala](#scala) + * [Shell](#shell) + * [Swift](#swift) + +* [读书笔记及其它](#读书笔记及其它) +* [测试相关](#测试相关) + +## 置顶 + +- [[笔记]前端工程师的入门与进阶](https://shenbao.github.io/2017/04/22/justjavac-live/) :100: +- [[全文]如何正确的学习 Node.js](https://github.com/i5ting/How-to-learn-node-correctly) :100: + +## 操作系统 + +* [开源世界旅行手册](http://i.linuxtoy.org/docs/guide/index.html) +* [鸟哥的Linux私房菜](http://linux.vbird.org/) +* [The Linux Command Line](http://billie66.github.io/TLCL/index.html) (中英文版) +* [Linux 设备驱动](http://oss.org.cn/kernel-book/ldd3/index.html) (第三版) +* [深入分析Linux内核源码](http://www.kerneltravel.net/kernel-book/%E6%B7%B1%E5%85%A5%E5%88%86%E6%9E%90Linux%E5%86%85%E6%A0%B8%E6%BA%90%E7%A0%81.html) :worried: +* [UNIX TOOLBOX](http://cb.vu/unixtoolbox_zh_CN.xhtml) +* [Docker中文指南](https://github.com/widuu/chinese_docker) +* [Docker —— 从入门到实践](https://github.com/yeasy/docker_practice) +* [Docker入门实战](http://yuedu.baidu.com/ebook/d817967416fc700abb68fca1) +* [Docker Cheat Sheet](https://github.com/wsargent/docker-cheat-sheet/tree/master/zh-cn#docker-cheat-sheet) +* [FreeRADIUS新手入门](http://freeradius.akagi201.org) :worried: +* [Mac 开发配置手册](https://aaaaaashu.gitbooks.io/mac-dev-setup/content/) +* [FreeBSD 使用手册](https://www.freebsd.org/doc/zh_CN/books/handbook/index.html) +* [Linux 命令行(中文版)](http://billie66.github.io/TLCL/book/) +* [Linux 构建指南](http://works.jinbuguo.com/lfs/lfs62/index.html) +* [Linux工具快速教程](https://github.com/me115/linuxtools_rst) +* [Linux Documentation (中文版)](https://www.gitbook.com/book/tinylab/linux-doc/details) +* [嵌入式 Linux 知识库 (eLinux.org 中文版)](https://www.gitbook.com/book/tinylab/elinux/details) +* [理解Linux进程](https://github.com/tobegit3hub/understand_linux_process) +* [命令行的艺术](https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md) +* [SystemTap新手指南](https://spacewander.gitbooks.io/systemtapbeginnersguide_zh/content/index.html) +* [操作系统思考](https://github.com/wizardforcel/think-os-zh) + +[返回目录](#目录) + +## 智能系统 +* [一步步搭建物联网系统](https://github.com/phodal/designiot) + +[返回目录](#目录) + +## 分布式系统 +* [走向分布式](http://dcaoyuan.github.io/papers/pdfs/Scalability.pdf) + +[返回目录](#目录) + +## 编译原理 +* [《计算机程序的结构和解释》公开课 翻译项目](https://github.com/DeathKing/Learning-SICP) + +[返回目录](#目录) + +## 函数式概念 +* [傻瓜函数编程](https://github.com/justinyhuang/Functional-Programming-For-The-Rest-of-Us-Cn) + +[返回目录](#目录) + +## 计算机图形学 +* [OpenGL 教程](https://github.com/zilongshanren/opengl-tutorials) +* [WebGL自学网](http://html5.iii.org.tw/course/webgl/) :worried: +* [《Real-Time Rendering 3rd》提炼总结](https://github.com/QianMo/Real-Time-Rendering-3rd-Summary-Ebook) + +[返回目录](#目录) + +## WEB服务器 + +* [Nginx开发从入门到精通](http://tengine.taobao.org/book/index.html) (淘宝团队出品) +* [Nginx教程从入门到精通](http://www.ttlsa.com/nginx/nginx-stu-pdf/)(PDF版本,运维生存时间出品) +* [OpenResty最佳实践](https://www.gitbook.com/book/moonbingbing/openresty-best-practices/details) +* [Apache 中文手册](http://works.jinbuguo.com/apache/menu22/index.html) + +[返回目录](#目录) + +## 版本控制 + +* [Git教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) (本文由 [廖雪峰](http://www.liaoxuefeng.com) 创作,如果觉得本教程对您有帮助,可以去 [iTunes](https://itunes.apple.com/cn/app/git-jiao-cheng/id876420437) 购买) +* [git - 简易指南](http://rogerdudler.github.io/git-guide/index.zh.html) +* [猴子都能懂的GIT入门](http://backlogtool.com/git-guide/cn/) +* [Git 参考手册](http://gitref.justjavac.com) +* [Pro Git](http://git-scm.com/book/zh/v2) +* [Pro Git 中文版](https://www.gitbook.com/book/0532/progit/details) (整理在gitbook上) +* [Git Magic](http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/) +* [GotGitHub](http://www.worldhello.net/gotgithub/index.html) +* [Git权威指南](http://www.worldhello.net/gotgit/) +* [Git Community Book 中文版](http://gitbook.liuhui998.com/index.html) +* [Mercurial 使用教程](https://www.mercurial-scm.org/wiki/ChineseTutorial) +* [HgInit (中文版)](http://bucunzai.net/hginit/) +* [沉浸式学 Git](http://igit.linuxtoy.org) +* [Git-Cheat-Sheet](https://github.com/flyhigher139/Git-Cheat-Sheet) (感谢 @flyhigher139 翻译了中文版) +* [GitHub秘籍](https://snowdream86.gitbooks.io/github-cheat-sheet/content/zh/index.html) +* [GitHub帮助文档](https://github.com/waylau/github-help) +* [git-flow 备忘清单](http://danielkummer.github.io/git-flow-cheatsheet/index.zh_CN.html) +* [svn 手册](http://svnbook.red-bean.com/nightly/zh/index.html) +* [GitHub漫游指南](https://github.com/phodal/github-roam) + +[返回目录](#目录) + +## 编辑器 + +* [exvim--vim 改良成IDE项目](http://exvim.github.io/docs-zh/intro/) +* [笨方法学Vimscript 中译本](http://learnvimscriptthehardway.onefloweroneworld.com/) :worried: +* [Vim中文文档](https://github.com/vimcn/vimcdoc) +* [所需即所获:像 IDE 一样使用 vim](https://github.com/yangyangwithgnu/use_vim_as_ide) +* [vim 实操教程](https://github.com/dofy/learn-vim) +* [Atom飞行手册中文版](https://github.com/wizardforcel/atom-flight-manual-zh-cn) +* [Markdown·简单的世界](https://github.com/wizardforcel/markdown-simple-world) +* [一年成为 Emacs 高手](https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/guide-zh.org) +* [Emacs 生存指南](http://lifegoo.pluskid.org/upload/blog/152/Survive.in.Emacs.pdf) +* [Atom官方手册](https://atom-china.org/t/atom/62) + +[返回目录](#目录) + +## NoSQL + +* [NoSQL数据库笔谈](http://old.sebug.net/paper/databases/nosql/Nosql.html) +* [Redis 设计与实现](http://redisbook.com/) +* [Redis 命令参考](http://redisdoc.com/) +* [带有详细注释的 Redis 3.0 代码](https://github.com/huangz1990/redis-3.0-annotated) +* [带有详细注释的 Redis 2.6 代码](https://github.com/huangz1990/annotated_redis_source) +* [The Little MongoDB Book](https://github.com/justinyhuang/the-little-mongodb-book-cn/blob/master/mongodb.md) +* [The Little Redis Book](https://github.com/JasonLai256/the-little-redis-book/blob/master/cn/redis.md) +* [Neo4j 简体中文手册 v1.8](http://docs.neo4j.org.cn/) +* [Neo4j .rb 中文資源](http://neo4j.tw/) +* [Disque 使用教程](http://disquebook.com) +* [Apache Spark 设计与实现](https://github.com/JerryLead/SparkInternals/tree/master/markdown) + +[返回目录](#目录) + +## PostgreSQL + +* [PostgreSQL 8.2.3 中文文档](http://works.jinbuguo.com/postgresql/menu823/index.html) +* [PostgreSQL 9.3.1 中文文档](http://www.postgres.cn/docs/9.3/index.html) +* [PostgreSQL 9.5.3 中文文档](http://www.postgres.cn/docs/9.5/index.html) + +[返回目录](#目录) + +## MySQL + +* [MySQL索引背后的数据结构及算法原理](http://blog.codinglabs.org/articles/theory-of-mysql-index.html) +* [21分钟MySQL入门教程](http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html) + +[返回目录](#目录) + +## 管理和监控 + +* [ELKstack 中文指南](http://kibana.logstash.es) +* [Mastering Elasticsearch(中文版)](http://udn.yyuap.com/doc/mastering-elasticsearch/) +* [ElasticSearch 权威指南](https://www.gitbook.com/book/fuxiaopang/learnelasticsearch/details) +* [Elasticsearch 权威指南(中文版)](http://es.xiaoleilu.com) +* [Logstash 最佳实践](https://github.com/chenryn/logstash-best-practice-cn) +* [Puppet 2.7 Cookbook 中文版](http://bbs.konotes.org/workdoc/puppet-27/) + +[返回目录](#目录) + +## 项目相关 + +* [持续集成(第二版)](http://article.yeeyan.org/view/2251/94882) (译言网) +* [让开发自动化系列专栏](http://www.ibm.com/developerworks/cn/java/j-ap/) +* [追求代码质量](http://www.ibm.com/developerworks/cn/java/j-cq/) +* [selenium 中文文档](https://github.com/fool2fish/selenium-doc) +* [Selenium Webdriver 简易教程](http://it-ebooks.flygon.net/selenium-simple-tutorial/) +* [Joel谈软件](http://local.joelonsoftware.com/wiki/Chinese_\(Simplified\)) +* [約耳談軟體(Joel on Software)](http://local.joelonsoftware.com/wiki/%E9%A6%96%E9%A0%81) +* [Gradle 2 用户指南](https://github.com/waylau/Gradle-2-User-Guide) +* [Gradle 中文使用文档](http://yuedu.baidu.com/ebook/f23af265998fcc22bcd10da2) +* [编码规范](https://github.com/ecomfe/spec) +* [开源软件架构](http://www.ituring.com.cn/book/1143) +* [GNU make 指南](http://docs.huihoo.com/gnu/linux/gmake.html) +* [GNU make 中文手册](http://www.yayu.org/book/gnu_make/) +* [The Twelve-Factor App](http://12factor.net/zh_cn/) + +[返回目录](#目录) + +## 设计模式 + +* [图说设计模式](https://github.com/me115/design_patterns) +* [史上最全设计模式导学目录](http://blog.csdn.net/lovelion/article/details/17517213) +* [design pattern 包教不包会](https://github.com/AlfredTheBest/Design-Pattern) +* [设计模式 Java 版](https://quanke.gitbooks.io/design-pattern-java/content/) + +[返回目录](#目录) + +## Web + +* [关于浏览器和网络的 20 项须知](http://www.20thingsilearned.com/zh-CN/home) +* [浏览器开发工具的秘密](http://jinlong.github.io/2013/08/29/devtoolsecrets/) +* [Chrome 开发者工具中文手册](https://github.com/CN-Chrome-DevTools/CN-Chrome-DevTools) +* [Chrome扩展开发文档](http://open.chrome.360.cn/extension_dev/overview.html) +* [Grunt中文文档](http://www.gruntjs.net/) +* [gulp中文文档](http://www.gulpjs.com.cn/docs/) +* [Gulp 入门指南](https://github.com/nimojs/gulp-book) +* [移动Web前端知识库](https://github.com/AlloyTeam/Mars) +* [正则表达式30分钟入门教程](http://deerchao.net/tutorials/regex/regex.htm) +* [前端开发体系建设日记](https://github.com/fouber/blog/issues/2) +* [移动前端开发收藏夹](https://github.com/hoosin/mobile-web-favorites) +* [JSON风格指南](https://github.com/darcyliu/google-styleguide/blob/master/JSONStyleGuide.md) +* [HTTP 接口设计指北](https://github.com/bolasblack/http-api-guide) +* [前端资源分享(一)](https://github.com/hacke2/hacke2.github.io/issues/1) +* [前端资源分享(二)](https://github.com/hacke2/hacke2.github.io/issues/3) +* [前端代码规范 及 最佳实践](http://coderlmn.github.io/code-standards/) +* [前端开发者手册](https://www.gitbook.com/book/dwqs/frontenddevhandbook/details) +* [前端工程师手册](https://www.gitbook.com/book/leohxj/front-end-database/details) +* [w3school教程整理](https://github.com/wizardforcel/w3school) +* [Wireshark用户手册](http://man.lupaworld.com/content/network/wireshark/index.html) +* [一站式学习Wireshark](https://community.emc.com/thread/194901) +* [HTTP 下午茶](https://ccbikai.gitbooks.io/http-book/content/) +* [HTTP/2.0 中文翻译](http://yuedu.baidu.com/ebook/478d1a62376baf1ffc4fad99?pn=1) +* [RFC 7540 - HTTP/2 中文翻译版](https://github.com/abbshr/rfc7540-translation-zh_cn) +* [http2讲解](https://www.gitbook.com/book/ye11ow/http2-explained/details) +* [3 Web Designs in 3 Weeks](https://www.gitbook.com/book/juntao/3-web-designs-in-3-weeks/details) +* [站点可靠性工程](https://github.com/hellorocky/Site-Reliability-Engineering) +* [Web安全学习笔记](https://websec.readthedocs.io) + +[返回目录](#目录) + +## 大数据 + +* [大数据/数据挖掘/推荐系统/机器学习相关资源](https://github.com/Flowerowl/Big-Data-Resources) +* [面向程序员的数据挖掘指南](https://github.com/egrcc/guidetodatamining) +* [大型集群上的快速和通用数据处理架构](https://code.csdn.net/CODE_Translation/spark_matei_phd) +* [数据挖掘中经典的算法实现和详细的注释](https://github.com/linyiqun/DataMiningAlgorithm) +* [Spark 编程指南简体中文版](https://aiyanbo.gitbooks.io/spark-programming-guide-zh) diff --git "a/\345\215\203\346\234\254\345\274\200\346\272\220\347\224\265\345\255\220\344\271\246/book_1000.png" "b/\345\215\203\346\234\254\345\274\200\346\272\220\347\224\265\345\255\220\344\271\246/book_1000.png" new file mode 100644 index 00000000..acc55668 Binary files /dev/null and "b/\345\215\203\346\234\254\345\274\200\346\272\220\347\224\265\345\255\220\344\271\246/book_1000.png" differ diff --git "a/\345\215\203\346\234\254\345\274\200\346\272\220\347\224\265\345\255\220\344\271\246/python_100.md" "b/\345\215\203\346\234\254\345\274\200\346\272\220\347\224\265\345\255\220\344\271\246/python_100.md" new file mode 100644 index 00000000..75cf8191 --- /dev/null +++ "b/\345\215\203\346\234\254\345\274\200\346\272\220\347\224\265\345\255\220\344\271\246/python_100.md" @@ -0,0 +1,58 @@ +## 下载地址 + +百度云密码:oqu9 + +1、 [Building.Machine.Learning.Systems.with.Pytho.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +2、 [MySQL.Cookbook(第2版).(美)迪布瓦.中文版.扫描版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +3、 [Python.Unix和Linux系统管理指南.(美)基弗特.扫描版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +4、 [Python灰帽子-黑客与逆向工程师的Python编程之道.Justin.Seitz.扫描版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +5、 [精通正则表达式(第三版).(美)佛瑞德.扫描版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +6、 [A Byte of Python.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +7、 [A Primer on Scientfic Programming with Python, Third Edition .pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +8、 [Beginning Python:Using Python 2.6 and Python 3.1.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +9、 [Developing MeeGo apps with Python and QML(1).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +10、[Django_中文教程.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +11、[flask-docs.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +12、[Foundations of Python 3 Network Programming, Second Edition.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +13、[Head_First_Python(中文版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +14、[Learning From Data 2nd Ed (Wiley,2007).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +15、[Learning Python, 5th Edition.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +16、[Machine_Learning_in_Action.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +17、[Multitreading.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +18、[Natural Language Processing with Python.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +19、[NumPy_1_5_Beginner__039_s_Guide.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +20、[OReilly.-.Python for Data Analysis.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +21、[Oreilly - Python Standard Library.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +22、[OReilly Mining the Social Web 2nd Edition Oct.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +23、[Python For Data Analysis (2013).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +24、[Python 编程指南.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +25、[Python 2.7 Tutorial 中文版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +26、[Python3程序开发指南(第二版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +27、[Python入门指南.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +28、[Python参考手册(第4版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +29、[python基础教程(第二版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +30、[Python学习手册(第4版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +31、[Python库参考手册.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +32、[Python技术参考大全.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +33、[Python技术手册(第2版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +34、[python标准库.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +35、[python核心笔记.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +36、[Python核心编程(第3版)PDF高清晰完整中文版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +37、[Python源码剖析.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +38、[Python算法教程_中文版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +39、[Python精要参考(第二版)_翻译.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +40、[Python高级编程.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +41、[quantsp研究计划书.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +42、[Rapid+GUI+Programming+with+Python+and+Qt(1).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +43、[thinkpython.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +44、[visualizing_data.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +45、[《Python标准库》中文版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +46、[用Python写网络爬虫.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +47、[用Python进行自然语言处理.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +48、[笨办法学.Python.(第三版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +49、[简明python教程.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +50、[编程小白的第一本+python+入门书.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) +51、[集体智慧编程-python算法应用.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) + +## 免责声明 +书籍全部来源于网络其他人的整理,我这里只是收集整理了他们的链接,如有侵权,马上联系我,我立马删除对应链接。我的邮箱:ththinking@163.com diff --git "a/\346\270\205\346\231\260\347\211\210\347\224\265\345\255\220\344\271\246 100 \346\234\254/Python \347\224\265\345\255\220\344\271\246 100 \346\234\254.md" "b/\346\270\205\346\231\260\347\211\210\347\224\265\345\255\220\344\271\246 100 \346\234\254/Python \347\224\265\345\255\220\344\271\246 100 \346\234\254.md" deleted file mode 100644 index 0b638e23..00000000 --- "a/\346\270\205\346\231\260\347\211\210\347\224\265\345\255\220\344\271\246 100 \346\234\254/Python \347\224\265\345\255\220\344\271\246 100 \346\234\254.md" +++ /dev/null @@ -1,58 +0,0 @@ -## 下载地址 - -百度云密码:oqu9 - -1、 [Building.Machine.Learning.Systems.with.Pytho.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -2、 [MySQL.Cookbook(第2版).(美)迪布瓦.中文版.扫描版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -3、 [Python.Unix和Linux系统管理指南.(美)基弗特.扫描版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -4、 [Python灰帽子-黑客与逆向工程师的Python编程之道.Justin.Seitz.扫描版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -5、 [精通正则表达式(第三版).(美)佛瑞德.扫描版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -6、 [A Byte of Python.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -7、 [A Primer on Scientfic Programming with Python, Third Edition .pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -8、 [Beginning Python:Using Python 2.6 and Python 3.1.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -9、 [Developing MeeGo apps with Python and QML(1).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -10、 [Django_中文教程.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -11、 [flask-docs.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -12、 [Foundations of Python 3 Network Programming, Second Edition.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -13、 [Head_First_Python(中文版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -14、 [Learning From Data 2nd Ed (Wiley,2007).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -15、 [Learning Python, 5th Edition.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -16、 [Machine_Learning_in_Action.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -17、 [Multitreading.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -18、 [Natural Language Processing with Python.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -19、 [NumPy_1_5_Beginner__039_s_Guide.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -20、 [OReilly.-.Python for Data Analysis.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -21、 [Oreilly - Python Standard Library.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -22、 [OReilly Mining the Social Web 2nd Edition Oct.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -23、 [Python For Data Analysis (2013).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -24、 [Python 编程指南.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -25、 [Python 2.7 Tutorial 中文版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -26、 [Python3程序开发指南(第二版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -27、 [Python入门指南.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -28、 [Python参考手册(第4版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -29、 [python基础教程(第二版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -30、 [Python学习手册(第4版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -31、 [Python库参考手册.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -32、 [Python技术参考大全.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -33、 [Python技术手册(第2版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -34、 [python标准库.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -35、 [python核心笔记.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -36、 [Python核心编程(第3版)PDF高清晰完整中文版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -37、 [Python源码剖析.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -38、 [Python算法教程_中文版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -39、 [Python精要参考(第二版)_翻译.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -40、 [Python高级编程.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -41、 [quantsp研究计划书.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -42、 [Rapid+GUI+Programming+with+Python+and+Qt(1).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -43、 [thinkpython.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -44、 [visualizing_data.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -45、 [《Python标准库》中文版.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -46、 [用Python写网络爬虫.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -47、 [用Python进行自然语言处理.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -48、 [笨办法学.Python.(第三版).pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -49、 [简明python教程.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -50、 [编程小白的第一本+python+入门书.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) -51、 [集体智慧编程-python算法应用.pdf](https://pan.baidu.com/s/11McLTO5Dnam4LcVnqHEfQA) - -## 免责声明 -书籍全部来源于网络其他人的整理,我这里只是收集整理了他们的链接,如有侵权,马上联系我,我立马删除对应链接。我的邮箱:516729107@qq.com \ No newline at end of file diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/13.Java\345\237\272\347\241\20014\345\274\240\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\347\231\276\345\274\240\346\200\235\347\273\264\345\257\274\345\233\276/README.md" similarity index 100% rename from "\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/13.Java\345\237\272\347\241\20014\345\274\240\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" rename to "\347\231\276\345\274\240\346\200\235\347\273\264\345\257\274\345\233\276/README.md" diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/Bresenham\347\233\264\347\272\277\347\256\227\346\263\225\344\270\216\347\224\273\345\234\206\347\256\227\346\263\225.doc" "b/\347\256\227\346\263\225\350\257\273\347\211\251/Bresenham\347\233\264\347\272\277\347\256\227\346\263\225\344\270\216\347\224\273\345\234\206\347\256\227\346\263\225.doc" new file mode 100644 index 00000000..a092a504 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/Bresenham\347\233\264\347\272\277\347\256\227\346\263\225\344\270\216\347\224\273\345\234\206\347\256\227\346\263\225.doc" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/C\350\257\255\350\250\200\347\273\217\345\205\270\347\256\227\346\263\225100\344\276\213.doc" "b/\347\256\227\346\263\225\350\257\273\347\211\251/C\350\257\255\350\250\200\347\273\217\345\205\270\347\256\227\346\263\225100\344\276\213.doc" new file mode 100644 index 00000000..fe22d2eb Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/C\350\257\255\350\250\200\347\273\217\345\205\270\347\256\227\346\263\225100\344\276\213.doc" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/Mysql/21\345\210\206\351\222\237Mysql\345\210\235\345\255\246\350\200\205\346\225\231\347\250\213.docx" "b/\347\256\227\346\263\225\350\257\273\347\211\251/Mysql/21\345\210\206\351\222\237Mysql\345\210\235\345\255\246\350\200\205\346\225\231\347\250\213.docx" new file mode 100644 index 00000000..4072be60 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/Mysql/21\345\210\206\351\222\237Mysql\345\210\235\345\255\246\350\200\205\346\225\231\347\250\213.docx" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/Mysql/MySQL\347\264\242\345\274\225\350\203\214\345\220\216\347\232\204\346\225\260\346\215\256\347\273\223\346\236\204\345\217\212\347\256\227\346\263\225\345\216\237\347\220\206.pdf" "b/\347\256\227\346\263\225\350\257\273\347\211\251/Mysql/MySQL\347\264\242\345\274\225\350\203\214\345\220\216\347\232\204\346\225\260\346\215\256\347\273\223\346\236\204\345\217\212\347\256\227\346\263\225\345\216\237\347\220\206.pdf" new file mode 100644 index 00000000..64d28c89 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/Mysql/MySQL\347\264\242\345\274\225\350\203\214\345\220\216\347\232\204\346\225\260\346\215\256\347\273\223\346\236\204\345\217\212\347\256\227\346\263\225\345\216\237\347\220\206.pdf" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/README.md" new file mode 100644 index 00000000..60d9a6e0 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/README.md" @@ -0,0 +1,12 @@ +> ### **小浩算法是一套针对小白的完整的算法训练流程!** +> +> css +> Statr +> Statr +> +> 目前共包括以下几个步骤: +> - 算法基础知识 +> - 算法图解题典 +> - 算法视野扩展 + +## PART III 算法图解题典 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\206\263\347\255\226\346\240\221\345\222\214\351\232\217\346\234\272\346\243\256\346\236\227.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\206\263\347\255\226\346\240\221\345\222\214\351\232\217\346\234\272\346\243\256\346\236\227.zip" new file mode 100644 index 00000000..e7aafdc5 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\206\263\347\255\226\346\240\221\345\222\214\351\232\217\346\234\272\346\243\256\346\236\227.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_01_DuplicationInArray/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_01_DuplicationInArray/README.md" new file mode 100644 index 00000000..f2e72ca3 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_01_DuplicationInArray/README.md" @@ -0,0 +1,72 @@ +## 找出数组中重复的数字 + +### 题目描述 +在一个长度为 `n` 的数组里的所有数字都在 `0` 到 `n-1` 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为 `7` 的数组 `{2, 3, 1, 0, 2, 5, 3}`,那么对应的输出是重复的数字 `2` 或者 `3`。 + + +### 解法 +#### 解法一 +排序后,顺序扫描,判断是否有重复,时间复杂度为 `O(n²)`。 + +#### 解法二 +利用哈希表,遍历数组,如果哈希表中没有该元素,则存入哈希表中,否则返回重复的元素。时间复杂度为 `O(n)`,空间复杂度为 `O(n)`。 + +#### 解法三 +长度为 `n`,元素的数值范围也为 `n`,如果没有重复元素,那么数组每个下标对应的值与下标相等。 + +从头到尾遍历数组,当扫描到下标 `i` 的数字 `nums[i]`: +- 如果等于 `i`,继续向下扫描; +- 如果不等于 `i`,拿它与第 `nums[i]` 个数进行比较,如果相等,说明有重复值,返回 `nums[i]`。如果不相等,就把第 `i` 个数 和第 `nums[i]` 个数交换。重复这个比较交换的过程。 + +此算法时间复杂度为 `O(n)`,因为每个元素最多只要两次交换,就能确定位置。空间复杂度为 `O(1)`。 + +```java + +/** + * @author Anonymous + * @since 2019/10/27 + */ + +public class Solution { + /** + * 查找数组中的重复元素 + * @param numbers 数组 + * @param length 数组长度 + * @param duplication duplication[0]存储重复元素 + * @return boolean + */ + public boolean duplicate(int[] numbers, int length, int[] duplication) { + if (numbers == null || length < 1) { + return false; + } + for (int e : numbers) { + if (e >= length) { + return false; + } + } + + for (int i = 0; i < length; ++i) { + while (numbers[i] != i) { + if (numbers[i] == numbers[numbers[i]]) { + duplication[0] = numbers[i]; + return true; + } + swap(numbers, i, numbers[i]); + } + } + + return false; + } + + private void swap(int[] numbers, int i, int j) { + int t = numbers[i]; + numbers[i] = numbers[j]; + numbers[j] = t; + } +} +``` + +### 测试用例 +1. 长度为 n 的数组中包含一个或多个重复的数字; +2. 数组中不包含重复的数字; +3. 无效测试输入用例(输入空指针;长度为 n 的数组中包含 0~n-1 之外的数字)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_01_DuplicationInArray/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_01_DuplicationInArray/Solution.java" new file mode 100644 index 00000000..9f98254e --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_01_DuplicationInArray/Solution.java" @@ -0,0 +1,43 @@ + +/** + * @author Anonymous + * @since 2019/10/27 + */ + +public class Solution { + /** + * 查找数组中的重复元素 + * @param numbers 数组 + * @param length 数组长度 + * @param duplication duplication[0]存储重复元素 + * @return boolean + */ + public boolean duplicate(int[] numbers, int length, int[] duplication) { + if (numbers == null || length < 1) { + return false; + } + for (int e : numbers) { + if (e >= length) { + return false; + } + } + + for (int i = 0; i < length; ++i) { + while (numbers[i] != i) { + if (numbers[i] == numbers[numbers[i]]) { + duplication[0] = numbers[i]; + return true; + } + swap(numbers, i, numbers[i]); + } + } + + return false; + } + + private void swap(int[] numbers, int i, int j) { + int t = numbers[i]; + numbers[i] = numbers[j]; + numbers[j] = t; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_02_DuplicationInArrayNoEdit/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_02_DuplicationInArrayNoEdit/README.md" new file mode 100644 index 00000000..3ad7c133 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_02_DuplicationInArrayNoEdit/README.md" @@ -0,0 +1,86 @@ +## 不修改数组找出重复的数字 + +### 题目描述 +在一个长度为 `n+1` 的数组里的所有数字都在 `1` 到 `n` 的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为 `8` 的数组 `{2, 3, 5, 4, 3, 2, 6, 7}`,那么对应的输出是重复的数字 `2` 或者 `3`。 + + +### 解法 +#### 解法一 +创建长度为 `n+1` 的辅助数组,把原数组的元素复制到辅助数组中。如果原数组被复制的数是 `m`,则放到辅助数组第 `m` 个位置。这样很容易找出重复元素。空间复杂度为 `O(n)`。 + +#### 解法二 +数组元素的取值范围是 `[1, n]`,对该范围对半划分,分成 `[1, middle]`, `[middle+1, n]`。计算数组中有多少个(count)元素落在 `[1, middle]` 区间内,如果 count 大于 middle-1+1,那么说明这个范围内有重复元素,否则在另一个范围内。继续对这个范围对半划分,继续统计区间内元素数量。 + +时间复杂度 `O(n * log n)`,空间复杂度 `O(1)`。 + +注意,此方法无法找出所有重复的元素。 + +```java +/** + * @author Anonymous + * @since 2019/10/27 + */ + +public class Solution { + /** + * 不修改数组查找重复的元素,没有则返回-1 + * @param numbers 数组 + * @return 重复的元素 + */ + public int getDuplication(int[] numbers) { + if (numbers == null || numbers.length < 1) { + return -1; + } + + int start = 1; + int end = numbers.length - 1; + while (end >= start) { + int middle = start + ((end - start) >> 1); + + // 调用 log n 次 + int count = countRange(numbers, start, middle); + if (start == end) { + if (count > 1) { + return start; + } + break; + } else { + // 无法找出所有重复的数 + if (count > (middle - start) + 1) { + end = middle; + } else { + start = middle + 1; + } + } + } + return -1; + } + + + /** + * 计算整个数组中有多少个数的取值在[start, end] 之间 + * 时间复杂度 O(n) + * @param numbers 数组 + * @param start 左边界 + * @param end 右边界 + * @return 数量 + */ + private int countRange(int[] numbers, int start, int end) { + if (numbers == null) { + return 0; + } + int count = 0; + for(int e : numbers) { + if (e >= start && e <= end) { + ++count; + } + } + return count; + } +} +``` + +### 测试用例 +1. 长度为 n 的数组中包含一个或多个重复的数字; +2. 数组中不包含重复的数字; +3. 无效测试输入用例(输入空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_02_DuplicationInArrayNoEdit/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_02_DuplicationInArrayNoEdit/Solution.java" new file mode 100644 index 00000000..20f6e984 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/03_02_DuplicationInArrayNoEdit/Solution.java" @@ -0,0 +1,62 @@ +/** + * @author Anonymous + * @since 2019/10/27 + */ + +public class Solution { + /** + * 不修改数组查找重复的元素,没有则返回-1 + * @param numbers 数组 + * @return 重复的元素 + */ + public int getDuplication(int[] numbers) { + if (numbers == null || numbers.length < 1) { + return -1; + } + + int start = 1; + int end = numbers.length - 1; + while (end >= start) { + int middle = start + ((end - start) >> 1); + + // 调用 log n 次 + int count = countRange(numbers, start, middle); + if (start == end) { + if (count > 1) { + return start; + } + break; + } else { + // 无法找出所有重复的数 + if (count > (middle - start) + 1) { + end = middle; + } else { + start = middle + 1; + } + } + } + return -1; + } + + + /** + * 计算整个数组中有多少个数的取值在[start, end] 之间 + * 时间复杂度 O(n) + * @param numbers 数组 + * @param start 左边界 + * @param end 右边界 + * @return 数量 + */ + private int countRange(int[] numbers, int start, int end) { + if (numbers == null) { + return 0; + } + int count = 0; + for(int e : numbers) { + if (e >= start && e <= end) { + ++count; + } + } + return count; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/04_FindInPartiallySortedMatrix/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/04_FindInPartiallySortedMatrix/README.md" new file mode 100644 index 00000000..69445b6d --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/04_FindInPartiallySortedMatrix/README.md" @@ -0,0 +1,57 @@ +## 二维数组中的查找 + +### 题目描述 +在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 + + +### 解法 +从二维数组的右上方开始查找: +- 若元素值等于 `target`,返回 `true`; +- 若元素值大于 `target`,砍掉这一列,即 `--j`; +- 若元素值小于 `target`,砍掉这一行,即 `++i`。 + +也可以从二维数组的左下方开始查找,以下代码使用左下方作为查找的起点。 + +注意,不能选择左上方或者右下方的数字,因为这样无法缩小查找的范围。 + +```java +/** + * @author Anonymous + * @since 2019/10/27 + */ + +public class Solution { + /** + * 二维数组中的查找 + * @param target 目标值 + * @param array 二维数组 + * @return boolean + */ + public boolean find(int target, int[][] array) { + if (array == null) { + return false; + } + int rows = array.length; + int columns = array[0].length; + + int i = rows - 1; + int j = 0; + while (i >= 0 && j < columns) { + if (array[i][j] == target) { + return true; + } + if (array[i][j] < target) { + ++j; + } else { + --i; + } + } + return false; + } +} +``` + +### 测试用例 +1. 二维数组中包含查找的数字(查找的数字是数组中的最大值和最小值;查找的数字介于数组中的最大值和最小值之间); +2. 二维数组中没有查找的数字(查找的数字大于/小于数组中的最大值;查找的数字在数组的最大值和最小值之间但数组中没有这个数字); +3. 特殊输入测试(输入空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/04_FindInPartiallySortedMatrix/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/04_FindInPartiallySortedMatrix/Solution.java" new file mode 100644 index 00000000..088fb1f3 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/04_FindInPartiallySortedMatrix/Solution.java" @@ -0,0 +1,34 @@ +/** + * @author Anonymous + * @since 2019/10/27 + */ + +public class Solution { + /** + * 二维数组中的查找 + * @param target 目标值 + * @param array 二维数组 + * @return boolean + */ + public boolean find(int target, int[][] array) { + if (array == null) { + return false; + } + int rows = array.length; + int columns = array[0].length; + + int i = rows - 1; + int j = 0; + while (i >= 0 && j < columns) { + if (array[i][j] == target) { + return true; + } + if (array[i][j] < target) { + ++j; + } else { + --i; + } + } + return false; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/05_ReplaceSpaces/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/05_ReplaceSpaces/README.md" new file mode 100644 index 00000000..bbccba80 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/05_ReplaceSpaces/README.md" @@ -0,0 +1,98 @@ +## 替换空格 + +### 题目描述 +请实现一个函数,将一个字符串中的每个空格替换成 `%20`。例如,当字符串为 `We Are Happy`,则经过替换之后的字符串为 `We%20Are%20Happy`。 + + +### 解法 +#### 解法一 +创建 `StringBuilder`,遍历原字符串,遇到非空格,直接 append 到 `StringBuilder` 中,遇到空格则将 `%20` append 到 `StringBuilder` 中。 +```java +/** + * @author Anonymous + * @since 2019/10/27 + */ + +public class Solution { + /** + * 将字符串中的所有空格替换为%20 + * @param str 字符串 + * @return 替换后的字符串 + */ + public String replaceSpace(StringBuffer str) { + if (str == null || str.length() == 0) { + return str.toString(); + } + StringBuilder sb = new StringBuilder(); + int len = str.length(); + for (int i = 0; i < len; ++i) { + char ch = str.charAt(i); + sb.append(ch == ' ' ? "%20" : ch); + } + + return sb.toString(); + } +} +``` + +#### 解法二【推荐】 +先遍历原字符串,遇到空格,则在原字符串末尾 `append` 任意两个字符,如两个空格。 + +用指针 `p` 指向原字符串末尾,`q` 指向现字符串末尾,`p`, `q` 从后往前遍历,当 `p` 遇到空格,`q` 位置依次要 `append` '02%',若不是空格,直接 `append` `p` 指向的字符。 + +> 🤔思路扩展: +在合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。 + +```java +/** + * @author Anonymous + * @since 2019/10/27 + */ + +public class Solution { + /** + * 将字符串中的所有空格替换为%20 + * @param str 字符串 + * @return 替换后的字符串 + */ + public String replaceSpace(StringBuffer str) { + if (str == null || str.length() == 0) { + return str.toString(); + } + + int len = str.length(); + for (int i = 0; i < len; ++i) { + if (str.charAt(i) == ' ') { + // append 两个空格 + str.append(" "); + } + } + + // p 指向原字符串末尾 + int p = len - 1; + + // q 指向现字符串末尾 + int q = str.length() - 1; + + while (p >= 0) { + char ch = str.charAt(p--); + if (ch == ' ') { + str.setCharAt(q--, '0'); + str.setCharAt(q--, '2'); + str.setCharAt(q--, '%'); + } else { + str.setCharAt(q--, ch); + } + } + + return str.toString(); + + } +} +``` + + +### 测试用例 +1. 输入的字符串包含空格(空格位于字符串的最前面/最后面/中间;字符串有多个连续的空格); +2. 输入的字符串中没有空格; +3. 特殊输入测试(字符串是一个空指针;字符串是一个空字符串;字符串只有一个空格字符;字符串中有多个连续空格)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/05_ReplaceSpaces/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/05_ReplaceSpaces/Solution.java" new file mode 100644 index 00000000..c06ae068 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/05_ReplaceSpaces/Solution.java" @@ -0,0 +1,45 @@ +/** + * @author Anonymous + * @since 2019/10/27 + */ + +public class Solution { + /** + * 将字符串中的所有空格替换为%20 + * @param str 字符串 + * @return 替换后的字符串 + */ + public String replaceSpace(StringBuffer str) { + if (str == null || str.length() == 0) { + return str.toString(); + } + + int len = str.length(); + for (int i = 0; i < len; ++i) { + if (str.charAt(i) == ' ') { + // append 两个空格 + str.append(" "); + } + } + + // p 指向原字符串末尾 + int p = len - 1; + + // q 指向现字符串末尾 + int q = str.length() - 1; + + while (p >= 0) { + char ch = str.charAt(p--); + if (ch == ' ') { + str.setCharAt(q--, '0'); + str.setCharAt(q--, '2'); + str.setCharAt(q--, '%'); + } else { + str.setCharAt(q--, ch); + } + } + + return str.toString(); + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/06_PrintListInReversedOrder/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/06_PrintListInReversedOrder/README.md" new file mode 100644 index 00000000..be858678 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/06_PrintListInReversedOrder/README.md" @@ -0,0 +1,110 @@ +## 从尾到头打印链表 + +### 题目描述 +输入一个链表,按链表值从尾到头的顺序返回一个 `ArrayList`。 + + +### 解法 +#### 解法一【推荐】 +遍历链表,每个链表结点值 `push` 进栈,最后将栈中元素依次 `pop` 到 `list` 中。 +```java +/** +* public class ListNode { +* int val; +* ListNode next = null; +* +* ListNode(int val) { +* this.val = val; +* } +* } +* +*/ +import java.util.ArrayList; +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/10/28 + */ +public class Solution { + /** + * 从尾到头打印链表 + * @param listNode 链表头节点 + * @return list + */ + public ArrayList printListFromTailToHead(ListNode listNode) { + ArrayList res = new ArrayList<>(); + if (listNode == null) { + return res; + } + Stack stack = new Stack<>(); + while (listNode != null) { + stack.push(listNode.val); + listNode = listNode.next; + } + while (!stack.isEmpty()) { + res.add(stack.pop()); + } + + return res; + } +} +``` + +#### 解法二【不推荐】 +利用递归方式: +- 若不是链表尾结点,继续递归; +- 若是,添加到 `list` 中。 + +这种方式不推荐,当递归层数过多时,容易发生 `Stack Overflow`。 + +```java +/** +* public class ListNode { +* int val; +* ListNode next = null; +* +* ListNode(int val) { +* this.val = val; +* } +* } +* +*/ +import java.util.ArrayList; +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/10/28 + */ +public class Solution { + /** + * 从尾到头打印链表 + * @param listNode 链表头结点 + * @return list + */ + public ArrayList printListFromTailToHead(ListNode listNode) { + ArrayList res = new ArrayList<>(); + if (listNode == null) { + return res; + } + + addElement(listNode, res); + return res; + + } + + private void addElement(ListNode listNode, ArrayList res) { + if (listNode.next != null) { + // 递归调用 + addElement(listNode.next, res); + } + res.add(listNode.val); + } +} +``` + + +### 测试用例 +1. 功能测试(输入的链表有多个结点;输入的链表只有一个结点); +2. 特殊输入测试(输入的链表结点指针为空)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/06_PrintListInReversedOrder/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/06_PrintListInReversedOrder/Solution.java" new file mode 100644 index 00000000..dac48138 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/06_PrintListInReversedOrder/Solution.java" @@ -0,0 +1,42 @@ + +/** +* public class ListNode { +* int val; +* ListNode next = null; +* +* ListNode(int val) { +* this.val = val; +* } +* } +* +*/ +import java.util.ArrayList; +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/10/28 + */ +public class Solution { + /** + * 从尾到头打印链表 + * @param listNode 链表头节点 + * @return list + */ + public ArrayList printListFromTailToHead(ListNode listNode) { + ArrayList res = new ArrayList<>(); + if (listNode == null) { + return res; + } + Stack stack = new Stack<>(); + while (listNode != null) { + stack.push(listNode.val); + listNode = listNode.next; + } + while (!stack.isEmpty()) { + res.add(stack.pop()); + } + + return res; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/07_ConstructBinaryTree/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/07_ConstructBinaryTree/README.md" new file mode 100644 index 00000000..17fb8be7 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/07_ConstructBinaryTree/README.md" @@ -0,0 +1,82 @@ +## 重建二叉树 + +### 题目描述 +输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 `{1,2,4,7,3,5,6,8}` 和中序遍历序列 `{4,7,2,1,5,3,8,6}`,则重建二叉树并返回。 + + +### 解法 +在二叉树的前序遍历序列中,第一个数字总是根结点的值。在中序遍历序列中,根结点的值在序列的中间,左子树的结点位于根结点左侧,而右子树的结点位于根结点值的右侧。 + +遍历中序序列,找到根结点,递归构建左子树与右子树。 + +注意添加特殊情况的 `if` 判断。 + +```java +/** + * Definition for binary tree + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ + +/** + * @author Anonymous + * @since 2019/10/28 + */ + +public class Solution { + /** + * 重建二叉树 + * + * @param pre 先序序列 + * @param in 中序序列 + * @return 二叉树根结点 + */ + public TreeNode reConstructBinaryTree(int[] pre, int[] in) { + if (pre == null || in == null || pre.length != in.length) { + return null; + } + int n = pre.length; + return constructBinaryTree(pre, 0, n - 1, in, 0, n - 1); + } + + private TreeNode constructBinaryTree(int[] pre, int startPre, int endPre, int[] in, int startIn, int endIn) { + TreeNode node = new TreeNode(pre[startPre]); + if (startPre == endPre) { + if (startIn == endIn) { + return node; + } + throw new IllegalArgumentException("Invalid input!"); + } + + int inOrder = startIn; + while (in[inOrder] != pre[startPre]) { + ++inOrder; + if (inOrder > endIn) { + new IllegalArgumentException("Invalid input!"); + } + } + int len = inOrder - startIn; + if (len > 0) { + // 递归构建左子树 + node.left = constructBinaryTree(pre, startPre + 1, startPre + len, in, startIn, inOrder - 1); + } + + if (inOrder < endIn) { + // 递归构建右子树 + node.right = constructBinaryTree(pre, startPre + len + 1, endPre, in, inOrder + 1, endIn); + } + return node; + + } +} +``` + + +### 测试用例 +1. 普通二叉树(完全二叉树;不完全二叉树); +2. 特殊二叉树(所有结点都没有左/右子结点;只有一个结点的二叉树); +3. 特殊输入测试(二叉树根结点为空;输入的前序序列和中序序列不匹配)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/07_ConstructBinaryTree/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/07_ConstructBinaryTree/Solution.java" new file mode 100644 index 00000000..8a6e28e6 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/07_ConstructBinaryTree/Solution.java" @@ -0,0 +1,61 @@ +/** + * Definition for binary tree + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ + +/** + * @author Anonymous + * @since 2019/10/28 + */ + +public class Solution { + /** + * 重建二叉树 + * + * @param pre 先序序列 + * @param in 中序序列 + * @return 二叉树根结点 + */ + public TreeNode reConstructBinaryTree(int[] pre, int[] in) { + if (pre == null || in == null || pre.length != in.length) { + return null; + } + int n = pre.length; + return constructBinaryTree(pre, 0, n - 1, in, 0, n - 1); + } + + private TreeNode constructBinaryTree(int[] pre, int startPre, int endPre, int[] in, int startIn, int endIn) { + TreeNode node = new TreeNode(pre[startPre]); + if (startPre == endPre) { + if (startIn == endIn) { + return node; + } + throw new IllegalArgumentException("Invalid input!"); + } + + int inOrder = startIn; + while (in[inOrder] != pre[startPre]) { + ++inOrder; + if (inOrder > endIn) { + new IllegalArgumentException("Invalid input!"); + } + } + int len = inOrder - startIn; + if (len > 0) { + // 递归构建左子树 + node.left = constructBinaryTree(pre, startPre + 1, startPre + len, in, startIn, inOrder - 1); + } + + if (inOrder < endIn) { + // 递归构建右子树 + node.right = constructBinaryTree(pre, startPre + len + 1, endPre, in, inOrder + 1, endIn); + } + return node; + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/08_NextNodeInBinaryTrees/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/08_NextNodeInBinaryTrees/README.md" new file mode 100644 index 00000000..4b0d73b9 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/08_NextNodeInBinaryTrees/README.md" @@ -0,0 +1,74 @@ +## 二叉树的下一个结点 + +### 题目描述 +给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 + + +### 解法 +对于结点 `pNode`: +- 如果它有右子树,则**右子树的最左结点**就是它的下一个结点; +- 如果它没有右子树,判断它与父结点 `pNode.next` 的位置情况: + - 如果它是父结点的左孩子,那么父结点 `pNode.next` 就是它的下一个结点; + - 如果它是父结点的右孩子,一直向上寻找,直到找到某个结点,它是它父结点的左孩子,那么该父结点就是 `pNode` 的下一个结点。 + +```java +/* +public class TreeLinkNode { + int val; + TreeLinkNode left = null; + TreeLinkNode right = null; + TreeLinkNode next = null; + + TreeLinkNode(int val) { + this.val = val; + } +} +*/ + +/** + * @author Anonymous + * @since 2019/10/28 + */ + +public class Solution { + /** + * 获取中序遍历结点的下一个结点 + * @param pNode 某个结点 + * @return pNode的下一个结点 + */ + public TreeLinkNode GetNext(TreeLinkNode pNode) { + if (pNode == null) { + return null; + } + + if (pNode.right != null) { + TreeLinkNode t = pNode.right; + while (t.left != null) { + t = t.left; + } + return t; + } + + // 须保证 pNode.next 不为空,否则会出现 NPE + if (pNode.next != null && pNode.next.left == pNode) { + return pNode.next; + } + + while (pNode.next != null) { + if (pNode.next.left == pNode) { + return pNode.next; + } + pNode = pNode.next; + } + + return null; + + } +} +``` + + +### 测试用例 +1. 普通二叉树(完全二叉树;不完全二叉树); +2. 特殊二叉树(所有结点都没有左/右子结点;只有一个结点的二叉树;二叉树的根结点为空); +3. 不同位置的结点的下一个结点(下一个结点为当前结点的右子结点、右子树的最左子结点、父结点、跨层的父结点等;当前结点没有下一个结点)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/08_NextNodeInBinaryTrees/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/08_NextNodeInBinaryTrees/Solution.java" new file mode 100644 index 00000000..ff4840f0 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/08_NextNodeInBinaryTrees/Solution.java" @@ -0,0 +1,54 @@ +/* +public class TreeLinkNode { + int val; + TreeLinkNode left = null; + TreeLinkNode right = null; + TreeLinkNode next = null; + + TreeLinkNode(int val) { + this.val = val; + } +} +*/ + +/** + * @author Anonymous + * @since 2019/10/28 + */ + +public class Solution { + /** + * 获取中序遍历结点的下一个结点 + * + * @param pNode 某个结点 + * @return pNode的下一个结点 + */ + public TreeLinkNode GetNext(TreeLinkNode pNode) { + if (pNode == null) { + return null; + } + + if (pNode.right != null) { + TreeLinkNode t = pNode.right; + while (t.left != null) { + t = t.left; + } + return t; + } + + // 须保证 pNode.next 不为空,否则会出现 NPE + if (pNode.next != null && pNode.next.left == pNode) { + return pNode.next; + } + + while (pNode.next != null) { + if (pNode.next.left == pNode) { + return pNode.next; + } + pNode = pNode.next; + } + + return null; + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_01_QueueWithTwoStacks/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_01_QueueWithTwoStacks/README.md" new file mode 100644 index 00000000..23ad91b8 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_01_QueueWithTwoStacks/README.md" @@ -0,0 +1,47 @@ +## 用两个栈实现队列 + +### 题目描述 +用两个栈来实现一个队列,完成队列的 `Push` 和 `Pop` 操作。 队列中的元素为 `int` 类型。 + + +### 解法 +`Push` 操作,每次都存入 `stack1`; +`Pop` 操作,每次从 `stack2` 取: +- `stack2` 栈不为空时,不能将 `stack1` 元素倒入; +- `stack2` 栈为空时,需要一次将 `stack1` 元素全部倒入。 + +```java +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/10/28 + */ + +public class Solution { + Stack stack1 = new Stack(); + Stack stack2 = new Stack(); + + public void push(int node) { + stack1.push(node); + } + + public int pop() { + if (stack2.isEmpty()) { + if (stack1.isEmpty()) { + return -1; + } + while (!stack1.isEmpty()) { + stack2.push(stack1.pop()); + } + } + return stack2.pop(); + } +} +``` + + +### 测试用例 +1. 往空的队列里添加、删除元素; +2. 往非空的队列添加、删除元素; +3. 连续删除元素直至队列为空。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_01_QueueWithTwoStacks/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_01_QueueWithTwoStacks/Solution.java" new file mode 100644 index 00000000..4b3ba0b3 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_01_QueueWithTwoStacks/Solution.java" @@ -0,0 +1,27 @@ +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/10/28 + */ + +public class Solution { + Stack stack1 = new Stack(); + Stack stack2 = new Stack(); + + public void push(int node) { + stack1.push(node); + } + + public int pop() { + if (stack2.isEmpty()) { + if (stack1.isEmpty()) { + return -1; + } + while (!stack1.isEmpty()) { + stack2.push(stack1.pop()); + } + } + return stack2.pop(); + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_02_StackWithTwoQueues/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_02_StackWithTwoQueues/README.md" new file mode 100644 index 00000000..90d543fa --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_02_StackWithTwoQueues/README.md" @@ -0,0 +1,55 @@ +## 用两个队列实现栈 + +### 题目描述 +用两个队列来实现一个栈,完成栈的 `Push` 和 `Pop` 操作。 栈中的元素为 `int` 类型。 + + +### 解法 +`Push` 操作,每次都存入 `queue1`; +`Pop` 操作,每次从 `queue1` 取: +- 将 `queue1` 中的元素依次倒入 `queue2`,直到 `queue1` 剩下一个元素,这个元素就是要 `pop` 出去的; +- 将 `queue1` 与 `queue2` 进行交换,这样保证每次都从 `queue1` 中存取元素,`queue2` 只起到辅助暂存的作用。 + +```java +import java.util.LinkedList; +import java.util.Queue; + +/** + * @author Anonymous + * @since 2019/10/29 + */ + +public class Solution { + + private Queue queue1 = new LinkedList<>(); + private Queue queue2 = new LinkedList<>(); + + public void push(int node) { + queue1.offer(node); + } + + public int pop() { + if (queue1.isEmpty()) { + throw new RuntimeException("Empty stack!"); + } + + while (queue1.size() > 1) { + queue2.offer(queue1.poll()); + } + + int val = queue1.poll(); + + Queue t = queue1; + queue1 = queue2; + queue2 = t; + return val; + + } +} +``` + + +### 测试用例 +1. 往空的栈里添加、删除元素; +2. 往非空的栈添加、删除元素; +3. 连续删除元素直至栈为空。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_02_StackWithTwoQueues/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_02_StackWithTwoQueues/Solution.java" new file mode 100644 index 00000000..960e0102 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/09_02_StackWithTwoQueues/Solution.java" @@ -0,0 +1,35 @@ +import java.util.LinkedList; +import java.util.Queue; + +/** + * @author Anonymous + * @since 2019/10/29 + */ + +public class Solution { + + private Queue queue1 = new LinkedList<>(); + private Queue queue2 = new LinkedList<>(); + + public void push(int node) { + queue1.offer(node); + } + + public int pop() { + if (queue1.isEmpty()) { + throw new RuntimeException("Empty stack!"); + } + + while (queue1.size() > 1) { + queue2.offer(queue1.poll()); + } + + int val = queue1.poll(); + + Queue t = queue1; + queue1 = queue2; + queue2 = t; + return val; + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_01_Fibonacci/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_01_Fibonacci/README.md" new file mode 100644 index 00000000..d50678e2 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_01_Fibonacci/README.md" @@ -0,0 +1,79 @@ +## 斐波那契数列 + +### 题目描述 +大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第 `n` 项(从 `0` 开始,第 `0` 项为 `0`)。`n<=39` + + +### 解法 +#### 解法一 +采用递归方式,简洁明了,但效率很低,存在大量的重复计算。 +``` + f(10) + / \ + f(9) f(8) + / \ / \ + f(8) f(7) f(7) f(6) + / \ / \ + f(7) f(6) f(6) f(5) +``` + +```java + +/** + * @author Anonymous + * @since 2019/10/29 + */ + +public class Solution { + /** + * 求斐波那契数列的第n项,n从0开始 + * @param n 第n项 + * @return 第n项的值 + */ + public int Fibonacci(int n) { + if (n < 2) { + return n; + } + // 递归调用 + return Fibonacci(n - 1) + Fibonacci(n - 2); + } +} +``` + +#### 解法二 +从下往上计算,递推,时间复杂度 `O(n)`。 + +```java + +/** + * @author Anonymous + * @since 2019/10/29 + */ + +public class Solution { + /** + * 求斐波那契数列的第n项,n从0开始 + * @param n 第n项 + * @return 第n项的值 + */ + public int Fibonacci(int n) { + if (n < 2) { + return n; + } + int[] res = new int[n + 1]; + res[0] = 0; + res[1] = 1; + for (int i = 2; i <= n; ++i) { + res[i] = res[i - 1] + res[i - 2]; + } + return res[n]; + + } +} +``` + + +### 测试用例 +1. 功能测试(如输入 3、5、10 等); +2. 边界值测试(如输入 0、1、2); +3. 性能测试(输入较大的数字,如 40、50、100 等)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_01_Fibonacci/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_01_Fibonacci/Solution.java" new file mode 100644 index 00000000..437a0cce --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_01_Fibonacci/Solution.java" @@ -0,0 +1,26 @@ + +/** + * @author Anonymous + * @since 2019/10/29 + */ + +public class Solution { + /** + * 求斐波那契数列的第n项,n从0开始 + * @param n 第n项 + * @return 第n项的值 + */ + public int Fibonacci(int n) { + if (n < 2) { + return n; + } + int[] res = new int[n + 1]; + res[0] = 0; + res[1] = 1; + for (int i = 2; i <= n; ++i) { + res[i] = res[i - 1] + res[i - 2]; + } + return res[n]; + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_02_JumpFloor/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_02_JumpFloor/README.md" new file mode 100644 index 00000000..d9570ed5 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_02_JumpFloor/README.md" @@ -0,0 +1,42 @@ +## 跳台阶 + +### 题目描述 +一只青蛙一次可以跳上`1`级台阶,也可以跳上`2`级。求该青蛙跳上一个`n`级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 + +### 解法 +跳上 `n` 级台阶,可以从 `n-1` 级跳 `1` 级上去,也可以从 `n-2` 级跳 `2` 级上去。所以 +``` +f(n) = f(n-1) + f(n-2) +``` + +```java +/** + * @author Anonymous + * @since 2019/11/23 + */ + +public class Solution { + /** + * 青蛙跳台阶 + * @param target 跳上的那一级台阶 + * @return 多少种跳法 + */ + public int JumpFloor(int target) { + if (target < 3) { + return target; + } + int[] res = new int[target + 1]; + res[1] = 1; + res[2] = 2; + for (int i = 3; i <= target; ++i) { + res[i] = res[i - 1] + res[i - 2]; + } + return res[target]; + } +} +``` + +### 测试用例 +1. 功能测试(如输入 3、5、10 等); +2. 边界值测试(如输入 0、1、2); +3. 性能测试(输入较大的数字,如 40、50、100 等)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_02_JumpFloor/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_02_JumpFloor/Solution.java" new file mode 100644 index 00000000..ff2bc9c6 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_02_JumpFloor/Solution.java" @@ -0,0 +1,25 @@ +/** + * @author Anonymous + * @since 2019/11/23 + */ + +public class Solution { + /** + * 青蛙跳台阶 + * + * @param target 跳上的那一级台阶 + * @return 多少种跳法 + */ + public int JumpFloor(int target) { + if (target < 3) { + return target; + } + int[] res = new int[target + 1]; + res[1] = 1; + res[2] = 2; + for (int i = 3; i <= target; ++i) { + res[i] = res[i - 1] + res[i - 2]; + } + return res[target]; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_03_JumpFloorII/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_03_JumpFloorII/README.md" new file mode 100644 index 00000000..8581cd18 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_03_JumpFloorII/README.md" @@ -0,0 +1,48 @@ +## 变态跳台阶 + +### 题目描述 +一只青蛙一次可以跳上`1`级台阶,也可以跳上`2`级……它也可以跳上`n`级。求该青蛙跳上一个`n`级的台阶总共有多少种跳法。 + +### 解法 +跳上 `n-1` 级台阶,可以从 `n-2` 级跳 `1` 级上去,也可以从 `n-3` 级跳 `2` 级上去...也可以从 `0` 级跳上去。那么 +``` +f(n-1) = f(0) + f(1) + ... + f(n-2) ① +``` + +跳上 `n` 级台阶,可以从 `n-1` 级跳 `1` 级上去,也可以从 `n-2` 级跳 `2` 级上去...也可以从 `0` 级跳上去。那么 +``` +f(n) = f(0) + f(1) + ... + f(n-2) + f(n-1) ② + +②-①: +f(n) - f(n-1) = f(n-1) +f(n) = 2f(n-1) +``` + +所以 f(n) 是一个等比数列: +``` +f(n) = 2^(n-1) +``` + + +```java +/** + * @author Anonymous + * @since 2019/11/23 + */ + +public class Solution { + /** + * 青蛙跳台阶II + * @param target 跳上的那一级台阶 + * @return 多少种跳法 + */ + public int JumpFloorII(int target) { + return (int) Math.pow(2, target - 1); + } +} +``` + +### 测试用例 +1. 功能测试(如输入 3、5、10 等); +2. 边界值测试(如输入 0、1、2); +3. 性能测试(输入较大的数字,如 40、50、100 等)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_03_JumpFloorII/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_03_JumpFloorII/Solution.java" new file mode 100644 index 00000000..3e6e8a47 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_03_JumpFloorII/Solution.java" @@ -0,0 +1,16 @@ +/** + * @author Anonymous + * @since 2019/11/23 + */ + +public class Solution { + /** + * 青蛙跳台阶II + * + * @param target 跳上的那一级台阶 + * @return 多少种跳法 + */ + public int JumpFloorII(int target) { + return (int) Math.pow(2, target - 1); + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_04_RectCover/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_04_RectCover/README.md" new file mode 100644 index 00000000..93b9e55d --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_04_RectCover/README.md" @@ -0,0 +1,73 @@ +## 矩形覆盖 + +### 题目描述 +我们可以用`2*1`的小矩形横着或者竖着去覆盖更大的矩形。请问用`n`个`2*1`的小矩形无重叠地覆盖一个`2*n`的大矩形,总共有多少种方法? + +### 解法 +覆盖 `2*n` 的矩形: +- 可以先覆盖 `2*n-1` 的矩形,再覆盖一个 `2*1` 的矩形; +- 也可以先覆盖 `2*(n-2)` 的矩形,再覆盖两个 `1*2` 的矩形。 + +#### 解法一:利用数组存放结果 +```java +/** + * @author Anonymous + * @since 2019/11/23 + */ + +public class Solution { + /** + * 矩形覆盖 + * @param target 2*target大小的矩形 + * @return 多少种覆盖方法 + */ + public int RectCover(int target) { + if (target < 3) { + return target; + } + int[] res = new int[target + 1]; + res[1] = 1; + res[2] = 2; + for (int i = 3; i <= target; ++i) { + res[i] = res[i - 1] + res[i - 2]; + } + return res[target]; + } +} +``` + +#### 解法二:直接用变量存储结果 +```java +/** + * @author Anonymous + * @since 2019/11/23 + */ + +public class Solution { + /** + * 矩形覆盖 + * @param target 2*target大小的矩形 + * @return 多少种覆盖方法 + */ + public int RectCover(int target) { + if (target < 3) { + return target; + } + int res1 = 1; + int res2 = 2; + int res = 0; + for (int i = 3; i <= target; ++i) { + res = res1 + res2; + res1 = res2; + res2 = res; + } + return res; + } +} +``` + + +### 测试用例 +1. 功能测试(如输入 3、5、10 等); +2. 边界值测试(如输入 0、1、2); +3. 性能测试(输入较大的数字,如 40、50、100 等)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_04_RectCover/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_04_RectCover/Solution.java" new file mode 100644 index 00000000..4b98476c --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/10_04_RectCover/Solution.java" @@ -0,0 +1,25 @@ +/** + * @author Anonymous + * @since 2019/11/23 + */ + +public class Solution { + /** + * 矩形覆盖 + * + * @param target 2*target大小的矩形 + * @return 多少种覆盖方法 + */ + public int RectCover(int target) { + if (target < 3) { + return target; + } + int[] res = new int[target + 1]; + res[1] = 1; + res[2] = 2; + for (int i = 3; i <= target; ++i) { + res[i] = res[i - 1] + res[i - 2]; + } + return res[target]; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/11_MinNumberInRotatedArray/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/11_MinNumberInRotatedArray/README.md" new file mode 100644 index 00000000..0a6101bc --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/11_MinNumberInRotatedArray/README.md" @@ -0,0 +1,119 @@ +## 旋转数组的最小数字 + +### 题目描述 +把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组 `{3,4,5,1,2}` 为 `{1,2,3,4,5}` 的一个旋转,该数组的最小值为 `1`。 + +**NOTE:**给出的所有元素都大于 `0`,若数组大小为 `0`,请返回 `0`。 + + +### 解法 +#### 解法一 +直接遍历数组找最小值,时间复杂度 `O(n)`,不推荐。 + +```java + +/** + * @author Anonymous + * @since 2019/10/30 + */ + +public class Solution { + /** + * 获取旋转数组的最小元素 + * @param array 旋转数组 + * @return 数组中的最小值 + */ + public int minNumberInRotateArray(int[] array) { + if (array == null || array.length == 0) { + return 0; + } + + int n = array.length; + if (n == 1 || array[0] < array[n - 1]) { + return array[0]; + } + + int min = array[0]; + for (int i = 1; i < n; ++i) { + min = array[i] < min ? array[i] : min; + } + + return min; + } + +} +``` + +#### 解法二 +利用指针 `p`,`q` 指向数组的首尾,如果 `array[p] < array[q]`,说明数组是递增数组,直接返回 `array[p]`。否则进行如下讨论。 + +计算中间指针 `mid`: +- 如果此时 `array[p]`, `array[q]`, `array[mid]` 两两相等,此时无法采用二分方式,只能通过遍历区间 `[p,q]` 获取最小值; +- 如果此时 `p`,`q` 相邻,说明此时 `q` 指向的元素是最小值,返回 `array[q]`; +- 如果此时 `array[mid] >= array[p]`,说明 `mid` 位于左边的递增数组中,最小值在右边,因此,把 `p` 指向 `mid`,此时保持了 `p` 指向左边递增子数组; +- 如果此时 `array[mid] <= array[q]`,说明 `mid` 位于右边的递增数组中,最小值在左边,因此,把 `q` 指向 `mid`,此时保持了 `q` 指向右边递增子数组。 + +```java + + +/** + * @author Anonymous + * @since 2019/10/30 + */ + +public class Solution { + /** + * 获取旋转数组的最小元素 + * @param array 旋转数组 + * @return 数组中的最小值 + */ + public int minNumberInRotateArray(int[] array) { + if (array == null || array.length == 0) { + return 0; + } + + int p = 0; + // mid初始为p,为了兼容当数组是递增数组(即不满足 array[p] >= array[q])时,返回 array[p] + int mid = p; + int q = array.length - 1; + while (array[p] >= array[q]) { + if (q - p == 1) { + // 当p,q相邻时(距离为1),那么q指向的元素就是最小值 + mid = q; + break; + } + mid = p + ((q - p) >> 1); + + // 当p,q,mid指向的值相等时,此时只能通过遍历查找最小值 + if (array[p] == array[q] && array[mid] == array[p]) { + mid = getMinIndex(array, p, q); + break; + } + + if (array[mid] >= array[p]) { + p = mid; + } else if (array[mid] <= array[q]) { + q = mid; + } + } + + return array[mid]; + + + } + + private int getMinIndex(int[] array, int p, int q) { + int minIndex = p; + for (int i = p + 1; i <= q; ++i) { + minIndex = array[i] < array[minIndex] ? i : minIndex; + } + return minIndex; + } +} +``` + + +### 测试用例 +1. 功能测试(输入的数组是升序排序数组的一个旋转,数组中有重复数字或者没有重复数字); +2. 边界值测试(输入的数组是一个升序排序的数组,只包含一个数字的数组); +3. 特殊输入测试(输入空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/11_MinNumberInRotatedArray/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/11_MinNumberInRotatedArray/Solution.java" new file mode 100644 index 00000000..d963fb1f --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/11_MinNumberInRotatedArray/Solution.java" @@ -0,0 +1,55 @@ + +/** + * @author Anonymous + * @since 2019/10/30 + */ + +public class Solution { + /** + * 获取旋转数组的最小元素 + * @param array 旋转数组 + * @return 数组中的最小值 + */ + public int minNumberInRotateArray(int[] array) { + if (array == null || array.length == 0) { + return 0; + } + + int p = 0; + // mid初始为p,为了兼容当数组是递增数组(即不满足 array[p] >= array[q])时,返回 array[p] + int mid = p; + int q = array.length - 1; + while (array[p] >= array[q]) { + if (q - p == 1) { + // 当p,q相邻时(距离为1),那么q指向的元素就是最小值 + mid = q; + break; + } + mid = p + ((q - p) >> 1); + + // 当p,q,mid指向的值相等时,此时只能通过遍历查找最小值 + if (array[p] == array[q] && array[mid] == array[p]) { + mid = getMinIndex(array, p, q); + break; + } + + if (array[mid] >= array[p]) { + p = mid; + } else if (array[mid] <= array[q]) { + q = mid; + } + } + + return array[mid]; + + + } + + private int getMinIndex(int[] array, int p, int q) { + int minIndex = p; + for (int i = p + 1; i <= q; ++i) { + minIndex = array[i] < array[minIndex] ? i : minIndex; + } + return minIndex; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/12_StringPathInMatrix/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/12_StringPathInMatrix/README.md" new file mode 100644 index 00000000..78829cf5 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/12_StringPathInMatrix/README.md" @@ -0,0 +1,66 @@ +## 矩阵中的路径 + +### 题目描述 +请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 `a b c e s f c s a d e e` 这样的 `3 X 4` 矩阵中包含一条字符串`"bcced"`的路径,但是矩阵中不包含`"abcb"`路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。 + +### 解法 +回溯法。首先,任选一个格子作为路径起点。假设格子对应的字符为 ch,并且对应路径上的第 i 个字符。若相等,到相邻格子寻找路径上的第 i+1 个字符。重复这一过程。 + +```java +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + /** + * 判断矩阵中是否包含某条路径 + * @param matrix 矩阵 + * @param rows 行数 + * @param cols 列数 + * @param str 路径 + * @return bool + */ + public boolean hasPath(char[] matrix, int rows, int cols, char[] str) { + if (matrix == null || rows < 1 || cols < 1 || str == null) { + return false; + } + boolean[] visited = new boolean[matrix.length]; + int pathLength = 0; + for (int i = 0; i < rows; ++i) { + for (int j = 0; j < cols; ++j) { + if (hasPath(matrix, rows, cols, str, i, j, pathLength, visited)) { + return true; + } + } + } + return false; + } + + private boolean hasPath(char[] matrix, int rows, int cols, char[] str, int i, int j, int pathLength, boolean[] visited) { + if (pathLength == str.length) { + return true; + } + boolean hasPath = false; + if (i >= 0 && i < rows && j >= 0 && j < cols && matrix[i * cols + j] == str[pathLength] && !visited[i * cols + j]) { + ++pathLength; + visited[i * cols + j] = true; + hasPath = hasPath(matrix, rows, cols, str, i - 1, j, pathLength, visited) + || hasPath(matrix, rows, cols, str, i + 1, j, pathLength, visited) + || hasPath(matrix, rows, cols, str, i, j - 1, pathLength, visited) + || hasPath(matrix, rows, cols, str, i, j + 1, pathLength, visited); + if (!hasPath) { + --pathLength; + visited[i * cols + j] = false; + } + } + return hasPath; + } +} + +``` + +### 测试用例 +1. 功能测试(在多行多列的矩阵中存在或者不存在路径); +2. 边界值测试(矩阵只有一行或者一列;矩阵和路径中的所有字母都是相同的); +3. 特殊输入测试(输入空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/12_StringPathInMatrix/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/12_StringPathInMatrix/Solution.java" new file mode 100644 index 00000000..6a6dada7 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/12_StringPathInMatrix/Solution.java" @@ -0,0 +1,52 @@ +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + /** + * 判断矩阵中是否包含某条路径 + * @param matrix 矩阵 + * @param rows 行数 + * @param cols 列数 + * @param str 路径 + * @return bool + */ + public boolean hasPath(char[] matrix, int rows, int cols, char[] str) { + if (matrix == null || rows < 1 || cols < 1 || str == null) { + return false; + } + boolean[] visited = new boolean[matrix.length]; + int pathLength = 0; + for (int i = 0; i < rows; ++i) { + for (int j = 0; j < cols; ++j) { + if (hasPath(matrix, rows, cols, str, i, j, pathLength, visited)) { + return true; + } + } + } + return false; + } + + private boolean hasPath(char[] matrix, int rows, int cols, char[] str, int i, int j, int pathLength, boolean[] visited) { + if (pathLength == str.length) { + return true; + } + boolean hasPath = false; + if (i >= 0 && i < rows && j >= 0 && j < cols && matrix[i * cols + j] == str[pathLength] && !visited[i * cols + j]) { + ++pathLength; + visited[i * cols + j] = true; + hasPath = hasPath(matrix, rows, cols, str, i - 1, j, pathLength, visited) + || hasPath(matrix, rows, cols, str, i + 1, j, pathLength, visited) + || hasPath(matrix, rows, cols, str, i, j - 1, pathLength, visited) + || hasPath(matrix, rows, cols, str, i, j + 1, pathLength, visited); + if (!hasPath) { + --pathLength; + visited[i * cols + j] = false; + } + } + return hasPath; + } + + +} diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/13_RobotMove/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/13_RobotMove/README.md" new file mode 100644 index 00000000..cfeefd8a --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/13_RobotMove/README.md" @@ -0,0 +1,66 @@ +## 机器人的移动范围 + +### 题目描述 +地上有一个`m`行和`n`列的方格。一个机器人从坐标`0,0`的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于`k`的格子。 例如,当`k`为`18`时,机器人能够进入方格`(35,37)`,因为`3+5+3+7 = 18`。但是,它不能进入方格`(35,38)`,因为`3+5+3+8 = 19`。请问该机器人能够达到多少个格子? + +### 解法 +从坐标(0, 0) 开始移动,当它准备进入坐标(i, j),判断是否能进入,如果能,再判断它能否进入 4 个相邻的格子 (i-1, j), (i+1, j), (i, j-1), (i, j+1)。 + +```java +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + /** + * 计算能到达的格子数 + * @param threshold 限定的数字 + * @param rows 行数 + * @param cols 列数 + * @return 格子数 + */ + public int movingCount(int threshold, int rows, int cols) { + if (threshold < 0 || rows < 1 || cols < 1) { + return 0; + } + boolean[] visited = new boolean[rows * cols]; + return getCount(threshold, 0, 0, rows, cols, visited); + } + + private int getCount(int threshold, int i, int j, int rows, int cols, boolean[] visited) { + if (check(threshold, i, j, rows, cols, visited)) { + visited[i * cols + j] = true; + return 1 + + getCount(threshold, i - 1, j, rows, cols, visited) + + getCount(threshold, i + 1, j, rows, cols, visited) + + getCount(threshold, i, j - 1, rows, cols, visited) + + getCount(threshold, i, j + 1, rows, cols, visited); + } + return 0; + } + + private boolean check(int threshold, int i, int j, int rows, int cols, boolean[] visited) { + return i >= 0 + && i < rows + && j >= 0 + && j < cols + && !visited[i * cols + j] + && getDigitSum(i) + getDigitSum(j) <= threshold; + } + + private int getDigitSum(int i) { + int res = 0; + while (i > 0) { + res += i % 10; + i /= 10; + } + return res; + } +} +``` + +### 测试用例 +1. 功能测试(方格为多行多列;k 为正数); +2. 边界值测试(方格只有一行或者一列;k = 0); +3. 特殊输入测试(k < 0)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/13_RobotMove/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/13_RobotMove/Solution.java" new file mode 100644 index 00000000..c50382fe --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/13_RobotMove/Solution.java" @@ -0,0 +1,47 @@ +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + /** + * 计算能到达的格子数 + * + * @param threshold 限定的数字 + * @param rows 行数 + * @param cols 列数 + * @return 格子数 + */ + public int movingCount(int threshold, int rows, int cols) { + if (threshold < 0 || rows < 1 || cols < 1) { + return 0; + } + boolean[] visited = new boolean[rows * cols]; + return getCount(threshold, 0, 0, rows, cols, visited); + } + + private int getCount(int threshold, int i, int j, int rows, int cols, boolean[] visited) { + if (check(threshold, i, j, rows, cols, visited)) { + visited[i * cols + j] = true; + return 1 + getCount(threshold, i - 1, j, rows, cols, visited) + + getCount(threshold, i + 1, j, rows, cols, visited) + + getCount(threshold, i, j - 1, rows, cols, visited) + + getCount(threshold, i, j + 1, rows, cols, visited); + } + return 0; + } + + private boolean check(int threshold, int i, int j, int rows, int cols, boolean[] visited) { + return i >= 0 && i < rows && j >= 0 && j < cols && !visited[i * cols + j] + && getDigitSum(i) + getDigitSum(j) <= threshold; + } + + private int getDigitSum(int i) { + int res = 0; + while (i > 0) { + res += i % 10; + i /= 10; + } + return res; + } +} diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/14_CuttingRope/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/14_CuttingRope/README.md" new file mode 100644 index 00000000..f8c98172 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/14_CuttingRope/README.md" @@ -0,0 +1,102 @@ +## 剪绳子 + +### 题目描述 +给你一根长度为`n`绳子,请把绳子剪成`m`段(`m`、`n`都是整数,`n>1`并且`m≥1`)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]*k[1]*…*k[m]可能的最大乘积是多少?例如当绳子的长度是 8 时,我们把它剪成长度分别为 `2、3、3` 的三段,此时得到最大的乘积`18`。 + +### 解法 +#### 解法一:动态规划法 +时间复杂度`O(n²)`,空间复杂度`O(n)`。 + +- 长度为 2,只可能剪成长度为 1 的两段,因此 f(2)=1 +- 长度为 3,剪成长度分别为 1 和 2 的两段,乘积比较大,因此 f(3) = 2 +- 长度为 n,在剪第一刀的时候,有 n-1 种可能的选择,剪出来的绳子又可以继续剪,可以看出,原问题可以划分为子问题,子问题又有重复子问题。 + +```java +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + + /** + * 剪绳子求最大乘积 + * @param length 绳子长度 + * @return 乘积最大值 + */ + public int maxProductAfterCutting(int length) { + if (length < 2) { + return 0; + } + if (length < 4) { + return length - 1; + } + + // res[i] 表示当长度为i时的最大乘积 + int[] res = new int[length + 1]; + res[1] = 1; + res[2] = 2; + res[3] = 3; + // 从长度为4开始计算 + for (int i = 4; i <= length; ++i) { + int max = 0; + for (int j = 1; j <= i / 2; ++j) { + max = Math.max(max, res[j] * res[i - j]); + } + res[i] = max; + } + + return res[length]; + + } +} + +``` + +#### 贪心算法 +时间复杂度`O(1)`,空间复杂度`O(1)`。 + +贪心策略: +- 当 n>=5 时,尽可能多地剪长度为 3 的绳子 +- 当剩下的绳子长度为 4 时,就把绳子剪成两段长度为 2 的绳子。 + +**证明:** +- 当 n>=5 时,可以证明 2(n-2)>n,并且 3(n-3)>n。也就是说,当绳子剩下长度大于或者等于 5 的时候,可以把它剪成长度为 3 或者 2 的绳子段。 +- 当 n>=5 时,3(n-3)>=2(n-2),因此,应该尽可能多地剪长度为 3 的绳子段。 +- 当 n=4 时,剪成两根长度为 2 的绳子,其实没必要剪,只是题目的要求是至少要剪一刀。 + +```java +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + + /** + * 剪绳子求最大乘积 + * @param length 绳子长度 + * @return 乘积最大值 + */ + public int maxProductAfterCutting(int length) { + if (length < 2) { + return 0; + } + if (length < 4) { + return length - 1; + } + + int timesOf3 = length / 3; + if (length % 3 == 1) { + --timesOf3; + } + int timesOf2 = (length - timesOf3 * 3) >> 1; + return (int) (Math.pow(3, timesOf3) * Math.pow(2, timesOf2)); + } +} + +``` + +### 测试用例 +1. 功能测试(绳子的初始长度大于 5); +2. 边界值测试(绳子的初始长度分别为 0、1、2、3、4)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/14_CuttingRope/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/14_CuttingRope/Solution.java" new file mode 100644 index 00000000..e4ca91f6 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/14_CuttingRope/Solution.java" @@ -0,0 +1,57 @@ +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + + /** + * 剪绳子求最大乘积(动态规划) + * + * @param length 绳子长度 + * @return 乘积最大值 + */ + public int maxProductAfterCutting1(int length) { + if (length < 2) { + return 0; + } + if (length < 4) { + return length - 1; + } + + int[] res = new int[length + 1]; + res[1] = 1; + res[2] = 2; + res[3] = 3; + for (int i = 4; i <= length; ++i) { + int max = 0; + for (int j = 1; j <= i / 2; ++j) { + max = Math.max(max, res[j] * res[i - j]); + } + res[i] = max; + } + return res[length]; + } + + /** + * 剪绳子求最大乘积(贪心算法) + * + * @param length 绳子长度 + * @return 乘积最大值 + */ + public int maxProductAfterCutting2(int length) { + if (length < 2) { + return 0; + } + if (length < 4) { + return length - 1; + } + + int timesOf3 = length / 3; + if (length % 3 == 1) { + --timesOf3; + } + int timesOf2 = (length - timesOf3 * 3) >> 1; + return (int) (Math.pow(3, timesOf3) * Math.pow(2, timesOf2)); + } +} diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/15_NumberOf1InBinary/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/15_NumberOf1InBinary/README.md" new file mode 100644 index 00000000..f195d290 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/15_NumberOf1InBinary/README.md" @@ -0,0 +1,73 @@ +## 二进制中 1 的个数 + +### 题目描述 +输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 + +### 解法 +#### 解法一 +利用整数 1,依次左移每次与 n 进行与运算,若结果不为0,说明这一位上数字为 1,++cnt。 + +此解法 i 需要左移 32 次。 + +不要用 n 去右移并与 1 进行与运算,因为n 可能为负数,右移时会陷入死循环。 + +```java +public class Solution { + public int NumberOf1(int n) { + int cnt = 0; + int i = 1; + while (i != 0) { + if ((n & i) != 0) { + ++cnt; + } + i <<= 1; + } + return cnt; + } +} +``` + +#### 解法二(推荐) +- 运算 (n - 1) & n,直至 n 为 0。运算的次数即为 n 的二进制中 1 的个数。 + +因为 n-1 会将 n 的最右边一位 1 改为 0,如果右边还有 0,则所有 0 都会变成 1。结果与 n 进行与运算,会去除掉最右边的一个1。 + +举个栗子: +``` +若 n = 1100, +n - 1 = 1011 +n & (n - 1) = 1000 + +即:把最右边的 1 变成了 0。 +``` + +> 把一个整数减去 1 之后再和原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的 1 变成 0。很多二进制的问题都可以用这种思路解决。 + +```java +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + /** + * 计算整数的二进制表示里1的个数 + * @param n 整数 + * @return 1的个数 + */ + public int NumberOf1(int n) { + int cnt = 0; + while (n != 0) { + n = (n - 1 ) & n; + ++cnt; + } + return cnt; + } +} + +``` + +### 测试用例 +1. 正数(包括边界值 1、0x7FFFFFFF); +2. 负数(包括边界值 0x80000000、0xFFFFFFFF); +3. 0。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/15_NumberOf1InBinary/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/15_NumberOf1InBinary/Solution.java" new file mode 100644 index 00000000..b1c4a260 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/15_NumberOf1InBinary/Solution.java" @@ -0,0 +1,21 @@ +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + /** + * 计算整数的二进制表示里1的个数 + * + * @param n 整数 + * @return 1的个数 + */ + public int NumberOf1(int n) { + int cnt = 0; + while (n != 0) { + n = (n - 1) & n; + ++cnt; + } + return cnt; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/16_Power/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/16_Power/README.md" new file mode 100644 index 00000000..c24c3f05 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/16_Power/README.md" @@ -0,0 +1,36 @@ +## 数值的整数次方 + +### 题目描述 +给定一个 `double` 类型的浮点数 `base` 和 `int` 类型的整数 `exponent`。求 `base`的 `exponent` 次方。 + +### 解法 +注意判断值数是否小于 0。另外 0 的 0 次方没有意义,也需要考虑一下,看具体题目要求。 + +```java +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + /** + * 计算数值的整数次方 + * @param base 底数 + * @param exponent 指数 + * @return 数值的整数次方 + */ + public double Power(double base, int exponent) { + double result = 1.0; + int n = Math.abs(exponent); + for (int i = 0; i < n; ++i) { + result *= base; + } + + return exponent < 0 ? 1.0 / result : result; + } +} + +``` + +### 测试用例 +1. 把底数和指数分别设为正数、负数和零。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/16_Power/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/16_Power/Solution.java" new file mode 100644 index 00000000..4fb24ab2 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/16_Power/Solution.java" @@ -0,0 +1,23 @@ +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + /** + * 计算数值的整数次方 + * + * @param base 底数 + * @param exponent 指数 + * @return 数值的整数次方 + */ + public double Power(double base, int exponent) { + double result = 1.0; + int n = Math.abs(exponent); + for (int i = 0; i < n; ++i) { + result *= base; + } + + return exponent < 0 ? 1.0 / result : result; + } +} diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/17_Print1ToMaxOfNDigits/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/17_Print1ToMaxOfNDigits/README.md" new file mode 100644 index 00000000..e4434dcc --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/17_Print1ToMaxOfNDigits/README.md" @@ -0,0 +1,90 @@ +## 打印从 1 到最大的 n 位数 + +### 题目描述 +输入数字 `n`,按顺序打印出从 `1` 最大的 `n` 位十进制数。比如输入 `3`,则打印出 `1、2、3` 一直到最大的 3 位数即 999。 + +### 解法 +此题需要注意 n 位数构成的数字可能超出最大的 int 或者 long long 能表示的范围。因此,采用字符数组来存储数字。 + +关键是: +- 对字符数组表示的数进行递增操作 +- 输出数字(0开头的需要把0去除) + +```java +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + + /** + * 打印从1到最大的n位数 + * @param n n位 + */ + public void print1ToMaxOfNDigits(int n) { + if (n < 1) { + return; + } + + char[] chars = new char[n]; + for (int i = 0; i < n; ++i) { + chars[i] = '0'; + } + + while (!increment(chars)) { + printNumber(chars); + } + } + + /** + * 打印数字(去除前面的0) + * @param chars 数字数组 + */ + private void printNumber(char[] chars) { + int index = 0; + int n = chars.length; + for (char ch : chars) { + if (ch != '0') { + break; + } + ++index; + } + StringBuilder sb = new StringBuilder(); + for (int i = index; i < n; ++i) { + sb.append(chars[i]); + } + System.out.println(sb.toString()); + } + + /** + * 数字加1 + * @param chars 数字数组 + * @return 是否溢出 + */ + private boolean increment(char[] chars) { + boolean flag = false; + int n = chars.length; + int carry = 1; + for (int i = n - 1; i >= 0; --i) { + + int num = chars[i] - '0' + carry; + if (num > 9) { + if (i == 0) { + flag = true; + break; + } + chars[i] = '0'; + } else { + ++chars[i]; + break; + } + } + return flag; + } +} +``` + +### 测试用例 +1. 功能测试(输入 1、2、3......); +2. 特殊输入测试(输入 -1、0)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/17_Print1ToMaxOfNDigits/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/17_Print1ToMaxOfNDigits/Solution.java" new file mode 100644 index 00000000..08487a43 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/17_Print1ToMaxOfNDigits/Solution.java" @@ -0,0 +1,75 @@ +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + + /** + * 打印从1到最大的n位数 + * + * @param n n位 + */ + public void print1ToMaxOfNDigits(int n) { + if (n < 1) { + return; + } + + char[] chars = new char[n]; + for (int i = 0; i < n; ++i) { + chars[i] = '0'; + } + + while (!increment(chars)) { + printNumber(chars); + } + } + + /** + * 打印数字(去除前面的0) + * + * @param chars 数字数组 + */ + private void printNumber(char[] chars) { + int index = 0; + int n = chars.length; + for (char ch : chars) { + if (ch != '0') { + break; + } + ++index; + } + StringBuilder sb = new StringBuilder(); + for (int i = index; i < n; ++i) { + sb.append(chars[i]); + } + System.out.println(sb.toString()); + } + + /** + * 数字加1 + * + * @param chars 数字数组 + * @return 是否溢出 + */ + private boolean increment(char[] chars) { + boolean flag = false; + int n = chars.length; + int carry = 1; + for (int i = n - 1; i >= 0; --i) { + + int num = chars[i] - '0' + carry; + if (num > 9) { + if (i == 0) { + flag = true; + break; + } + chars[i] = '0'; + } else { + ++chars[i]; + break; + } + } + return flag; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_01_DeleteNodeInList/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_01_DeleteNodeInList/README.md" new file mode 100644 index 00000000..0012f456 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_01_DeleteNodeInList/README.md" @@ -0,0 +1,59 @@ +## 在O(1)时间内删除链表节点 + +### 题目描述 +给定单向链表的头指针和一个节点指针,定义一个函数在 O(1) 时间内删除该节点。 + +### 解法 +判断要删除的节点是否是尾节点,若是,直接删除;若不是,把要删除节点的下一个节点赋给要删除的节点即可。 + +### ```进行n次操作,平均时间复杂度为:( (n-1) * O(1) + O(n) ) / n = O(1),所以符合题目上说的O(1)``` + +```java +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + + class ListNode { + int val; + ListNode next; + } + + /** + * 删除链表的节点 + * @param head 链表头节点 + * @param tobeDelete 要删除的节点 + */ + public ListNode deleteNode(ListNode head, ListNode tobeDelete) { + if (head == null || tobeDelete == null) { + return head; + } + + // 删除的不是尾节点 + if (tobeDelete.next != null) { + tobeDelete.val = tobeDelete.next.val; + tobeDelete.next = tobeDelete.next.next; + } + // 链表中仅有一个节点 + else if (head == tobeDelete) { + head = null; + } + // 删除的是尾节点 + else { + ListNode ptr = head; + while (ptr.next != tobeDelete) { + ptr = ptr.next; + } + ptr.next = null; + } + + return head; + } +} +``` + +### 测试用例 +1. 功能测试(从有多个节点的链表的中间/头部/尾部删除一个节点;从只有一个节点的链表中删除唯一的节点); +2. 特殊输入测试(指向链表头节点的为空指针;指向要删除节点的为空指针)。 diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_01_DeleteNodeInList/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_01_DeleteNodeInList/Solution.java" new file mode 100644 index 00000000..535aef4b --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_01_DeleteNodeInList/Solution.java" @@ -0,0 +1,44 @@ +/** + * @author Anonymous + * @since 2019/11/20 + */ + +public class Solution { + + class ListNode { + int val; + ListNode next; + } + + /** + * 删除链表的节点 + * + * @param head 链表头节点 + * @param tobeDelete 要删除的节点 + */ + public ListNode deleteNode(ListNode head, ListNode tobeDelete) { + if (head == null || tobeDelete == null) { + return head; + } + + // 删除的不是尾节点 + if (tobeDelete.next != null) { + tobeDelete.val = tobeDelete.next.val; + tobeDelete.next = tobeDelete.next.next; + } + // 链表中仅有一个节点 + else if (head == tobeDelete) { + head = null; + } + // 删除的是尾节点 + else { + ListNode ptr = head; + while (ptr.next != tobeDelete) { + ptr = ptr.next; + } + ptr.next = null; + } + + return head; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_02_DeleteDuplicatedNode/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_02_DeleteDuplicatedNode/README.md" new file mode 100644 index 00000000..a364d889 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_02_DeleteDuplicatedNode/README.md" @@ -0,0 +1,94 @@ +## 删除链表中重复的节点 + +### 题目描述 +在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表`1->2->3->3->4->4->5` 处理后为 `1->2->5`。 + +### 解法 +#### 解法一:递归 + +```java +/** + * @author Anonymous + * @since 2019/11/21 + */ + +/* + public class ListNode { + int val; + ListNode next = null; + + ListNode(int val) { + this.val = val; + } +} +*/ +public class Solution { + /** + * 删除链表重复的节点 + * @param pHead 链表头节点 + * @return 删除节点后的链表 + */ + public ListNode deleteDuplication(ListNode pHead) { + if (pHead == null || pHead.next == null) { + return pHead; + } + + if (pHead.val == pHead.next.val) { + if (pHead.next.next == null) { + return null; + } + if (pHead.next.next.val == pHead.val) { + return deleteDuplication(pHead.next); + } + return deleteDuplication(pHead.next.next); + } + pHead.next = deleteDuplication(pHead.next); + return pHead; + } +} +``` + +#### 解法二 +```java +/* + public class ListNode { + int val; + ListNode next = null; + + ListNode(int val) { + this.val = val; + } +} +*/ +public class Solution { + public ListNode deleteDuplication(ListNode pHead) { + if (pHead == null || pHead.next == null) { + return pHead; + } + + ListNode pre = null; + ListNode cur = pHead; + while (cur != null) { + if (cur.next != null && cur.next.val == cur.val) { + int val = cur.val; + while (cur.next != null && cur.next.val == val) { + cur = cur.next; + } + if (pre == null) { + pHead = cur.next; + } else { + pre.next = cur.next; + } + } else { + pre = cur; + } + cur = cur.next; + } + return pHead; + } +} +``` + +### 测试用例 +1. 功能测试(重复的节点位于链表的头部/中间/尾部;链表中没有重复的节点); +2. 特殊输入测试(指向链表头节点的为空指针;链表中所有节点都是重复的)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_02_DeleteDuplicatedNode/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_02_DeleteDuplicatedNode/Solution.java" new file mode 100644 index 00000000..d25e6913 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/18_02_DeleteDuplicatedNode/Solution.java" @@ -0,0 +1,39 @@ +/** + * @author Anonymous + * @since 2019/11/21 + */ + +/* + public class ListNode { + int val; + ListNode next = null; + + ListNode(int val) { + this.val = val; + } +} +*/ +public class Solution { + /** + * 删除链表重复的节点 + * @param pHead 链表头节点 + * @return 删除节点后的链表 + */ + public ListNode deleteDuplication(ListNode pHead) { + if (pHead == null || pHead.next == null) { + return pHead; + } + + if (pHead.val == pHead.next.val) { + if (pHead.next.next == null) { + return null; + } + if (pHead.next.next.val == pHead.val) { + return deleteDuplication(pHead.next); + } + return deleteDuplication(pHead.next.next); + } + pHead.next = deleteDuplication(pHead.next); + return pHead; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/19_RegularExpressionsMatching/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/19_RegularExpressionsMatching/README.md" new file mode 100644 index 00000000..a5b5f21f --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/19_RegularExpressionsMatching/README.md" @@ -0,0 +1,68 @@ +## 正则表达式匹配 + +### 题目描述 +请实现一个函数用来匹配包括`.`和`*`的正则表达式。模式中的字符`.`表示任意一个字符,而`*`表示它前面的字符可以出现任意次(包含`0`次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串`aaa`与模式`a.a`和`ab*ac*a`匹配,但是与`aa.a`和`ab*a`均不匹配。 + +### 解法 +判断模式中第二个字符是否是 `*`: +- 若是,看如果模式串第一个字符与字符串第一个字符是否匹配: + - 1. 若不匹配,在模式串上向右移动两个字符`j+2`,相当于 a* 被忽略 + - 2. 若匹配,字符串后移`i+1`。此时模式串可以移动两个字符`j+2`,也可以不移动`j`。 +- 若不是,看当前字符与模式串的当前字符是否匹配,即 str[i] == pattern[j] || pattern[j] == '.': + - 1. 若匹配,则字符串与模式串都向右移动一位,`i+1`,`j+1`。 + - 2. 若不匹配,返回 fasle。 + +```java +/** + * @author Anonymous + * @since 2019/11/21 + */ + +public class Solution { + /** + * 判断字符串是否与模式串匹配 + * @param str 字符串 + * @param pattern 模式串 + * @return 是否匹配 + */ + public boolean match(char[] str, char[] pattern) { + if (str == null || pattern == null) { + return false; + } + return match(str, 0, str.length, pattern, 0, pattern.length); + } + + private boolean match(char[] str, int i, int len1, + char[] pattern, int j, int len2) { + if (i == len1 && j == len2) { + return true; + } + + // "",".*" + if (i != len1 && j == len2) { + return false; + } + + if (j + 1 < len2 && pattern[j + 1] == '*') { + if (i < len1 && (str[i] == pattern[j] || pattern[j] == '.')) { + return match(str, i, len1, pattern, j + 2, len2) + || match(str, i + 1, len1, pattern, j, len2) + || match(str, i + 1, len1, pattern,j + 2, len2); + } + + // "",".*" + return match(str, i, len1, pattern, j + 2, len2); + + } + if (i < len1 && (str[i] == pattern[j] || pattern[j] == '.')) { + return match(str, i + 1, len1, pattern, j + 1, len2); + } + return false; + + } +} +``` + +### 测试用例 +1. 功能测试(模式字符串里包含普通字符、`.`、`*`;模式字符串和输入字符串匹配/不匹配); +2. 特殊输入测试(输入字符串和模式字符串是空指针、空字符串)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/19_RegularExpressionsMatching/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/19_RegularExpressionsMatching/Solution.java" new file mode 100644 index 00000000..170649c7 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/19_RegularExpressionsMatching/Solution.java" @@ -0,0 +1,47 @@ +/** + * @author Anonymous + * @since 2019/11/21 + */ + +public class Solution { + /** + * 判断字符串是否与模式串匹配 + * + * @param str 字符串 + * @param pattern 模式串 + * @return 是否匹配 + */ + public boolean match(char[] str, char[] pattern) { + if (str == null || pattern == null) { + return false; + } + return match(str, 0, str.length, pattern, 0, pattern.length); + } + + private boolean match(char[] str, int i, int len1, char[] pattern, int j, int len2) { + if (i == len1 && j == len2) { + return true; + } + + // "",".*" + if (i != len1 && j == len2) { + return false; + } + + if (j + 1 < len2 && pattern[j + 1] == '*') { + if (i < len1 && (str[i] == pattern[j] || pattern[j] == '.')) { + return match(str, i, len1, pattern, j + 2, len2) || match(str, i + 1, len1, pattern, j, len2) + || match(str, i + 1, len1, pattern, j + 2, len2); + } + + // "",".*" + return match(str, i, len1, pattern, j + 2, len2); + + } + if (i < len1 && (str[i] == pattern[j] || pattern[j] == '.')) { + return match(str, i + 1, len1, pattern, j + 1, len2); + } + return false; + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/20_NumericStrings/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/20_NumericStrings/README.md" new file mode 100644 index 00000000..720f7828 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/20_NumericStrings/README.md" @@ -0,0 +1,115 @@ +## 表示数值的字符串 + +### 题目描述 +请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。 + +### 解法 + +#### 解法一 + +利用正则表达式匹配即可。 +``` +[] : 字符集合 +() : 分组 +? : 重复 0 ~ 1 ++ : 重复 1 ~ n +* : 重复 0 ~ n +. : 任意字符 +\\. : 转义后的 . +\\d : 数字 +``` + +```java +/** + * @author Anonymous + * @since 2019/11/21 + */ + +public class Solution { + /** + * 判断是否是数字 + * @param str + * @return + */ + public boolean isNumeric(char[] str) { + return str != null + && str.length != 0 + && new String(str).matches("[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?"); + } +} +``` + +#### 解法二【剑指offer解法】 + +表示数值的字符串遵循模式`A[.[B]][e|EC]`或者`.B[e|EC]`,其中A为数值的整数部分,B紧跟小数点为数值的小数部分,C紧跟着e或者E为数值的指数部分。上述A和C都有可能以 `+` 或者 `-` 开头的0~9的数位串,B也是0~9的数位串,但前面不能有正负号。 + +```java +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/12/29 + * @description + */ +public class Solution { + + private int index = 0; + + /** + * 判断是否是数值 + * @param str + * @return + */ + public boolean isNumeric(char[] str) { + if (str == null || str.length < 1) { + return false; + } + + // 判断是否存在整数 + boolean flag = scanInteger(str); + + // 小数部分 + if (index < str.length && str[index] == '.') { + index++; + // 小数部分可以有整数或者没有整数 + // 所以使用 || + flag = scanUnsignedInteger(str) || flag; + } + + if (index < str.length && (str[index] == 'e' || str[index] == 'E')) { + index++; + // e或E前面必须有数字 + // e或者E后面必须有整数 + // 所以使用 && + flag = scanInteger(str) && flag; + } + + return flag && index == str.length; + + } + + private boolean scanInteger(char[] str) { + // 去除符号 + while (index < str.length && (str[index] == '+' || str[index] == '-')) { + index++; + } + + return scanUnsignedInteger(str); + } + + private boolean scanUnsignedInteger(char[] str) { + int start = index; + while (index < str.length && str[index] >= '0' && str[index] <= '9') { + index++; + } + // 判断是否存在整数 + return index > start; + } +} +``` + + + +### 测试用例 + +1. 功能测试(正数或者负数;包含或者不包含整数部分的数值;包含或者不包含效数部分的值;包含或者不包含指数部分的值;各种不能表达有效数值的字符串); +2. 特殊输入测试(输入字符串和模式字符串是空指针、空字符串)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/20_NumericStrings/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/20_NumericStrings/Solution.java" new file mode 100644 index 00000000..c3be7f8d --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/20_NumericStrings/Solution.java" @@ -0,0 +1,16 @@ +/** + * @author Anonymous + * @since 2019/11/21 + */ + +public class Solution { + /** + * 判断是否是数字 + * + * @param str + * @return + */ + public boolean isNumeric(char[] str) { + return str != null && str.length != 0 && new String(str).matches("[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?"); + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/20_NumericStrings/Solution1.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/20_NumericStrings/Solution1.java" new file mode 100644 index 00000000..c0aad6f9 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/20_NumericStrings/Solution1.java" @@ -0,0 +1,61 @@ +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/12/29 + * @description + */ +public class Solution1 { + + private int index = 0; + + /** + * 判断是否是数值 + * @param str + * @return + */ + public boolean isNumeric(char[] str) { + if (str == null || str.length < 1) { + return false; + } + + // 判断是否存在整数 + boolean flag = scanInteger(str); + + // 小数部分 + if (index < str.length && str[index] == '.') { + index++; + // 小数部分可以有整数或者没有整数 + // 所以使用 || + flag = scanUnsignedInteger(str) || flag; + } + + if (index < str.length && (str[index] == 'e' || str[index] == 'E')) { + index++; + // e或E前面必须有数字 + // e或者E后面必须有整数 + // 所以使用 && + flag = scanInteger(str) && flag; + } + + return flag && index == str.length; + + } + + private boolean scanInteger(char[] str) { + // 去除符号 + if (index < str.length && (str[index] == '+' || str[index] == '-')) { + index++; + } + + return scanUnsignedInteger(str); + } + + private boolean scanUnsignedInteger(char[] str) { + int start = index; + while (index < str.length && str[index] >= '0' && str[index] <= '9') { + index++; + } + // 判断是否存在整数 + return index > start; + } +} diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/21_ReorderArray/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/21_ReorderArray/README.md" new file mode 100644 index 00000000..bdb01753 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/21_ReorderArray/README.md" @@ -0,0 +1,68 @@ +## 调整数组顺序使奇数位于偶数前面 + +### 题目描述 +输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 + +### 解法 +#### 解法一 +计算出奇数的个数,就很容易写出来了。 + +```java +import java.util.Arrays; + +/** + * @author Anonymous + * @since 2019/11/21 + */ + +public class Solution { + /** + * 调整数组元素顺序,使得奇数元素位于偶数元素前面,且保证奇数和奇数,偶数和偶数之间的相对位置不变。 + * @param array 数组 + */ + public void reOrderArray(int [] array) { + if (array == null || array.length < 2) { + return; + } + + int numsOfOdd = 0; + for (int val : array) { + if (val % 2 == 1) { + ++numsOfOdd; + } + } + int[] bak = Arrays.copyOf(array, array.length); + int i = 0, j = numsOfOdd; + for (int val : bak) { + if (val % 2 == 1) { + array[i++] = val; + } else { + array[j++] = val; + } + } + } + +} +``` + +#### 解法二 +```java +import java.util.Arrays; + +public class Solution { + public void reOrderArray(int [] array) { + if (array == null || array.length < 2) { + return; + } + Integer[] bak = new Integer[array.length]; + Arrays.setAll(bak, i -> array[i]); + Arrays.sort(bak, (x, y) -> (y & 1) - (x & 1)); + Arrays.setAll(array, i -> bak[i]); + } + +} +``` + +### 测试用例 +1. 功能测试(输入数组中的奇数、偶数交替出现;输入的数组中所有偶数都出现在奇数的前面;输入的数组中所有偶数都出现在奇数的前面;输入的数组中所有奇数都出现在偶数的前面); +2. 特殊输入测试(输入空指针;输入的数组只包含一个数字)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/21_ReorderArray/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/21_ReorderArray/Solution.java" new file mode 100644 index 00000000..095ee76a --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/21_ReorderArray/Solution.java" @@ -0,0 +1,36 @@ +import java.util.Arrays; + +/** + * @author Anonymous + * @since 2019/11/21 + */ + +public class Solution { + /** + * 调整数组元素顺序,使得奇数元素位于偶数元素前面,且保证奇数和奇数,偶数和偶数之间的相对位置不变。 + * + * @param array 数组 + */ + public void reOrderArray(int[] array) { + if (array == null || array.length < 2) { + return; + } + + int numsOfOdd = 0; + for (int val : array) { + if (val % 2 == 1) { + ++numsOfOdd; + } + } + int[] bak = Arrays.copyOf(array, array.length); + int i = 0, j = numsOfOdd; + for (int val : bak) { + if (val % 2 == 1) { + array[i++] = val; + } else { + array[j++] = val; + } + } + } + +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/22_KthNodeFromEnd/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/22_KthNodeFromEnd/README.md" new file mode 100644 index 00000000..6d136571 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/22_KthNodeFromEnd/README.md" @@ -0,0 +1,61 @@ +## 链表中倒数第k个结点 + +### 题目描述 +输入一个链表,输出该链表中倒数第k个结点。 + +### 解法 +pre 指针走 `k-1` 步。之后 cur 指针指向 phead,然后两个指针同时走,直至 pre 指针到达尾结点。 + +> 当用一个指针遍历链表不能解决问题的时候,可以尝试用两个指针来遍历链表。可以让其中一个指针遍历的速度快一些。 + +此题需要考虑一些特殊情况。比如 k 的值小于 0 或者大于链表长度。 + +```java +/** + * @author Anonymous + * @since 2019/11/21 + */ + +/* +public class ListNode { + int val; + ListNode next = null; + + ListNode(int val) { + this.val = val; + } +}*/ +public class Solution { + /** + * 找出链表倒数第k个节点,k从1开始 + * @param head 链表头部 + * @param k 第k个节点 + * @return 倒数第k个节点 + */ + public ListNode FindKthToTail(ListNode head,int k) { + if (head == null || k < 1) { + return null; + } + + ListNode pre = head; + for (int i = 0; i < k - 1; ++i) { + if (pre.next != null) { + pre = pre.next; + } else { + return null; + } + } + + ListNode cur = head; + while (pre.next != null) { + pre = pre.next; + cur = cur.next; + } + return cur; + } +} +``` + +### 测试用例 +1. 功能测试(第 k 个节点在链表的中间/头部/尾部); +2. 特殊输入测试(输入空指针;链表的节点总数小于 k;k=0)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/22_KthNodeFromEnd/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/22_KthNodeFromEnd/Solution.java" new file mode 100644 index 00000000..86bcd296 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/22_KthNodeFromEnd/Solution.java" @@ -0,0 +1,43 @@ +/** + * @author Anonymous + * @since 2019/11/21 + */ + +/* +public class ListNode { + int val; + ListNode next = null; + + ListNode(int val) { + this.val = val; + } +}*/ +public class Solution { + /** + * 找出链表倒数第k个节点,k从1开始 + * @param head 链表头部 + * @param k 第k个节点 + * @return 倒数第k个节点 + */ + public ListNode FindKthToTail(ListNode head,int k) { + if (head == null || k < 1) { + return null; + } + + ListNode pre = head; + for (int i = 0; i < k - 1; ++i) { + if (pre.next != null) { + pre = pre.next; + } else { + return null; + } + } + + ListNode cur = head; + while (pre.next != null) { + pre = pre.next; + cur = cur.next; + } + return cur; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/23_EntryNodeInListLoop/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/23_EntryNodeInListLoop/README.md" new file mode 100644 index 00000000..9546ef8b --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/23_EntryNodeInListLoop/README.md" @@ -0,0 +1,83 @@ +## 链表中环的入口结点 + +### 题目描述 +给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出`null`。 + +### 解法 +- 先利用快慢指针。若能相遇,说明存在环,且相遇点一定是在环上;若没有相遇,说明不存在环,返回 `null`。 +- 固定当前相遇点,用一个指针继续走,同时累积结点数。计算出环的结点个数 `cnt`。 +- 指针 p1 先走 `cnt` 步,p2 指向链表头部,之后 `p1`,`p2` 同时走,相遇时,相遇点一定是在环的入口处。因为 `p1` 比 `p2` 多走了环的一圈。 + +```java + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* + public class ListNode { + int val; + ListNode next = null; + + ListNode(int val) { + this.val = val; + } +} +*/ +public class Solution { + + /** + * 求链表环的入口,若没有环,返回null + * @param pHead 链表头 + * @return 环的入口点 + */ + public ListNode EntryNodeOfLoop(ListNode pHead) { + if (pHead == null || pHead.next == null) { + return null; + } + ListNode fast = pHead; + ListNode slow = pHead; + boolean flag = false; + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + if (fast == slow) { + flag = true; + break; + } + } + + // 快指针与慢指针没有相遇,说明无环,返回 null + if (!flag) { + return null; + } + + ListNode cur = slow.next; + // 求出环中结点个数 + int cnt = 1; + while (cur != slow) { + cur = cur.next; + ++cnt; + } + + // 指针p1先走cnt步 + ListNode p1 = pHead; + for (int i = 0; i < cnt; ++i) { + p1 = p1.next; + } + + // p2指向链表头,然后p1/p2同时走,首次相遇的地方就是环的入口 + ListNode p2 = pHead; + while (p1 != p2) { + p1 = p1.next; + p2 = p2.next; + } + return p1; + } +} +``` + +### 测试用例 +1. 功能测试(链表中包含/不包含环;链表中有多个或者只有一个节点); +2. 特殊输入测试(链表头节点为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/23_EntryNodeInListLoop/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/23_EntryNodeInListLoop/Solution.java" new file mode 100644 index 00000000..987c77a6 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/23_EntryNodeInListLoop/Solution.java" @@ -0,0 +1,63 @@ + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* + * public class ListNode { int val; ListNode next = null; + * + * ListNode(int val) { this.val = val; } } + */ +public class Solution { + + /** + * 求链表环的入口,若没有环,返回null + * + * @param pHead 链表头 + * @return 环的入口点 + */ + public ListNode EntryNodeOfLoop(ListNode pHead) { + if (pHead == null || pHead.next == null) { + return null; + } + ListNode fast = pHead; + ListNode slow = pHead; + boolean flag = false; + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + if (fast == slow) { + flag = true; + break; + } + } + + // 快指针与慢指针没有相遇,说明无环,返回 null + if (!flag) { + return null; + } + + ListNode cur = slow.next; + // 求出环中结点个数 + int cnt = 1; + while (cur != slow) { + cur = cur.next; + ++cnt; + } + + // 指针p1先走cnt步 + ListNode p1 = pHead; + for (int i = 0; i < cnt; ++i) { + p1 = p1.next; + } + + // p2指向链表头,然后p1/p2同时走,首次相遇的地方就是环的入口 + ListNode p2 = pHead; + while (p1 != p2) { + p1 = p1.next; + p2 = p2.next; + } + return p1; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/24_ReverseList/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/24_ReverseList/README.md" new file mode 100644 index 00000000..ab9c23fb --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/24_ReverseList/README.md" @@ -0,0 +1,94 @@ +## 反转链表 + +### 题目描述 +输入一个链表,反转链表后,输出新链表的表头。 + +### 解法 +#### 解法一 +利用头插法解决。 + +```java + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* +public class ListNode { + int val; + ListNode next = null; + + ListNode(int val) { + this.val = val; + } +}*/ +public class Solution { + /** + * 反转链表 + * @param head 链表头部 + * @return 反转后的链表 + */ + public ListNode ReverseList(ListNode head) { + if (head == null || head.next == null) { + return head; + } + + ListNode dummy = new ListNode(-1); + dummy.next = null; + ListNode p1 = head; + ListNode p2 = p1.next; + while (p1 != null) { + p1.next = dummy.next; + dummy.next = p1; + p1 = p2; + if (p1 == null) { + break; + } + p2 = p1.next; + } + + return dummy.next; + } +} +``` + +#### 解法二:递归 + +```java +/** + * @author Anonymous + * @since 2019/11/22 + */ + + +/* +public class ListNode { + int val; + ListNode next = null; + + ListNode(int val) { + this.val = val; + } +}*/ +public class Solution { + public ListNode ReverseList(ListNode head) { + if (head == null || head.next == null) { + return head; + } + + ListNode next = ReverseList(head.next); + ListNode cur = next; + while (cur.next != null) { + cur = cur.next; + } + cur.next = head; + head.next = null; + return next; + } +} +``` + +### 测试用例 +1. 功能测试(链表中有多个结点/只有一个节点); +2. 特殊输入测试(链表头节点为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/24_ReverseList/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/24_ReverseList/Solution.java" new file mode 100644 index 00000000..d38ff7cd --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/24_ReverseList/Solution.java" @@ -0,0 +1,40 @@ + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* + * public class ListNode { int val; ListNode next = null; + * + * ListNode(int val) { this.val = val; } } + */ +public class Solution { + /** + * 反转链表 + * + * @param head 链表头部 + * @return 反转后的链表 + */ + public ListNode ReverseList(ListNode head) { + if (head == null || head.next == null) { + return head; + } + + ListNode dummy = new ListNode(-1); + dummy.next = null; + ListNode p1 = head; + ListNode p2 = p1.next; + while (p1 != null) { + p1.next = dummy.next; + dummy.next = p1; + p1 = p2; + if (p1 == null) { + break; + } + p2 = p1.next; + } + + return dummy.next; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/25_MergeSortedLists/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/25_MergeSortedLists/README.md" new file mode 100644 index 00000000..7230b00b --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/25_MergeSortedLists/README.md" @@ -0,0 +1,112 @@ +## 合并两个排序的链表 + +### 题目描述 +输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 + +### 解法 +#### 解法一 +同时遍历两链表进行 `merge`。 + +```java + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* +public class ListNode { + int val; + ListNode next = null; + + ListNode(int val) { + this.val = val; + } +}*/ +public class Solution { + /** + * 合并两个排序链表 + * @param list1 链表1 + * @param list2 链表2 + * @return 合并后的单调不递减链表 + */ + public ListNode Merge(ListNode list1, ListNode list2) { + if (list1 == null) { + return list2; + } + if (list2 == null) { + return list1; + } + + ListNode dummy = new ListNode(-1); + ListNode cur = dummy; + ListNode p1 = list1; + ListNode p2 = list2; + while (p1 != null && p2 != null) { + if (p1.val < p2.val) { + ListNode t = p1.next; + cur.next = p1; + p1.next = null; + p1 = t; + } else { + ListNode t = p2.next; + cur.next = p2; + p2.next = null; + p2 = t; + } + cur = cur.next; + } + + cur.next = p1 == null ? p2 : p1; + return dummy.next; + + } +} +``` + +#### 解法二:递归 +```java + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* +public class ListNode { + int val; + ListNode next = null; + + ListNode(int val) { + this.val = val; + } +}*/ +public class Solution { + /** + * 合并两个排序链表 + * @param list1 链表1 + * @param list2 链表2 + * @return 合并后的单调不递减链表 + */ + public ListNode Merge(ListNode list1, ListNode list2) { + if (list1 == null) { + return list2; + } + if (list2 == null) { + return list1; + } + + if (list1.val < list2.val) { + list1.next = Merge(list1.next, list2); + return list1; + } + + list2.next = Merge(list1, list2.next); + return list2; + } +} +``` + +### 测试用例 +1. 功能测试(输入的两个链表有多个节点;节点的值互不相同或者存在值相等的多个节点); +2. 特殊输入测试(两个链表的一个或者两个头节点为空指针;两个链表中只有一个节点)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/25_MergeSortedLists/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/25_MergeSortedLists/Solution.java" new file mode 100644 index 00000000..e0011f64 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/25_MergeSortedLists/Solution.java" @@ -0,0 +1,51 @@ + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* + * public class ListNode { int val; ListNode next = null; + * + * ListNode(int val) { this.val = val; } } + */ +public class Solution { + /** + * 合并两个排序链表 + * + * @param list1 链表1 + * @param list2 链表2 + * @return 合并后的单调不递减链表 + */ + public ListNode Merge(ListNode list1, ListNode list2) { + if (list1 == null) { + return list2; + } + if (list2 == null) { + return list1; + } + + ListNode dummy = new ListNode(-1); + ListNode cur = dummy; + ListNode p1 = list1; + ListNode p2 = list2; + while (p1 != null && p2 != null) { + if (p1.val < p2.val) { + ListNode t = p1.next; + cur.next = p1; + p1.next = null; + p1 = t; + } else { + ListNode t = p2.next; + cur.next = p2; + p2.next = null; + p2 = t; + } + cur = cur.next; + } + + cur.next = p1 == null ? p2 : p1; + return dummy.next; + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/26_SubstructureInTree/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/26_SubstructureInTree/README.md" new file mode 100644 index 00000000..24b852e9 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/26_SubstructureInTree/README.md" @@ -0,0 +1,69 @@ +## 树的子结构 + +### 题目描述 +输入两棵二叉树`A`,`B`,判断`B`是不是`A`的子结构。(ps:我们约定空树不是任意一个树的子结构) + +### 解法 +递归方式遍历: + +- 在树A中找到和树B的根结点值一样的结点R +- 判断树A以R为根结点的子树是否包含与树B一样的结构 + +这道题的time complexity应该为O(n * m),其中n为root1的节点数,m为root2的节点数。 + +```java +/** +public class TreeNode { + int val = 0; + TreeNode left = null; + TreeNode right = null; + + public TreeNode(int val) { + this.val = val; + + } +} +*/ + +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/01/01 + * @description + */ +public class Solution { + + public boolean HasSubtree(TreeNode root1, TreeNode root2) { + + if (root1 == null || root2 == null) { + return false; + } + + return isSame(root1, root2) || + HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); + } + + private boolean isSame(TreeNode root1, TreeNode root2) { + + if (root2 == null) { + return true; + } + + // 在root2,root1遍历完成后,仍未找到符合的结构,返回false + if (root1 == null) { + return false; + } + + if (root1.val != root2.val) { + return false; + } + + return isSame(root1.left, root2.left) && isSame(root1.right, root2.right); + } + +} +``` + +### 测试用例 +1. 功能测试(树A和树B都是普通的二叉树;树B是/不是树A的子结构); +2. 特殊输入测试(两棵二叉树的一个或者两个根结点为空指针,二叉树的所有结点都没有左/右子树)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/26_SubstructureInTree/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/26_SubstructureInTree/Solution.java" new file mode 100644 index 00000000..aa2015ff --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/26_SubstructureInTree/Solution.java" @@ -0,0 +1,51 @@ + +/** +public class TreeNode { + int val = 0; + TreeNode left = null; + TreeNode right = null; + + public TreeNode(int val) { + this.val = val; + + } +} +*/ + +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/01/01 + * @description + */ +public class Solution { + + public boolean HasSubtree(TreeNode root1, TreeNode root2) { + + if (root1 == null || root2 == null) { + return false; + } + + return isSame(root1, root2) || + HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); + } + + private boolean isSame(TreeNode root1, TreeNode root2) { + + if (root2 == null) { + return true; + } + + // 在root2,root1遍历完成后,仍未找到符合的结构,返回false + if (root1 == null) { + return false; + } + + if (root1.val != root2.val) { + return false; + } + + return isSame(root1.left, root2.left) && isSame(root1.right, root2.right); + } + +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/27_MirrorOfBinaryTree/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/27_MirrorOfBinaryTree/README.md" new file mode 100644 index 00000000..d6d4e711 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/27_MirrorOfBinaryTree/README.md" @@ -0,0 +1,70 @@ +## 二叉树的镜像 + +### 题目描述 +操作给定的二叉树,将其变换为源二叉树的镜像。 + +``` +源二叉树 + 8 + / \ + 6 10 + / \ / \ + 5 7 9 11 + +镜像二叉树 + 8 + / \ + 10 6 + / \ / \ + 11 9 7 5 +``` + +### 解法 +将根结点的左右孩子互换,之后递归左右孩子。 + +```java + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* + public class TreeNode { + int val = 0; + TreeNode left = null; + TreeNode right = null; + + public TreeNode(int val) { + this.val = val; + + } + + } + */ +public class Solution { + /** + * 将二叉树转换为它的镜像 + * @param root 二叉树的根结点 + */ + public void Mirror(TreeNode root) { + if (root == null || !hasChild(root)) { + return; + } + + TreeNode t = root.left; + root.left = root.right; + root.right = t; + Mirror(root.left); + Mirror(root.right); + } + + private boolean hasChild(TreeNode root) { + return root.left != null || root.right != null; + } +} +``` + +### 测试用例 +1. 功能测试(普通的二叉树;二叉树的所有结点都没有左/右子树;只有一个结点的二叉树); +2. 特殊输入测试(二叉树的根结点为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/27_MirrorOfBinaryTree/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/27_MirrorOfBinaryTree/Solution.java" new file mode 100644 index 00000000..bf00dafa --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/27_MirrorOfBinaryTree/Solution.java" @@ -0,0 +1,38 @@ + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* + * public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = + * null; + * + * public TreeNode(int val) { this.val = val; + * + * } + * + * } + */ +public class Solution { + /** + * 将二叉树转换为它的镜像 + * + * @param root 二叉树的根结点 + */ + public void Mirror(TreeNode root) { + if (root == null || !hasChild(root)) { + return; + } + + TreeNode t = root.left; + root.left = root.right; + root.right = t; + Mirror(root.left); + Mirror(root.right); + } + + private boolean hasChild(TreeNode root) { + return root.left != null || root.right != null; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/28_SymmetricalBinaryTree/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/28_SymmetricalBinaryTree/README.md" new file mode 100644 index 00000000..75c6fdfc --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/28_SymmetricalBinaryTree/README.md" @@ -0,0 +1,58 @@ +## 对称的二叉树 + +### 题目描述 +请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 + +### 解法 +比较二叉树的前序遍历序列和对称前序遍历序列是否一样,若是,说明是对称的。 + +```java + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* +public class TreeNode { + int val = 0; + TreeNode left = null; + TreeNode right = null; + + public TreeNode(int val) { + this.val = val; + + } + +} +*/ +public class Solution { + /** + * 判断是否是对称二叉树 + * @param pRoot 二叉树的根结点 + * @return 是否为对称二叉树 + */ + boolean isSymmetrical(TreeNode pRoot) { + return isSymmetrical(pRoot, pRoot); + } + + private boolean isSymmetrical(TreeNode pRoot1, TreeNode pRoot2) { + if (pRoot1 == null && pRoot2 == null) { + return true; + } + if (pRoot1 == null || pRoot2 == null) { + return false; + } + if (pRoot1.val != pRoot2.val) { + return false; + } + + return isSymmetrical(pRoot1.left, pRoot2.right) && isSymmetrical(pRoot1.right, pRoot2.left); + + } +} +``` + +### 测试用例 +1. 功能测试(对称的二叉树;因结构而不对称的二叉树;结构对称但节点的值不对称的二叉树); +2. 特殊输入测试(二叉树的根结点为空指针;只有一个节点的二叉树;所有节点的值都相同的二叉树)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/28_SymmetricalBinaryTree/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/28_SymmetricalBinaryTree/Solution.java" new file mode 100644 index 00000000..5cdf4abb --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/28_SymmetricalBinaryTree/Solution.java" @@ -0,0 +1,42 @@ + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +/* + * public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = + * null; + * + * public TreeNode(int val) { this.val = val; + * + * } + * + * } + */ +public class Solution { + /** + * 判断是否是对称二叉树 + * + * @param pRoot 二叉树的根结点 + * @return 是否为对称二叉树 + */ + boolean isSymmetrical(TreeNode pRoot) { + return isSymmetrical(pRoot, pRoot); + } + + private boolean isSymmetrical(TreeNode pRoot1, TreeNode pRoot2) { + if (pRoot1 == null && pRoot2 == null) { + return true; + } + if (pRoot1 == null || pRoot2 == null) { + return false; + } + if (pRoot1.val != pRoot2.val) { + return false; + } + + return isSymmetrical(pRoot1.left, pRoot2.right) && isSymmetrical(pRoot1.right, pRoot2.left); + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/29_PrintMatrix/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/29_PrintMatrix/README.md" new file mode 100644 index 00000000..e47e18c8 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/29_PrintMatrix/README.md" @@ -0,0 +1,103 @@ +## 顺时针打印矩阵 + +### 题目描述 +输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下 `4 X 4` 矩阵: +``` +1 2 3 4 +5 6 7 8 +9 10 11 12 +13 14 15 16 +``` + +则依次打印出数字: +``` +1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. +``` +### 解法 +剑指offer上的思路有点复杂,需要考虑坐标变换太多,考虑用另一种思路来解决。 + +在矩阵中,使用左上角坐标(tR,tC)和右下角的坐标(dR,dC)就可以表示一个矩阵。比如题目中的矩阵,当(tR,tC) = (0,0)和(dR,dC) = (3,3)时,表示的子矩阵就是整个矩阵: + +```java +1 2 3 4 +5 8 +9 12 +13 14 15 16 +``` + +当外层循环遍历后,可以令tR和tC加1,dR和dC减1,执行内层循环。当左上角的坐标跑到右下角坐标的右方或者下方,则整个过程就终止。 + +```java +/** + * @author mcrwayfun + * @version 1.0 + * @description + * @date Created in 2019/1/2 + */ +public class Solution { + /** + * 转圈打印矩阵 + * @param matrix 矩阵 + * @return 存放结果的list + */ + public ArrayList printMatrix(int[][] matrix) { + ArrayList reList = new ArrayList<>(); + if (matrix == null) { + return reList; + } + + int tR = 0; + int tC = 0; + int dR = matrix.length - 1; + int dC = matrix[0].length - 1; + + while (tR <= dR && tC <= dC) { + printMatrix(matrix, tR++, tC++, dR--, dC--, reList); + } + + return reList; + } + + public void printMatrix(int[][] matrix, int tR, int tC, int dR, int dC, ArrayList reList) { + // 只有一行 + if (tR == dR) { + for (int i = tC; i <= dC; i++) { + reList.add(matrix[tR][i]); + } + } + // 只有一列 + else if (tC == dC) { + for (int i = tR; i <= dR; i++) { + reList.add(matrix[i][tC]); + } + } else { + int curR = tR; + int curC = tC; + // 从左到右 + while (curC != dC) { + reList.add(matrix[tR][curC]); + curC++; + } + // 从上到下 + while (curR != dR) { + reList.add(matrix[curR][dC]); + curR++; + } + // 从右到左 + while (curC != tC) { + reList.add(matrix[dR][curC]); + curC--; + } + // 从下到上 + while (curR != tR) { + reList.add(matrix[curR][tC]); + curR--; + } + } + + } +} +``` + +### 测试用例 +1. 数组中有多行多列;数组中只有一行;数组中只有一列;数组中只有一行一列。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/29_PrintMatrix/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/29_PrintMatrix/Solution.java" new file mode 100644 index 00000000..07d58d49 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/29_PrintMatrix/Solution.java" @@ -0,0 +1,69 @@ +/** + * @author mcrwayfun + * @version 1.0 + * @description + * @date Created in 2019/1/2 + */ +public class Solution { + /** + * 转圈打印矩阵 + * @param matrix 矩阵 + * @return 存放结果的list + */ + public ArrayList printMatrix(int[][] matrix) { + ArrayList reList = new ArrayList<>(); + if (matrix == null) { + return reList; + } + + int tR = 0; + int tC = 0; + int dR = matrix.length - 1; + int dC = matrix[0].length - 1; + + while (tR <= dR && tC <= dC) { + printMatrix(matrix, tR++, tC++, dR--, dC--, reList); + } + + return reList; + } + + public void printMatrix(int[][] matrix, int tR, int tC, int dR, int dC, ArrayList reList) { + // 只有一行 + if (tR == dR) { + for (int i = tC; i <= dC; i++) { + reList.add(matrix[tR][i]); + } + } + // 只有一列 + else if (tC == dC) { + for (int i = tR; i <= dR; i++) { + reList.add(matrix[i][tC]); + } + } else { + int curR = tR; + int curC = tC; + // 从左到右 + while (curC != dC) { + reList.add(matrix[tR][curC]); + curC++; + } + // 从上到下 + while (curR != dR) { + reList.add(matrix[curR][dC]); + curR++; + } + // 从右到左 + while (curC != tC) { + reList.add(matrix[dR][curC]); + curC--; + } + // 从下到上 + while (curR != tR) { + reList.add(matrix[curR][tC]); + curR--; + } + } + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/30_MinInStack/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/30_MinInStack/README.md" new file mode 100644 index 00000000..370f2793 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/30_MinInStack/README.md" @@ -0,0 +1,63 @@ +### 包含min函数的栈 + +### 题目描述 +定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为`O(1)`)。 + +### 解法 +定义两个`stack`。 + +压栈时,先将元素`node`压入`stack1`。然后判断`stack2`的情况: +- `stack2`栈为空或者栈顶元素大于`node`,则将`node`压入`stack2`中。 +- `stack2`栈不为空且栈定元素小于`node`,则重复压入栈顶元素。 + +获取最小元素时,从`stack2`中获取栈顶元素即可。 + +```java +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/11/22 + */ + + +public class Solution { + + private Stack stack1 = new Stack<>(); + private Stack stack2 = new Stack<>(); + + /** + * 压栈 + * @param node 待压入的元素 + */ + public void push(int node) { + stack1.push(node); + if (stack2.isEmpty() || stack2.peek() >= node) { + stack2.push(node); + } else { + stack2.push(stack2.peek()); + } + } + + public void pop() { + stack1.pop(); + stack2.pop(); + } + + public int top() { + return stack2.peek(); + } + + /** + * O(1)获取栈中最小值 + * @return 最小值 + */ + public int min() { + return stack2.peek(); + } +} +``` + +### 测试用例 +1. 新压入栈的数字比之前的最小值大/小。 +2. 弹出栈的数字是/不是最小元素。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/30_MinInStack/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/30_MinInStack/Solution.java" new file mode 100644 index 00000000..95f519f2 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/30_MinInStack/Solution.java" @@ -0,0 +1,44 @@ +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/11/22 + */ + +public class Solution { + + private Stack stack1 = new Stack<>(); + private Stack stack2 = new Stack<>(); + + /** + * 压栈 + * + * @param node 待压入的元素 + */ + public void push(int node) { + stack1.push(node); + if (stack2.isEmpty() || stack2.peek() >= node) { + stack2.push(node); + } else { + stack2.push(stack2.peek()); + } + } + + public void pop() { + stack1.pop(); + stack2.pop(); + } + + public int top() { + return stack2.peek(); + } + + /** + * O(1)获取栈中最小值 + * + * @return 最小值 + */ + public int min() { + return stack2.peek(); + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/31_StackPushPopOrder/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/31_StackPushPopOrder/README.md" new file mode 100644 index 00000000..9b41b0ef --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/31_StackPushPopOrder/README.md" @@ -0,0 +1,58 @@ +## 栈的压入、弹出序列 + +### 题目描述 +输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列`1,2,3,4,5`是某栈的压入顺序,序列`4,5,3,2,1`是该压栈序列对应的一个弹出序列,但`4,3,5,1,2`就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) + +### 解法 +判断下一个要弹出的元素: +- 如果刚好是栈顶元素,直接弹出。 +- 如果不在栈顶,则把压栈序列中还没有入栈的数字压入栈,直到待弹出的数字压入栈顶。 +- 如果所有数字都压入栈顶后依然没有后找到下一个弹出的数字,则不可能是弹出序列。 + +```java +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/11/22 + */ + + +public class Solution { + /** + * 判断是否是弹出序列 + * @param pushA 压栈序列 + * @param popA 弹栈序列 + * @return 是否是弹出序列 + */ + public boolean IsPopOrder(int[] pushA,int[] popA) { + if (pushA == null || popA == null || pushA.length != popA.length) { + return false; + } + + Stack stack = new Stack<>(); + int i = 0; + int n = pushA.length; + boolean flag = false; + for (int val : popA) { + while (stack.isEmpty() || stack.peek() != val) { + if (i >= n) { + flag = true; + break; + } + stack.push(pushA[i++]); + } + if (flag) { + break; + } + stack.pop(); + } + + return stack.isEmpty(); + } +} +``` + +### 测试用例 +1. 功能测试(输入的两个数组含有多个数字或者只有一个数字:第二个数组是/不是第一个数组表示的压入序列对应的栈的弹出序列); +2. 特殊输入测试(输入两个空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/31_StackPushPopOrder/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/31_StackPushPopOrder/Solution.java" new file mode 100644 index 00000000..d9d5acad --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/31_StackPushPopOrder/Solution.java" @@ -0,0 +1,42 @@ +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/11/22 + */ + + +public class Solution { + /** + * 判断是否是弹出序列 + * + * @param pushA 压栈序列 + * @param popA 弹栈序列 + * @return 是否是弹出序列 + */ + public boolean IsPopOrder(int[] pushA,int[] popA) { + if (pushA == null || popA == null || pushA.length != popA.length) { + return false; + } + + Stack stack = new Stack<>(); + int i = 0; + int n = pushA.length; + boolean flag = false; + for (int val : popA) { + while (stack.isEmpty() || stack.peek() != val) { + if (i >= n) { + flag = true; + break; + } + stack.push(pushA[i++]); + } + if (flag) { + break; + } + stack.pop(); + } + + return stack.isEmpty(); + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_01_PrintTreeFromTopToBottom/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_01_PrintTreeFromTopToBottom/README.md" new file mode 100644 index 00000000..3bc49166 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_01_PrintTreeFromTopToBottom/README.md" @@ -0,0 +1,64 @@ +## 不分行从上到下打印二叉树 + +### 题目描述 +从上往下打印出二叉树的每个节点,同层节点从左至右打印。 + +### 解法 +先将根节点进入队列。 + +队头元素出队,将值存入 list,判断该元素是否有左/右子树,有的话依次进入队列中。队列为空时结束。 + +```java +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.Queue; + +/** + * @author Anonymous + * @since 2019/11/23 + */ + +/** + public class TreeNode { + int val = 0; + TreeNode left = null; + TreeNode right = null; + + public TreeNode(int val) { + this.val = val; + + } + + } + */ +public class Solution { + /** + * 从上到下打印二叉树 + * @param root 二叉树根节点 + * @return 结果list + */ + public ArrayList PrintFromTopToBottom(TreeNode root) { + ArrayList list = new ArrayList<>(); + if (root == null) { + return list; + } + Queue queue = new LinkedList<>(); + queue.offer(root); + while (!queue.isEmpty()) { + TreeNode node = queue.poll(); + if (node.left != null) { + queue.offer(node.left); + } + if (node.right != null) { + queue.offer(node.right); + } + list.add(node.val); + } + return list; + } +} +``` + +### 测试用例 +1. 功能测试(完全二叉树;所有节点只有左/右子树); +2. 特殊输入测试(二叉树根节点为空指针;只有一个节点的二叉树)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_01_PrintTreeFromTopToBottom/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_01_PrintTreeFromTopToBottom/Solution.java" new file mode 100644 index 00000000..b9247209 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_01_PrintTreeFromTopToBottom/Solution.java" @@ -0,0 +1,46 @@ +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.Queue; + +/** + * @author Anonymous + * @since 2019/11/23 + */ + +/** + * public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = + * null; + * + * public TreeNode(int val) { this.val = val; + * + * } + * + * } + */ +public class Solution { + /** + * 从上到下打印二叉树 + * + * @param root 二叉树根节点 + * @return 结果list + */ + public ArrayList PrintFromTopToBottom(TreeNode root) { + ArrayList list = new ArrayList<>(); + if (root == null) { + return list; + } + Queue queue = new LinkedList<>(); + queue.offer(root); + while (!queue.isEmpty()) { + TreeNode node = queue.poll(); + if (node.left != null) { + queue.offer(node.left); + } + if (node.right != null) { + queue.offer(node.right); + } + list.add(node.val); + } + return list; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_02_PrintTreesInLines/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_02_PrintTreesInLines/README.md" new file mode 100644 index 00000000..1b61817c --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_02_PrintTreesInLines/README.md" @@ -0,0 +1,73 @@ +## 把二叉树打印成多行 + +### 题目描述 +从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 + +### 解法 +与上一题类似,只不过需要用变量记录每一层要打印多少个节点。 + +```java +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.Queue; + +/** + * @author Anonymous + * @since 2019/11/23 + */ + +/* +public class TreeNode { + int val = 0; + TreeNode left = null; + TreeNode right = null; + + public TreeNode(int val) { + this.val = val; + + } + +} +*/ +public class Solution { + /** + * 把二叉树打印成多行 + * @param pRoot 二叉树根节点 + * @return 结果list + */ + ArrayList > Print(TreeNode pRoot) { + ArrayList> list = new ArrayList<>(); + if (pRoot == null) { + return list; + } + + Queue queue = new LinkedList<>(); + queue.offer(pRoot); + int cnt = 1; + while (cnt > 0) { + int num = cnt; + cnt = 0; + ArrayList res = new ArrayList<>(); + for (int i = 0; i < num; ++i) { + TreeNode node = queue.poll(); + if (node.left != null) { + queue.offer(node.left); + ++cnt; + } + if (node.right != null) { + queue.offer(node.right); + ++cnt; + } + res.add(node.val); + } + list.add(res); + } + return list; + } + +} +``` + +### 测试用例 +1. 功能测试(完全二叉树;所有节点只有左/右子树); +2. 特殊输入测试(二叉树根节点为空指针;只有一个节点的二叉树)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_02_PrintTreesInLines/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_02_PrintTreesInLines/Solution.java" new file mode 100644 index 00000000..fc4b4699 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_02_PrintTreesInLines/Solution.java" @@ -0,0 +1,57 @@ +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.Queue; + +/** + * @author Anonymous + * @since 2019/11/23 + */ + +/* + * public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = + * null; + * + * public TreeNode(int val) { this.val = val; + * + * } + * + * } + */ +public class Solution { + /** + * 把二叉树打印成多行 + * + * @param pRoot 二叉树根节点 + * @return 结果list + */ + ArrayList> Print(TreeNode pRoot) { + ArrayList> list = new ArrayList<>(); + if (pRoot == null) { + return list; + } + + Queue queue = new LinkedList<>(); + queue.offer(pRoot); + int cnt = 1; + while (cnt > 0) { + int num = cnt; + cnt = 0; + ArrayList res = new ArrayList<>(); + for (int i = 0; i < num; ++i) { + TreeNode node = queue.poll(); + if (node.left != null) { + queue.offer(node.left); + ++cnt; + } + if (node.right != null) { + queue.offer(node.right); + ++cnt; + } + res.add(node.val); + } + list.add(res); + } + return list; + } + +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_03_PrintTreesInZigzag/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_03_PrintTreesInZigzag/README.md" new file mode 100644 index 00000000..5f7abd40 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_03_PrintTreesInZigzag/README.md" @@ -0,0 +1,104 @@ +## 按之字形打印二叉树 + +### 题目描述 +请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 + +如二叉树: +``` + 1 + / \ + 2 3 + / \ / \ + 4 5 6 7 +``` + +打印结果为: +``` +1 +3 2 +4 5 6 7 +``` + +### 解法 +对于上述二叉树: + +首先访问根结点,之后把2、3存入某结构。打印的时候,先打印3、2。这不就是栈? + +依次弹出栈元素,分别是3、2。弹出时需要把3、2的子结点存入结构。由于访问时顺序是`4 5 6 7`。所以也需要用栈来存放。而且,此时需要先存放右孩子,再存放左孩子。(奇数层/偶数层存放左右孩子的顺序不同) + +这里需要用两个栈来实现。如果只用一个栈,那么当弹出3、2 时,先将 3 的孩子节点压入栈。之后弹栈的时候不是先弹出 2,而是弹出了 3 的 孩子节点,就错了。 + + +```java +import java.util.ArrayList; +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/11/23 + */ + +/* +public class TreeNode { + int val = 0; + TreeNode left = null; + TreeNode right = null; + + public TreeNode(int val) { + this.val = val; + + } + +} +*/ +public class Solution { + /** + * 按之字形打印二叉树 + * @param pRoot 二叉树的根节点 + * @return 结果list + */ + public ArrayList> Print(TreeNode pRoot) { + ArrayList> res = new ArrayList<>(); + if (pRoot == null) { + return res; + } + Stack stack1 = new Stack<>(); + Stack stack2 = new Stack<>(); + stack1.push(pRoot); + int i = 1; + Stack stack = stack1; + while (!stack.isEmpty()) { + ArrayList list = new ArrayList<>(); + while (!stack.isEmpty()) { + TreeNode node = stack.pop(); + list.add(node.val); + if (i % 2 == 1) { + if (node.left != null) { + stack2.push(node.left); + } + if (node.right != null) { + stack2.push(node.right); + } + } else { + if (node.right != null) { + stack1.push(node.right); + } + if (node.left != null) { + stack1.push(node.left); + } + } + } + res.add(list); + ++i; + stack = stack1.isEmpty() ? stack2 : stack1; + } + + return res; + } + +} +``` + +### 测试用例 +1. 功能测试(完全二叉树;所有节点只有左/右子树); +2. 特殊输入测试(二叉树根节点为空指针;只有一个节点的二叉树)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_03_PrintTreesInZigzag/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_03_PrintTreesInZigzag/Solution.java" new file mode 100644 index 00000000..8e096624 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/32_03_PrintTreesInZigzag/Solution.java" @@ -0,0 +1,65 @@ +import java.util.ArrayList; +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/11/23 + */ + +/* + * public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = + * null; + * + * public TreeNode(int val) { this.val = val; + * + * } + * + * } + */ +public class Solution { + /** + * 按之字形打印二叉树 + * + * @param pRoot 二叉树的根节点 + * @return 结果list + */ + public ArrayList> Print(TreeNode pRoot) { + ArrayList> res = new ArrayList<>(); + if (pRoot == null) { + return res; + } + Stack stack1 = new Stack<>(); + Stack stack2 = new Stack<>(); + stack1.push(pRoot); + int i = 1; + Stack stack = stack1; + while (!stack.isEmpty()) { + ArrayList list = new ArrayList<>(); + while (!stack.isEmpty()) { + TreeNode node = stack.pop(); + list.add(node.val); + if (i % 2 == 1) { + if (node.left != null) { + stack2.push(node.left); + } + if (node.right != null) { + stack2.push(node.right); + } + } else { + if (node.right != null) { + stack1.push(node.right); + } + if (node.left != null) { + stack1.push(node.left); + } + } + } + res.add(list); + ++i; + stack = stack1.isEmpty() ? stack2 : stack1; + } + + return res; + } + +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/33_SquenceOfBST/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/33_SquenceOfBST/README.md" new file mode 100644 index 00000000..9b7ef5b9 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/33_SquenceOfBST/README.md" @@ -0,0 +1,60 @@ +## 二叉搜索树的后序遍历序列 + +### 题目描述 +输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出`Yes`,否则输出`No`。假设输入的数组的任意两个数字都互不相同。 + +### 解法 +序列的最后一个元素是二叉搜索树的根节点。 + +在序列中从左到右找到根节点的左子树(比根节点小)、右子树(比根节点大)。 +- 如果右子树中出现比根节点小的元素,那么为 false。 +- 否则递归左右子树。 + + +```java +/** + * @author Anonymous + * @since 2019/11/23 + */ + +public class Solution { + /** + * 判断数组是否是某个二叉搜索树的后序遍历序列 + * + * @param sequence 数组 + * @return 是否属于某二叉搜索树的后序遍历序列 + */ + public boolean VerifySquenceOfBST(int[] sequence) { + if (sequence == null || sequence.length < 1) { + return false; + } + return verify(sequence, 0, sequence.length - 1); + } + + private boolean verify(int[] sequence, int start, int end) { + if (start >= end) { + return true; + } + int val = sequence[end]; + int i = start; + for (; i <= end; ++i) { + if (sequence[i] >= val) { + break; + } + } + + for (int j = i; j < end; ++j) { + if (sequence[j] < val) { + return false; + } + } + + return verify(sequence, start, i - 1) && verify(sequence, i, end - 1); + + } +} +``` + +### 测试用例 +1. 功能测试(输入的后序遍历序列对应一棵二叉树,包括完全二叉树、所有节点都没有左/右子树的二叉树、只有一个节点的二叉树;输入的后续遍历序列没有对应一棵二叉树); +2. 特殊输入测试(后序遍历序列为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/33_SquenceOfBST/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/33_SquenceOfBST/Solution.java" new file mode 100644 index 00000000..37539208 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/33_SquenceOfBST/Solution.java" @@ -0,0 +1,41 @@ +/** + * @author Anonymous + * @since 2019/11/23 + */ + +public class Solution { + /** + * 判断数组是否是某个二叉搜索树的后序遍历序列 + * + * @param sequence 数组 + * @return 是否属于某二叉搜索树的后序遍历序列 + */ + public boolean VerifySquenceOfBST(int[] sequence) { + if (sequence == null || sequence.length < 1) { + return false; + } + return verify(sequence, 0, sequence.length - 1); + } + + private boolean verify(int[] sequence, int start, int end) { + if (start >= end) { + return true; + } + int val = sequence[end]; + int i = start; + for (; i <= end; ++i) { + if (sequence[i] >= val) { + break; + } + } + + for (int j = i; j < end; ++j) { + if (sequence[j] < val) { + return false; + } + } + + return verify(sequence, start, i - 1) && verify(sequence, i, end - 1); + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/34_PathInTree/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/34_PathInTree/README.md" new file mode 100644 index 00000000..164503a7 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/34_PathInTree/README.md" @@ -0,0 +1,64 @@ +## 二叉树中和为某一值的路径 + +### 题目描述 +输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的`list`中,数组长度大的数组靠前) + +### 解法 + +```java +import java.util.ArrayList; + +/** + * @author Anonymous + * @since 2019/11/23 + */ + +/** + public class TreeNode { + int val = 0; + TreeNode left = null; + TreeNode right = null; + + public TreeNode(int val) { + this.val = val; + + } + + } + */ +public class Solution { + + private ArrayList> res = new ArrayList<>(); + + /** + * 找出二叉树中和为某一值的路径(必须从根节点到叶节点) + * + * @param root 二叉树的根结点 + * @param target 目标值 + * @return 结果list + */ + public ArrayList> FindPath(TreeNode root, int target) { + findPath(root, target, new ArrayList<>()); + return res; + } + + private void findPath(TreeNode root, int target, ArrayList list) { + if (root == null) { + return; + } + list.add(root.val); + target -= root.val; + if (target == 0 && root.left == null && root.right == null) { + res.add(new ArrayList<>(list)); + } else { + findPath(root.left, target, list); + findPath(root.right, target, list); + } + list.remove(list.size() - 1); + } +} +``` + +### 测试用例 +1. 功能测试(二叉树中有一条、多条符合要求的路径;二叉树中没有符合要求的路径); +2. 特殊输入测试(指向二叉树根节点的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/34_PathInTree/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/34_PathInTree/Solution.java" new file mode 100644 index 00000000..21bff00b --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/34_PathInTree/Solution.java" @@ -0,0 +1,48 @@ +import java.util.ArrayList; + +/** + * @author Anonymous + * @since 2019/11/23 + */ + +/** + * public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = + * null; + * + * public TreeNode(int val) { this.val = val; + * + * } + * + * } + */ +public class Solution { + + private ArrayList> res = new ArrayList<>(); + + /** + * 找出二叉树中和为某一值的路径(必须从根节点到叶节点) + * + * @param root 二叉树的根结点 + * @param target 目标值 + * @return 结果list + */ + public ArrayList> FindPath(TreeNode root, int target) { + findPath(root, target, new ArrayList<>()); + return res; + } + + private void findPath(TreeNode root, int target, ArrayList list) { + if (root == null) { + return; + } + list.add(root.val); + target -= root.val; + if (target == 0 && root.left == null && root.right == null) { + res.add(new ArrayList<>(list)); + } else { + findPath(root.left, target, list); + findPath(root.right, target, list); + } + list.remove(list.size() - 1); + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/35_CopyComplexList/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/35_CopyComplexList/README.md" new file mode 100644 index 00000000..d301d169 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/35_CopyComplexList/README.md" @@ -0,0 +1,73 @@ +## 复杂链表的复制 + +### 题目描述 +输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 `head`。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) + +### 解法 +可以分为3步: + +1. 复制每个节点,并插入到被复制节点的后面。比如1->2->3 clone 1->1->2->2->3->3 +2. 复制随机节点。当遍历到的当前节点存在随机节点时,则其复制节点也应该存在随机节点。比如当前节点`cur.random != null`,则`RandomListNode clone = cur.next;clone.random = cur.random.next;` +3. 分离两个链表。其中奇数链表为原链表,偶数链表为复制的链表 + +这道题的time complexity为O(n)。 + +```java +/** + * @author Anonymous + * @since 2019/11/24 + */ + +/* +public class RandomListNode { + int label; + RandomListNode next = null; + RandomListNode random = null; + + RandomListNode(int label) { + this.label = label; + } +} +*/ +public class Solution { + /** + * 复杂链表的复制 + * @param pHead 链表头结点 + * @return 复制的链表 + */ + public RandomListNode Clone(RandomListNode pHead) { + if (pHead == null) { + return null; + } + RandomListNode cur = pHead; + while (cur != null) { + RandomListNode node = new RandomListNode(cur.label); + node.next = cur.next; + cur.next = node; + cur = node.next; + } + + cur = pHead; + while (cur != null) { + RandomListNode clone = cur.next; + if (cur.random != null) { + clone.random = cur.random.next; + } + cur = clone.next; + } + + cur = pHead; + RandomListNode cloneHead = pHead.next; + while (cur.next != null) { + RandomListNode clone = cur.next; + cur.next = clone.next; + cur = clone; + } + return cloneHead; + } +} +``` + +### 测试用例 +1. 功能测试(结点中的 random 指针指向结点自身;两个结点的 random 形成环状结构;链表中只有一个结点); +2. 特殊输入测试(指向链表头结点的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/35_CopyComplexList/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/35_CopyComplexList/Solution.java" new file mode 100644 index 00000000..c158faf2 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/35_CopyComplexList/Solution.java" @@ -0,0 +1,54 @@ +/** + * @author Anonymous + * @since 2019/11/24 + */ + +/* +public class RandomListNode { + int label; + RandomListNode next = null; + RandomListNode random = null; + + RandomListNode(int label) { + this.label = label; + } +} +*/ +public class Solution { + /** + * 复杂链表的复制 + * + * @param pHead 链表头结点 + * @return 复制的链表 + */ + public RandomListNode Clone(RandomListNode pHead) { + if (pHead == null) { + return null; + } + RandomListNode cur = pHead; + while (cur != null) { + RandomListNode node = new RandomListNode(cur.label); + node.next = cur.next; + cur.next = node; + cur = node.next; + } + + cur = pHead; + while (cur != null) { + RandomListNode clone = cur.next; + if (cur.random != null) { + clone.random = cur.random.next; + } + cur = clone.next; + } + + cur = pHead; + RandomListNode cloneHead = pHead.next; + while (cur.next != null) { + RandomListNode clone = cur.next; + cur.next = clone.next; + cur = clone; + } + return cloneHead; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/36_ConvertBinarySearchTree/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/36_ConvertBinarySearchTree/README.md" new file mode 100644 index 00000000..cf5450f1 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/36_ConvertBinarySearchTree/README.md" @@ -0,0 +1,76 @@ +## 二叉搜索树与双向链表 + +### 题目描述 +输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 + +### 解法 +由于是二叉搜索树,因此中序遍历的结果就是排序的。 + +中序遍历利用栈来实现。遍历时,前一个结点的 right 指向后一个结点,后一个结点的 left 指向前一个结点。 +```java +pre.right = cur +cur.left = pre +``` + +```java +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/11/24 + */ + +/** + public class TreeNode { + int val = 0; + TreeNode left = null; + TreeNode right = null; + + public TreeNode(int val) { + this.val = val; + + } + + } + */ +public class Solution { + /** + * 将二叉搜索树转换为双向链表 + * + * @param pRootOfTree + * @return + */ + public TreeNode Convert(TreeNode pRootOfTree) { + if (pRootOfTree == null) { + return null; + } + Stack stack = new Stack<>(); + TreeNode cur = pRootOfTree; + TreeNode res = null; + TreeNode pre = null; + while (cur != null || !stack.isEmpty()) { + if (cur != null) { + stack.push(cur); + cur = cur.left; + } else { + cur = stack.pop(); + if (pre == null) { + pre = cur; + res = pre; + } else { + pre.right = cur; + cur.left = pre; + pre = cur; + } + cur = cur.right; + + } + } + return res; + } +} +``` + +### 测试用例 +1. 功能测试(输入的二叉树是完全二叉树;所有结点都没有左/右子树;只有一个结点的二叉树); +2. 特殊输入测试(指向二叉树根结点的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/36_ConvertBinarySearchTree/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/36_ConvertBinarySearchTree/Solution.java" new file mode 100644 index 00000000..7ff6c1ce --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/36_ConvertBinarySearchTree/Solution.java" @@ -0,0 +1,56 @@ +import java.util.Stack; + +/** + * @author Anonymous + * @since 2019/11/24 + */ + +/** + public class TreeNode { + int val = 0; + TreeNode left = null; + TreeNode right = null; + + public TreeNode(int val) { + this.val = val; + + } + + } + */ +public class Solution { + /** + * 将二叉搜索树转换为双向链表 + * + * @param pRootOfTree + * @return + */ + public TreeNode Convert(TreeNode pRootOfTree) { + if (pRootOfTree == null) { + return null; + } + Stack stack = new Stack<>(); + TreeNode cur = pRootOfTree; + TreeNode res = null; + TreeNode pre = null; + while (cur != null || !stack.isEmpty()) { + if (cur != null) { + stack.push(cur); + cur = cur.left; + } else { + cur = stack.pop(); + if (pre == null) { + pre = cur; + res = pre; + } else { + pre.right = cur; + cur.left = pre; + pre = cur; + } + cur = cur.right; + + } + } + return res; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/37_SerializeBinaryTrees/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/37_SerializeBinaryTrees/README.md" new file mode 100644 index 00000000..e9795c2f --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/37_SerializeBinaryTrees/README.md" @@ -0,0 +1,89 @@ +## 序列化二叉树 + +### 题目描述 +请实现两个函数,分别用来序列化和反序列化二叉树。使用前序遍历实现,空节点使用字符`#` 表示。 + +比如有如下二叉树: + +```java + 1 + 2 3 + 4 # 5 6 + # # # # # # +``` + +序列化的结果为 `1,2,4,#,#,#,3,5,#,#,6,#,#` + +反序列化的结果为上述二叉树 + +### 解法 +使用前序遍历进行序列化和反序列化。对格式没有要求,只要序列化得到的结果,再反序列化后能与原树相同即可。 +```java +/** + * @author mcrwayfun + * @version 1.0 + * @description + * @date Created in 2019/1/12 + */ +public class Solution { + + + public String Serialize(TreeNode root) { + + StringBuilder res = new StringBuilder(); + if (root == null) { + return res.toString(); + } + + serializeHelper(root, res); + // 移除最后一个的符号"," + res.deleteCharAt(res.lastIndexOf(",")); + return res.toString(); + } + + private void serializeHelper(TreeNode root, StringBuilder res) { + + if (root == null) { + res.append("#"); + res.append(","); + return; + } + + res.append(root.val); + res.append(","); + serializeHelper(root.left, res); + serializeHelper(root.right, res); + } + + private int index = -1; + + public TreeNode Deserialize(String str) { + + if (str == null || str.length() == 0) { + return null; + } + + String[] treeNodeStr = str.split(","); + return deserializeHelper(treeNodeStr); + } + + private TreeNode deserializeHelper(String[] treeNodeStr) { + + index++; + TreeNode node = null; + + // index不越界并且当前节点不为# + if (index < treeNodeStr.length && !"#".equals(treeNodeStr[index])) { + node = new TreeNode(Integer.valueOf(treeNodeStr[index])); + node.left = deserializeHelper(treeNodeStr); + node.right = deserializeHelper(treeNodeStr); + } + + return node; + } +} +``` + +### 测试用例 +1. 功能测试(输入的二叉树是完全二叉树;所有节点都没有左/右子树的二叉树;只有一个节点的二叉树;所有节点的值都相同的二叉树); +2. 特殊输入测试(指向二叉树根结点的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/37_SerializeBinaryTrees/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/37_SerializeBinaryTrees/Solution.java" new file mode 100644 index 00000000..b0a0f1db --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/37_SerializeBinaryTrees/Solution.java" @@ -0,0 +1,64 @@ + +/** + * @author mcrwayfun + * @version 1.0 + * @description + * @date Created in 2019/1/12 + */ +public class Solution { + + + public String Serialize(TreeNode root) { + + StringBuilder res = new StringBuilder(); + if (root == null) { + return res.toString(); + } + + serializeHelper(root, res); + // 移除最后一个的符号"," + res.deleteCharAt(res.lastIndexOf(",")); + return res.toString(); + } + + private void serializeHelper(TreeNode root, StringBuilder res) { + + if (root == null) { + res.append("#"); + res.append(","); + return; + } + + res.append(root.val); + res.append(","); + serializeHelper(root.left, res); + serializeHelper(root.right, res); + } + + private int index = -1; + + public TreeNode Deserialize(String str) { + + if (str == null || str.length() == 0) { + return null; + } + + String[] treeNodeStr = str.split(","); + return deserializeHelper(treeNodeStr); + } + + private TreeNode deserializeHelper(String[] treeNodeStr) { + + index++; + TreeNode node = null; + + // index不越界并且当前节点不为# + if (index < treeNodeStr.length && !"#".equals(treeNodeStr[index])) { + node = new TreeNode(Integer.valueOf(treeNodeStr[index])); + node.left = deserializeHelper(treeNodeStr); + node.right = deserializeHelper(treeNodeStr); + } + + return node; + } +} diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/38_StringPermutation/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/38_StringPermutation/README.md" new file mode 100644 index 00000000..b603cb51 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/38_StringPermutation/README.md" @@ -0,0 +1,74 @@ +## 字符串的排列 + +### 题目描述 +输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。(输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母)。ps:牛客上的测试用例对返回的list要排序。 + +### 解法 +对整个字符串的排列可以看成两部分。第一步求所有可能出现在第一个位置的字符,即把第一个字符与后面所有非重复的字符进行交换。第二步固定第一个字符,求后面所有字符的排列;第二步中后面的所有字符又可以看成一个完整的字符,继续执行这两个步骤。 + +注意存在重复值得情况,比如输入字符串bab,将首字符b作为固定字符串,对于将第2个下标的b换到首位仍然是bab,所有这种情况无需输出。 + +**这道题的时间复杂度应该为O(n!)** + +```java +/** + * @author mcrwayfun + * @version 1.0 + * @description + * @date Created in 2019/1/14 + */ +public class Solution { + + public ArrayList Permutation(String str) { + + ArrayList reList = new ArrayList<>(); + + if (str == null || str.length() == 0) { + return reList; + } + + char[] chars = str.toCharArray(); + + // 递归输出字符串排列 + permutationHelper(chars, 0, reList); + Collections.sort(reList); + return reList; + } + + private void permutationHelper(char[] chars, int index, ArrayList list) { + + if (index == chars.length - 1) { + list.add(new String(chars)); + return; + } + + Set set = new HashSet<>(); + // 确定交换的字符,包括自己[index,length-1] + for (int i = index; i < chars.length; i++) { + + // 排除出现重复字符 + // hash表,查询花费O(1) + if (!set.contains(chars[i])) { + set.add(chars[i]); + // 固定字符index + swap(chars, i, index); + // 递归固定剩余字符[index+1,length-1] + permutationHelper(chars, index + 1, list); + // 恢复原数组 + swap(chars, index, i); + } + } + } + + private void swap(char[] chars, int x, int y) { + + char temp = chars[x]; + chars[x] = chars[y]; + chars[y] = temp; + } +} +``` + +### 测试用例 +1. 功能测试(输入的字符串有一个或多个字符); +2. 特殊输入测试(输入的字符串为nullptr指针或者内容为空)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/38_StringPermutation/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/38_StringPermutation/Solution.java" new file mode 100644 index 00000000..e28cf054 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/38_StringPermutation/Solution.java" @@ -0,0 +1,56 @@ +/** + * @author mcrwayfun + * @version 1.0 + * @description + * @date Created in 2019/1/14 + */ +public class Solution { + + public ArrayList Permutation(String str) { + + ArrayList reList = new ArrayList<>(); + + if (str == null || str.length() == 0) { + return reList; + } + + char[] chars = str.toCharArray(); + + // 递归输出字符串排列 + permutationHelper(chars, 0, reList); + Collections.sort(reList); + return reList; + } + + private void permutationHelper(char[] chars, int index, ArrayList list) { + + if (index == chars.length - 1) { + list.add(new String(chars)); + return; + } + + Set set = new HashSet<>(); + // 确定交换的字符,包括自己[index,length-1] + for (int i = index; i < chars.length; i++) { + + // 排除出现重复字符 + // hash表,查询花费O(1) + if (!set.contains(chars[i])) { + set.add(chars[i]); + // 固定字符index + swap(chars, i, index); + // 递归固定剩余字符[index+1,length-1] + permutationHelper(chars, index + 1, list); + // 恢复原数组 + swap(chars, index, i); + } + } + } + + private void swap(char[] chars, int x, int y) { + + char temp = chars[x]; + chars[x] = chars[y]; + chars[y] = temp; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/39_MoreThanHalfNumber/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/39_MoreThanHalfNumber/README.md" new file mode 100644 index 00000000..f60d182a --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/39_MoreThanHalfNumber/README.md" @@ -0,0 +1,162 @@ +## 数组中出现次数超过一半的数字 + +### 题目描述 +数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为 9 的数组 `{1,2,3,2,2,2,5,4,2}`。由于数字 2 在数组中出现了 5 次,超过数组长度的一半,因此输出 2。如果不存在则输出 0。 + +### 解法 +#### 解法一 +利用快排中的 partition 思想。 + +数组中有一个数字出现次数超过了数组长度的一半,那么排序后,数组中间的数字一定就是我们要找的数字。我们随机选一个数字,利用 partition() 函数,使得比选中数字小的数字都排在它左边,比选中数字大的数字都排在它的右边。 + +判断选中数字的下标 `index`: + +- 如果 `index = n/2`,那么这个数字就是中位数。 +- 如果 `index > n/2`,那么接着在 index 的左边进行 partition。 +- 如果 `index < n/2`,则在 index 的右边继续进行 partition。 + +**注意:**这种方法会修改输入的数组。时间复杂度为 `O(n)`。 + +```java +/** + * @author Anonymous + * @since 2019/12/6 + */ + +public class Solution { + /** + * 查找数组中出现次数超过一次的数字 + * + * @param array 数组 + * @return 返回该数,不存在则返回0 + */ + public int MoreThanHalfNum_Solution(int[] array) { + if (array == null || array.length == 0) { + return 0; + } + int n = array.length; + int start = 0, end = n - 1; + int mid = n >> 1; + int index = partition(array, start, end); + while (index != mid) { + if (index > mid) { + end = index - 1; + } else { + start = index + 1; + } + index = partition(array, start, end); + } + + return isMoreThanHalf(array, array[index]) ? array[index] : 0; + } + + /** + * 快排中的 partition 方法 + * + * @param array 数组 + * @param start 开始位置 + * @param end 结束位置 + * @return + */ + private int partition(int[] array, int start, int end) { + int small = start - 1; + for (int i = start; i < end; ++i) { + if (array[i] < array[end]) { + swap(array, i, ++small); + } + } + ++small; + swap(array, small, end); + return small; + + } + + private void swap(int[] array, int i, int j) { + int t = array[i]; + array[i] = array[j]; + array[j] = t; + } + + /** + * 判断val元素是否真的超过数组元素个数的一半 + * + * @param array 数组 + * @param val 某元素 + * @return boolean + */ + private boolean isMoreThanHalf(int[] array, int val) { + int cnt = 0; + for (int e : array) { + if (e == val) { + ++cnt; + } + } + + return cnt * 2 > array.length; + } +} +``` + +#### 解法二 +利用多数投票算法,从头到尾遍历数组,遇到两个不一样的数就把这两个数同时除去。除去的两个数可能都不是 majority,也可能一个是 majority 另一个不是,但是因为 majority 总数大于一半,所以这么删完最后剩下的肯定是 majority。 + +此方法时间复杂度为 `O(n)`,且不会改变数组。 + +```java +/** + * @author Anonymous + * @since 2019/12/6 + */ + +public class Solution { + /** + * 查找数组中出现次数超过一次的数字 + * + * @param array 数组 + * @return 返回该数,不存在则返回0 + */ + public int MoreThanHalfNum_Solution(int[] array) { + if (array == null || array.length == 0) { + return 0; + } + + int res = array[0]; + int times = 1; + for (int i = 1; i < array.length; ++i) { + if (times == 0) { + res = array[i]; + times = 1; + } else if (array[i] == res) { + ++times; + } else { + --times; + } + } + + return isMoreThanHalf(array, res) ? res : 0; + } + + + /** + * 判断val元素是否真的超过数组元素个数的一半 + * + * @param array 数组 + * @param val 某元素 + * @return boolean + */ + private boolean isMoreThanHalf(int[] array, int val) { + int cnt = 0; + for (int e : array) { + if (e == val) { + ++cnt; + } + } + + return cnt * 2 > array.length; + } +} +``` + +### 测试用例 +1. 功能测试(输入的数组中存在/不存在一个出现次数超过数组长度一半的数字); +2. 特殊输入测试(输入的数组只有一个数字;输入空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/39_MoreThanHalfNumber/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/39_MoreThanHalfNumber/Solution.java" new file mode 100644 index 00000000..cf9eb479 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/39_MoreThanHalfNumber/Solution.java" @@ -0,0 +1,51 @@ +/** + * @author Anonymous + * @since 2019/12/6 + */ + +public class Solution { + /** + * 查找数组中出现次数超过一次的数字 + * + * @param array 数组 + * @return 返回该数,不存在则返回0 + */ + public int MoreThanHalfNum_Solution(int[] array) { + if (array == null || array.length == 0) { + return 0; + } + + int res = array[0]; + int times = 1; + for (int i = 1; i < array.length; ++i) { + if (times == 0) { + res = array[i]; + times = 1; + } else if (array[i] == res) { + ++times; + } else { + --times; + } + } + + return isMoreThanHalf(array, res) ? res : 0; + } + + /** + * 判断val元素是否真的超过数组元素个数的一半 + * + * @param array 数组 + * @param val 某元素 + * @return boolean + */ + private boolean isMoreThanHalf(int[] array, int val) { + int cnt = 0; + for (int e : array) { + if (e == val) { + ++cnt; + } + } + + return cnt * 2 > array.length; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/40_KLeastNumbers/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/40_KLeastNumbers/README.md" new file mode 100644 index 00000000..7f562b73 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/40_KLeastNumbers/README.md" @@ -0,0 +1,132 @@ +## 获取数组中最小的k个数 + +### 题目描述 +输入 n 个整数,找出其中最小的 K 个数。例如输入 `4,5,1,6,2,7,3,8` 这 8 个数字,则最小的 4 个数字是 `1,2,3,4`。 + +### 解法 +#### 解法一 +利用快排中的 partition 思想。 + +数组中有一个数字出现次数超过了数组长度的一半,那么排序后,数组中间的数字一定就是我们要找的数字。我们随机选一个数字,利用 partition() 函数,使得比选中数字小的数字都排在它左边,比选中数字大的数字都排在它的右边。 + +判断选中数字的下标 `index`: + +- 如果 `index = k-1`,结束循环,返回前 k 个数。 +- 如果 `index > k-1`,那么接着在 index 的左边进行 partition。 +- 如果 `index < k-1`,则在 index 的右边继续进行 partition。 + +**注意**,这种方法会修改输入的数组。时间复杂度为 `O(n)`。 + +```java +import java.util.ArrayList; + +/** + * @author Anonymous + * @since 2019/12/6 + */ + +public class Solution { + + /** + * 获取数组中最小的k个数 + * + * @param input 输入的数组 + * @param k 元素个数 + * @return 最小的k的数列表 + */ + public ArrayList GetLeastNumbers_Solution(int[] input, int k) { + ArrayList res = new ArrayList<>(); + if (input == null || input.length == 0 || input.length < k || k < 1) { + return res; + } + int n = input.length; + int start = 0, end = n - 1; + int index = partition(input, start, end); + while (index != k - 1) { + if (index > k - 1) { + end = index - 1; + } else { + start = index + 1; + } + index = partition(input, start, end); + } + for (int i = 0; i < k; ++i) { + res.add(input[i]); + } + return res; + } + + private int partition(int[] input, int start, int end) { + int index = start - 1; + for (int i = start; i < end; ++i) { + if (input[i] < input[end]) { + swap(input, i, ++index); + } + } + ++index; + swap(input, index, end); + return index; + } + + private void swap(int[] array, int i, int j) { + int t = array[i]; + array[i] = array[j]; + array[j] = t; + } +} +``` + +#### 解法二 +利用大根堆,存储最小的 k 个数,最后返回即可。 + +此方法时间复杂度为 `O(nlogk)`。虽然慢一点,但是它不会改变输入的数组,并且它**适合海量数据的输入**。 + +假设题目要求从海量的数据中找出最小的 k 个数,由于内存的大小是有限的,有可能不能把这些海量的数据一次性全部载入内存。这个时候,用这种方法是最合适的。就是说它适合 n 很大并且 k 较小的问题。 + +```java +import java.util.ArrayList; +import java.util.Comparator; +import java.util.PriorityQueue; + +/** + * @author Anonymous + * @since 2019/12/6 + */ + +public class Solution { + + /** + * 获取数组中最小的k个数 + * + * @param input 输入的数组 + * @param k 元素个数 + * @return 最小的k的数列表 + */ + public ArrayList GetLeastNumbers_Solution(int[] input, int k) { + ArrayList res = new ArrayList<>(); + if (input == null || input.length == 0 || input.length < k || k < 1) { + return res; + } + + PriorityQueue maxHeap = new PriorityQueue<>(k, Comparator.reverseOrder()); + System.out.println(maxHeap.size()); + for (int e : input) { + if (maxHeap.size() < k) { + maxHeap.add(e); + } else { + if (maxHeap.peek() > e) { + maxHeap.poll(); + maxHeap.add(e); + } + + } + } + res.addAll(maxHeap); + return res; + } +} +``` + +### 测试用例 +1. 功能测试(输入的数组中存在/不存在一个出现次数超过数组长度一半的数字); +2. 特殊输入测试(输入的数组只有一个数字;输入空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/40_KLeastNumbers/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/40_KLeastNumbers/Solution.java" new file mode 100644 index 00000000..fd4e07ee --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/40_KLeastNumbers/Solution.java" @@ -0,0 +1,56 @@ +import java.util.ArrayList; + +/** + * @author Anonymous + * @since 2019/12/6 + */ + +public class Solution { + + /** + * 获取数组中最小的k个数 + * + * @param input 输入的数组 + * @param k 元素个数 + * @return 最小的k的数列表 + */ + public ArrayList GetLeastNumbers_Solution(int[] input, int k) { + ArrayList res = new ArrayList<>(); + if (input == null || input.length == 0 || input.length < k || k < 1) { + return res; + } + int n = input.length; + int start = 0, end = n - 1; + int index = partition(input, start, end); + while (index != k - 1) { + if (index > k - 1) { + end = index - 1; + } else { + start = index + 1; + } + index = partition(input, start, end); + } + for (int i = 0; i < k; ++i) { + res.add(input[i]); + } + return res; + } + + private int partition(int[] input, int start, int end) { + int index = start - 1; + for (int i = start; i < end; ++i) { + if (input[i] < input[end]) { + swap(input, i, ++index); + } + } + ++index; + swap(input, index, end); + return index; + } + + private void swap(int[] array, int i, int j) { + int t = array[i]; + array[i] = array[j]; + array[j] = t; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/41_StreamMedian/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/41_StreamMedian/README.md" new file mode 100644 index 00000000..733c2f81 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/41_StreamMedian/README.md" @@ -0,0 +1,67 @@ +## 数据流中的中位数 + +### 题目描述 +如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用`Insert()`方法读取数据流,使用`GetMedian()`方法获取当前读取数据的中位数。 + +### 解法 +利用大根堆存放较小的一半元素,小根堆存放较大的一半元素。维持大小堆的元素个数差不超过 1。 + + +```java +import java.util.Comparator; +import java.util.PriorityQueue; + +/** + * @author Anonymous + * @since 2019/12/7 + */ + +public class Solution { + + private PriorityQueue minHeap = new PriorityQueue<>(); + private PriorityQueue maxHeap = new PriorityQueue<>(Comparator.reverseOrder()); + + /** + * 插入一个数 + * + * @param num 数 + */ + public void Insert(Integer num) { + + if (maxHeap.isEmpty() || num < maxHeap.peek()) { + maxHeap.offer(num); + if (maxHeap.size() - minHeap.size() > 1) { + minHeap.offer(maxHeap.poll()); + } + + } else { + minHeap.offer(num); + if (minHeap.size() - maxHeap.size() > 1) { + maxHeap.offer(minHeap.poll()); + } + } + } + + /** + * 获取中位数 + * + * @return 中位数 + */ + public Double GetMedian() { + int size1 = maxHeap.size(); + int size2 = minHeap.size(); + if (size1 > size2) { + return (double) maxHeap.peek(); + } + if (size1 < size2) { + return (double) minHeap.peek(); + } + + return (maxHeap.peek() + minHeap.peek()) / 2.0; + } +} +``` + +### 测试用例 +1. 功能测试(从数据流中读出奇数/偶数个数字); +2. 边界值测试(从数据流中读出 0/1/2 个数字)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/41_StreamMedian/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/41_StreamMedian/Solution.java" new file mode 100644 index 00000000..18910ada --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/41_StreamMedian/Solution.java" @@ -0,0 +1,54 @@ +import java.util.Comparator; +import java.util.PriorityQueue; + +/** + * @author Anonymous + * @since 2019/12/7 + */ + +public class Solution { + + private PriorityQueue minHeap = new PriorityQueue<>(); + private PriorityQueue maxHeap = new PriorityQueue<>(Comparator.reverseOrder()); + + /** + * 插入一个数 + * + * @param num 数 + */ + public void Insert(Integer num) { + + if (maxHeap.isEmpty() || num < maxHeap.peek()) { + maxHeap.offer(num); + if (maxHeap.size() - minHeap.size() > 1) { + minHeap.offer(maxHeap.poll()); + } + + } else { + minHeap.offer(num); + if (minHeap.size() - maxHeap.size() > 1) { + maxHeap.offer(minHeap.poll()); + } + } + } + + /** + * 获取中位数 + * + * @return 中位数 + */ + public Double GetMedian() { + int size1 = maxHeap.size(); + int size2 = minHeap.size(); + if (size1 > size2) { + return (double) maxHeap.peek(); + } + if (size1 < size2) { + return (double) minHeap.peek(); + } + + return (maxHeap.peek() + minHeap.peek()) / 2.0; + } + + +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/42_GreatestSumOfSubarrays/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/42_GreatestSumOfSubarrays/README.md" new file mode 100644 index 00000000..717506d5 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/42_GreatestSumOfSubarrays/README.md" @@ -0,0 +1,49 @@ +## 连续子数组的最大和 + +### 题目描述 +输入一个**非空**整型数组,数组里的数可能为正,也可能为负。 +数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。 + +要求时间复杂度为`O(n)`。 + +### 解法 +动态规划法。 + +res[i] 表示以第 i 个数字结尾的子数组的最大和,那么求出 `max(res[i])` 即可。 + +- `res[i] = array[i]`, if `res[i - 1] < 0` +- `res[i] = res[i - 1] + array[i]`, if `res[i - 1] >= 0` + +```java + +/** + * @author Anonymous + * @since 2019/12/7 + */ + +public class Solution { + /** + * 求连续子数组的最大和 + * + * @param array 数组 + * @return 最大和 + */ + public int FindGreatestSumOfSubArray(int[] array) { + int n = array.length; + int[] res = new int[n]; + res[0] = array[0]; + int max = res[0]; + for (int i = 1; i < n; ++i) { + res[i] = res[i - 1] > 0 ? res[i - 1] + array[i] : array[i]; + max = Math.max(max, res[i]); + } + return max; + } +} + + +``` + +### 测试用例 +1. 功能测试(输入的数组中有正数也有负数;输入的数组中全是正数;输入的数组中全是负数); +2. 特殊输入测试(表示数组的指针位为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/42_GreatestSumOfSubarrays/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/42_GreatestSumOfSubarrays/Solution.java" new file mode 100644 index 00000000..9dbc80a6 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/42_GreatestSumOfSubarrays/Solution.java" @@ -0,0 +1,25 @@ + +/** + * @author Anonymous + * @since 2019/12/7 + */ + +public class Solution { + /** + * 求连续子数组的最大和 + * + * @param array 数组 + * @return 最大和 + */ + public int FindGreatestSumOfSubArray(int[] array) { + int n = array.length; + int[] res = new int[n]; + res[0] = array[0]; + int max = res[0]; + for (int i = 1; i < n; ++i) { + res[i] = res[i - 1] > 0 ? res[i - 1] + array[i] : array[i]; + max = Math.max(max, res[i]); + } + return max; + } +} diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/43_NumberOf1/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/43_NumberOf1/README.md" new file mode 100644 index 00000000..27352aaf --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/43_NumberOf1/README.md" @@ -0,0 +1,66 @@ +## 整数中1出现的次数 + +### 题目描述 +求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 + +### 解法 +- 编程之美上给出的规律: + + 1. 如果第i位(自右至左,从1开始标号)上的数字为0,则第i位可能出现1的次数由更高位决定(若没有高位,视高位为0),等于更高位数字X当前位数的权重10^(i-1)。 + 2. 如果第i位上的数字为1,则第i位上可能出现1的次数不仅受更高位影响,还受低位影响(若没有低位,视低位为0),等于更高位数字X当前位数的权重10^(i-1)+(低位数字+1)。 + 3. 如果第i位上的数字大于1,则第i位上可能出现1的次数仅由更高位决定(若没有高位,视高位为0),等于(更高位数字+1)X当前位数的权重10^(i-1)。 + + 总结一下以上的算法,可以看到,当计算右数第 i 位包含的 X 的个数时: + + 1. 取第 i 位左边(高位)的数字,乘以 10i−1,得到**基础值** a。 + 2. 取第 i 位数字,计算**修正值**: + 1. 如果大于 X,则结果为 a+10i−1。 + 2. 如果小于 X,则结果为 a。 + 3. 如果等 X,则取第 i 位右边(低位)数字,设为 b,最后结果为 a+b+1。 + + 相应的代码非常简单,效率也非常高,时间复杂度只有 O(logn)。 + +```java + +/** + * @author mcrwayfun + * @version 1.0 + * @description + * @date Created in 2019/1/17 + */ +public class Solution { + + public int NumberOf1Between1AndN_Solution(int n) { + + if (n < 1) { + return 0; + } + + int high, low, curr, tmp, i = 1; + high = n; + int number = 0; + while (high != 0) { + // 获取第i位的高位 + high = n / (int) Math.pow(10, i); + tmp = n % (int) Math.pow(10, i); + // 获取第i位 + curr = tmp / (int) Math.pow(10, i - 1); + // 获取第i位的低位 + low = tmp % (int) Math.pow(10, i - 1); + if (curr == 1) { + number += high * (int) Math.pow(10, i - 1) + low + 1; + } else if (curr < 1) { + number += high * (int) Math.pow(10, i - 1); + } else { + number += (high + 1) * (int) Math.pow(10, i - 1); + } + i++; + } + return number; + } +} +``` + +### 测试用例 +1. 功能测试(输入1~n的数字); +2. 特殊输入测试(输入的数字小于0)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/43_NumberOf1/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/43_NumberOf1/Solution.java" new file mode 100644 index 00000000..6cb2ec63 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/43_NumberOf1/Solution.java" @@ -0,0 +1,37 @@ +/** + * @author mcrwayfun + * @version 1.0 + * @description + * @date Created in 2019/1/17 + */ +public class Solution { + + public int NumberOf1Between1AndN_Solution(int n) { + + if (n < 1) { + return 0; + } + + int high, low, curr, tmp, i = 1; + high = n; + int number = 0; + while (high != 0) { + // 获取第i位的高位 + high = n / (int) Math.pow(10, i); + tmp = n % (int) Math.pow(10, i); + // 获取第i位 + curr = tmp / (int) Math.pow(10, i - 1); + // 获取第i位的低位 + low = tmp % (int) Math.pow(10, i - 1); + if (curr == 1) { + number += high * (int) Math.pow(10, i - 1) + low + 1; + } else if (curr < 1) { + number += high * (int) Math.pow(10, i - 1); + } else { + number += (high + 1) * (int) Math.pow(10, i - 1); + } + i++; + } + return number; + } +} diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/44_DigitsInSequence/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/44_DigitsInSequence/README.md" new file mode 100644 index 00000000..6c7af38d --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/44_DigitsInSequence/README.md" @@ -0,0 +1,71 @@ +## 数字序列中某一位的数字 + +### 题目描述 +数字以 `0123456789101112131415…` 的格式序列化到一个字符序列中。 + +在这个序列中,第 5 位(从 0 开始计数)是 5,第 13 位是 1,第 19 位是 4,等等。 + +请写一个函数求任意位对应的数字。 + +### 解法 +举个栗子,求序列第 1001 位。 + +序列的前 10 位是 `0~9`, 这 10 个只有一位的数字。显然第 1001 位在这 10 个数字之后,因此这 10 个数字可以直接跳过。再从后面序列中找第 991(991=1001-10) 位的数字。接下来有 90 个两位数,共 180 位,由于 991>180,所以继续跳过。从 881 找...最后可以找到对应的数字以及数字的某一位。 + +```java +/** + * @author Anonymous + * @since 2019/12/7 + */ + +public class Solution { + /** + * 求数字序列中某一位的数字 + * + * @param n 第n位 + * @return 第n位的数字 + */ + public int digitAtIndex(int n) { + if (n < 0) { + return -1; + } + int digits = 1; + while (true) { + long numbers = countOfIntegers(digits); + if (n < digits * numbers) { + break; + } + n -= numbers * digits; + ++digits; + } + return digitAtIndex(digits, n); + + } + + private long countOfIntegers(int digits) { + return digits == 1 + ? 10 + : (int) (9 * Math.pow(10, digits - 1)); + } + + private int digitAtIndex(int digits, int n) { + int beginNumber = getBeginNumber(digits); + int val = beginNumber + n / digits; + int indexFromRight = digits - n % digits; + for (int i = 1; i < indexFromRight; ++i) { + val /= 10; + } + return val % 10; + } + + private int getBeginNumber(int digits) { + return digits == 1 + ? 0 + : (int) Math.pow(10, digits - 1); + } +} +``` + +### 测试用例 +1. 功能测试(输入 10、190、1000); +2. 边界值测试(输入 0、1)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/44_DigitsInSequence/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/44_DigitsInSequence/Solution.java" new file mode 100644 index 00000000..679e3271 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/44_DigitsInSequence/Solution.java" @@ -0,0 +1,47 @@ +/** + * @author Anonymous + * @since 2019/12/7 + */ + +public class Solution { + /** + * 求数字序列中某一位的数字 + * + * @param n 第n位 + * @return 第n位的数字 + */ + public int digitAtIndex(int n) { + if (n < 0) { + return -1; + } + int digits = 1; + while (true) { + long numbers = countOfIntegers(digits); + if (n < digits * numbers) { + break; + } + n -= numbers * digits; + ++digits; + } + return digitAtIndex(digits, n); + + } + + private long countOfIntegers(int digits) { + return digits == 1 ? 10 : (int) (9 * Math.pow(10, digits - 1)); + } + + private int digitAtIndex(int digits, int n) { + int beginNumber = getBeginNumber(digits); + int val = beginNumber + n / digits; + int indexFromRight = digits - n % digits; + for (int i = 1; i < indexFromRight; ++i) { + val /= 10; + } + return val % 10; + } + + private int getBeginNumber(int digits) { + return digits == 1 ? 0 : (int) Math.pow(10, digits - 1); + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/45_SortArrayForMinNumber/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/45_SortArrayForMinNumber/README.md" new file mode 100644 index 00000000..ed7869bf --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/45_SortArrayForMinNumber/README.md" @@ -0,0 +1,50 @@ +## 把数组排成最小的数 + +### 题目描述 +输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 + +例如输入数组 `[3, 32, 321]`,则打印出这3个数字能排成的最小数字`321323`。 + +### 解法 + + +```java +import java.util.Arrays; + +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + + /** + * 打印数组元素组成的最小的数字 + * + * @param nums 数组 + * @return 最小的数字 + */ + public String printMinNumber(int[] nums) { + if (nums == null || nums.length == 0) { + return ""; + } + int n = nums.length; + String[] strNums = new String[n]; + for (int i = 0; i < n; ++i) { + strNums[i] = String.valueOf(nums[i]); + } + + Arrays.sort(strNums, (o1, o2) -> (o1 + o2).compareTo(o2 + o1)); + + StringBuilder sb = new StringBuilder(); + for (String str : strNums) { + sb.append(str); + } + return sb.toString(); + } +} +``` + +### 测试用例 +1. 功能测试(输入的数组中有多个数字;输入的数组中的数字有重复的数位;输入的数组中只有一个数字); +2. 特殊输入测试(表示数组的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/45_SortArrayForMinNumber/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/45_SortArrayForMinNumber/Solution.java" new file mode 100644 index 00000000..bc3faa42 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/45_SortArrayForMinNumber/Solution.java" @@ -0,0 +1,34 @@ +import java.util.Arrays; + +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + + /** + * 打印数组元素组成的最小的数字 + * + * @param nums 数组 + * @return 最小的数字 + */ + public String printMinNumber(int[] nums) { + if (nums == null || nums.length == 0) { + return ""; + } + int n = nums.length; + String[] strNums = new String[n]; + for (int i = 0; i < n; ++i) { + strNums[i] = String.valueOf(nums[i]); + } + + Arrays.sort(strNums, (o1, o2) -> (o1 + o2).compareTo(o2 + o1)); + + StringBuilder sb = new StringBuilder(); + for (String str : strNums) { + sb.append(str); + } + return sb.toString(); + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/46_TranslateNumbersToStrings/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/46_TranslateNumbersToStrings/README.md" new file mode 100644 index 00000000..ec893f8f --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/46_TranslateNumbersToStrings/README.md" @@ -0,0 +1,56 @@ +## 把数字翻译成字符串 + +### 题目描述 +给定一个数字,我们按照如下规则把它翻译为字符串: + +0 翻译成 ”a”,1 翻译成 ”b”,……,11 翻译成 ”l”,……,25 翻译成 ”z”。 + +一个数字可能有多个翻译。例如 12258 有 5 种不同的翻译,它们分别是 ”bccfi”、”bwfi”、”bczi”、”mcfi”和”mzi”。 + +请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。 + +### 解法 +先写入递推式,res 表示共有多少种翻译方法。看最后一个字符,判断它与前一个字符能否构成有效翻译,计算 res[i]: + +- 能,那么 `res[i] = res[i - 1] + res[i - 2]`; +- 不能,那么 `res[i] = res[i - 1]`。 + + +```java +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + /** + * 获取翻译字符串的方法个数 + * + * @param s 字符串 + * @return 个数 + */ + public int getTranslationCount(String s) { + if (s == null || s.length() < 2) { + return 1; + } + char[] chars = s.toCharArray(); + int n = chars.length; + int[] res = new int[n]; + res[0] = 1; + res[1] = isInRange(chars[0], chars[1]) ? 2 : 1; + for (int i = 2; i < n; ++i) { + res[i] = res[i - 1] + (isInRange(chars[i - 1], chars[i]) ? res[i - 2] : 0); + } + return res[n - 1]; + } + + private boolean isInRange(char a, char b) { + int s = (a - '0') * 10 + (b -'0'); + return s >= 10 && s <= 25; + } +} +``` + +### 测试用例 +1. 功能测试(只有一位数字;包含多位数字); +2. 特殊输入测试(负数;0;包含 25、26 的数字)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/46_TranslateNumbersToStrings/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/46_TranslateNumbersToStrings/Solution.java" new file mode 100644 index 00000000..a56f8c4a --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/46_TranslateNumbersToStrings/Solution.java" @@ -0,0 +1,32 @@ +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + /** + * 获取翻译字符串的方法个数 + * + * @param s 字符串 + * @return 个数 + */ + public int getTranslationCount(String s) { + if (s == null || s.length() < 2) { + return 1; + } + char[] chars = s.toCharArray(); + int n = chars.length; + int[] res = new int[n]; + res[0] = 1; + res[1] = isInRange(chars[0], chars[1]) ? 2 : 1; + for (int i = 2; i < n; ++i) { + res[i] = res[i - 1] + (isInRange(chars[i - 1], chars[i]) ? res[i - 2] : 0); + } + return res[n - 1]; + } + + private boolean isInRange(char a, char b) { + int s = (a - '0') * 10 + (b - '0'); + return s >= 10 && s <= 25; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/47_MaxValueOfGifts/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/47_MaxValueOfGifts/README.md" new file mode 100644 index 00000000..2aac938c --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/47_MaxValueOfGifts/README.md" @@ -0,0 +1,57 @@ +## 礼物的最大价值 + +### 题目描述 +在一个 `m×n` 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。 + +你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格直到到达棋盘的右下角。 + +给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? + +### 解法 +写出递推式,res 表示获得的最大礼物。 + +```java +res[i][j] = Math.max(res[i - 1][j], res[i][j - 1]) + grid[i][j]; +``` + + +```java +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + /** + * 获取礼物的最大价值 + * + * @param grid 数组 + * @return 最大价值 + */ + public int getMaxValue(int[][] grid) { + if (grid == null || grid.length == 0) { + return 0; + } + int m = grid.length; + int n = grid[0].length; + int[][] res = new int[m][n]; + res[0][0] = grid[0][0]; + for (int j = 1; j < n; ++j) { + res[0][j] = res[0][j - 1] + grid[0][j]; + } + for (int i = 1; i < m; ++i) { + res[i][0] = res[i - 1][0] + grid[i][0]; + } + for (int i = 1; i < m; ++i) { + for (int j = 1; j < n; ++j) { + res[i][j] = Math.max(res[i - 1][j], res[i][j - 1]) + grid[i][j]; + } + } + return res[m - 1][n - 1]; + } +} +``` + +### 测试用例 +1. 功能测试(多行多列的矩阵;一行或者一列的矩阵;只有一个数字的矩阵); +2. 特殊输入测试(指向矩阵数组的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/47_MaxValueOfGifts/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/47_MaxValueOfGifts/Solution.java" new file mode 100644 index 00000000..65cf019a --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/47_MaxValueOfGifts/Solution.java" @@ -0,0 +1,34 @@ +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + /** + * 获取礼物的最大价值 + * + * @param grid 数组 + * @return 最大价值 + */ + public int getMaxValue(int[][] grid) { + if (grid == null || grid.length == 0) { + return 0; + } + int m = grid.length; + int n = grid[0].length; + int[][] res = new int[m][n]; + res[0][0] = grid[0][0]; + for (int j = 1; j < n; ++j) { + res[0][j] = res[0][j - 1] + grid[0][j]; + } + for (int i = 1; i < m; ++i) { + res[i][0] = res[i - 1][0] + grid[i][0]; + } + for (int i = 1; i < m; ++i) { + for (int j = 1; j < n; ++j) { + res[i][j] = Math.max(res[i - 1][j], res[i][j - 1]) + grid[i][j]; + } + } + return res[m - 1][n - 1]; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/48_LongestSubstringWithoutDup/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/48_LongestSubstringWithoutDup/README.md" new file mode 100644 index 00000000..9b096e7e --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/48_LongestSubstringWithoutDup/README.md" @@ -0,0 +1,63 @@ +## 最长不含重复字符的子字符串 + +### 题目描述 +请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 + +假设字符串中只包含从 `a` 到 `z`的字符。 + +### 解法 +动态规划。 + +`res[i]` 表示以 `s[i]` 字符结尾的最长不重复字符串的长度。判断 `s[i]`: +- 若 `s[i]` 在前面没出现过,那么 `res[i] = res[i - 1] + 1`; +- 若 `s[i]` 在前面有出现过,判断它上一次出现的位置 `index` 到 `i` 的距离 `d` 与 `res[i - 1]` 的大小关系: + - 若 `d <= res[i - 1]`,说明它被包含在 `res[i - 1]` 构成的子串中,那么 `res[i] = d`; + - 若 `d > res[i - 1]`,说明它在 `res[i - 1]` 构成的子串的左侧,那么 `res[i] = res[i - 1] + 1`。 + +需要用一个数组 t 记录一下当前出现的字符在哪个位置。 + +```java +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + /** + * 最长不含重复字符的子字符串 + * + * @param s 字符串 + * @return 最长不重复字符子串 + */ + public int longestSubstringWithoutDuplication(String s) { + if (s == null || s.length() == 0) { + return 0; + } + char[] chars = s.toCharArray(); + int[] t = new int[26]; + for (int i = 0; i < 26; ++i) { + t[i] = -1; + } + t[chars[0] - 'a'] = 0; + int n = chars.length; + int[] res = new int[n]; + res[0] = 1; + int max = res[0]; + for (int i = 1; i < n; ++i) { + int index = t[chars[i] - 'a']; + int d = i - index; + res[i] = (index == -1 || d > res[i - 1]) + ? res[i - 1] + 1 + : d; + + t[chars[i] - 'a'] = i; + max = Math.max(max, res[i]); + } + return max; + } +} +``` + +### 测试用例 +1. 功能测试(包含多个字符的字符串;只有一个字符的字符串;所有字符都唯一的字符串;所有字符都相同的字符串); +2. 特殊输入测试(空字符串)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/48_LongestSubstringWithoutDup/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/48_LongestSubstringWithoutDup/Solution.java" new file mode 100644 index 00000000..b77563a9 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/48_LongestSubstringWithoutDup/Solution.java" @@ -0,0 +1,37 @@ +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + /** + * 最长不含重复字符的子字符串 + * + * @param s 字符串 + * @return 最长不重复字符子串 + */ + public int longestSubstringWithoutDuplication(String s) { + if (s == null || s.length() == 0) { + return 0; + } + char[] chars = s.toCharArray(); + int[] t = new int[26]; + for (int i = 0; i < 26; ++i) { + t[i] = -1; + } + t[chars[0] - 'a'] = 0; + int n = chars.length; + int[] res = new int[n]; + res[0] = 1; + int max = res[0]; + for (int i = 1; i < n; ++i) { + int index = t[chars[i] - 'a']; + int d = i - index; + res[i] = (index == -1 || d > res[i - 1]) ? res[i - 1] + 1 : d; + + t[chars[i] - 'a'] = i; + max = Math.max(max, res[i]); + } + return max; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/49_UglyNumber/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/49_UglyNumber/README.md" new file mode 100644 index 00000000..bec37fd3 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/49_UglyNumber/README.md" @@ -0,0 +1,106 @@ +## 丑数 + +### 题目描述 +把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 + +### 解法1 +由题目可以得知,丑数必定可以整除2、3或者5(除了丑数1之外),也就是说,如果一个数能够被2整除,就连续除以2;能够被3整除,就连续除以3;能够被5整除,就连续除以5;如果最后得到1,那么这个数便是丑数。因此我们可以使用暴力的方式遍历到第N个丑数。 + +该解法的time complexity为O(count),比如第1500个丑数为859963392,那么就需要枚举1到859963392 + +```java +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/01/23 + * @description + */ +public class Solution { + + private boolean isUgly(int number){ + if(number % 2 == 0) + number /= 2; + if(number % 3 == 0) + number /= 3; + if(number % 5 == 0) + number /= 5; + return number == 1; + } + + public int GetUglyNumber_Solution(int index){ + if(index <= 0) + return 0; + + int number = 0; + int count = 0; + while(count < index){ + number++; + if(isUgly(number)){ + count++; + } + } + + return number; + } +} +``` + +### 解法2 + +把15以内的丑数列出来:`1、2、3、4、5、6、8、9、10、12、15` ,你会发现新丑数必定是旧丑数乘以因子2、3或者5得来的。所以可以使用一个list来存储已经出现的丑数以此来计算出新的丑数,从而避免对非丑数的计算。 + +通过维护3个下标i2,i3,i5和它们对应的值m2,m3,m5,每次向list中添加的为m2,m3,m5中的最小值,以此来维护list的有序性。 + +该解法的time complexity为O(n),space complexity为O(n),属于典型的用空间换时间的解决方法。 + +```java +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/01/23 + * @description + */ +public class Solution { + + public int GetUglyNumber_Solution(int index) { + + if (index <= 0) + return 0; + + List reList = new ArrayList<>(); + // 第一个丑数为1 + reList.add(1); + int i2 = 0, i3 = 0, i5 = 0; + while (reList.size() < index) { + + int m2 = reList.get(i2) * 2; + int m3 = reList.get(i3) * 3; + int m5 = reList.get(i5) * 5; + + // 求出m2、m3、m5中的最小值,该值为加入list的丑数 + int min = Math.min(m2, Math.min(m3, m5)); + + if (m2 == min) { + i2++; + } + if (m3 == min) { + i3++; + } + if (m5 == min) { + i5++; + } + + reList.add(min); + } + + // O(1) + return reList.get(reList.size() - 1); + } +} +``` + +### 测试用例 + +1. 功能测试(输入2、3、4、5、6等)。 +2. 特殊输入测试(边界值1;无效输入0)。 +3. 性能测试(输入较大的数字,比如1500)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/49_UglyNumber/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/49_UglyNumber/Solution.java" new file mode 100644 index 00000000..cb3140c5 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/49_UglyNumber/Solution.java" @@ -0,0 +1,43 @@ +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/01/23 + * @description + */ +public class Solution { + + public int GetUglyNumber_Solution(int index) { + + if (index <= 0) + return 0; + + List reList = new ArrayList<>(); + // 第一个丑数为1 + reList.add(1); + int i2 = 0, i3 = 0, i5 = 0; + while (reList.size() < index) { + + int m2 = reList.get(i2) * 2; + int m3 = reList.get(i3) * 3; + int m5 = reList.get(i5) * 5; + + // 求出m2、m3、m5中的最小值,该值为加入list的丑数 + int min = Math.min(m2, Math.min(m3, m5)); + + if (m2 == min) { + i2++; + } + if (m3 == min) { + i3++; + } + if (m5 == min) { + i5++; + } + + reList.add(min); + } + + // O(1) + return reList.get(reList.size() - 1); + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_01_FirstNotRepeatingChar/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_01_FirstNotRepeatingChar/README.md" new file mode 100644 index 00000000..ebf2baeb --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_01_FirstNotRepeatingChar/README.md" @@ -0,0 +1,43 @@ +## 第一个只出现一次的字符 + +### 题目描述 +在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). + +### 解法1 +使用HashMap来统计字符出现的次数,因为字符的多少是固定的(大小写字母一共52个),所以可以认为使用HashMap的空间复杂度为O(1)。该解法时间复杂度为O(n)。 + +```java +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/01/24 + * @description + */ +public class Solution { + + public int FirstNotRepeatingChar(String str) { + + if (str == null || str.length() == 0) { + return -1; + } + + Map characterMap = new HashMap<>(); + // hashMap is HashTable,search cost O(1) + for (int i = 0; i < str.length(); i++) { + characterMap.put(str.charAt(i), characterMap.getOrDefault(str.charAt(i), 0) + 1); + } + + for (int i = 0; i < str.length(); i++) { + if (characterMap.get(str.charAt(i)) == 1) { + return i; + } + } + + return -1; + } +} +``` +### 测试用例 + +1. 功能测试(字符串中仅存在只出现一次的字符;字符串中不存在只出现一次的字符;字符串中所有字符都只出现一次)。 +2. 特殊输入测试(字符串为null)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_01_FirstNotRepeatingChar/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_01_FirstNotRepeatingChar/Solution.java" new file mode 100644 index 00000000..881c4bba --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_01_FirstNotRepeatingChar/Solution.java" @@ -0,0 +1,29 @@ +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/01/24 + * @description + */ +public class Solution { + + public int FirstNotRepeatingChar(String str) { + + if (str == null || str.length() == 0) { + return -1; + } + + Map characterMap = new HashMap<>(); + // hashMap is HashTable,search cost O(1) + for (int i = 0; i < str.length(); i++) { + characterMap.put(str.charAt(i), characterMap.getOrDefault(str.charAt(i), 0) + 1); + } + + for (int i = 0; i < str.length(); i++) { + if (characterMap.get(str.charAt(i)) == 1) { + return i; + } + } + + return -1; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_02_FristCharacterInStream/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_02_FristCharacterInStream/README.md" new file mode 100644 index 00000000..2d67dbcc --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_02_FristCharacterInStream/README.md" @@ -0,0 +1,45 @@ +## 字符流中第一个不重复的字符 + +### 题目描述 + +请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。如果当前字符流没有存在出现一次的字符,返回#字符。 + + +### 解法1 +与上一道题的思路是一致的。 + +```java +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/01/25 + * @description + */ +public class Solution { + + private StringBuilder res = new StringBuilder(); + private Map characterMap = new HashMap<>(); + + // Insert one char from stringstream + public void Insert(char ch) { + res.append(ch); + characterMap.put(ch, characterMap.getOrDefault(ch, 0) + 1); + } + + // return the first appearence once char in current stringstream + public char FirstAppearingOnce() { + + for (char c : res.toString().toCharArray()) { + if (characterMap.get(c) == 1) { + return c; + } + } + + return '#'; + } +} +``` +### 测试用例 + +1. 功能测试(读入一个字符;读入多个字符;读入的所有字符都是唯一的;读入的所有字符都是重复出现的)。 +2. 特殊输入测试(读入0个字符)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_02_FristCharacterInStream/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_02_FristCharacterInStream/Solution.java" new file mode 100644 index 00000000..7e0c7ebf --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/50_02_FristCharacterInStream/Solution.java" @@ -0,0 +1,29 @@ +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/01/25 + * @description + */ +public class Solution { + + private StringBuilder res = new StringBuilder(); + private Map characterMap = new HashMap<>(); + + // Insert one char from stringstream + public void Insert(char ch) { + res.append(ch); + characterMap.put(ch, characterMap.getOrDefault(ch, 0) + 1); + } + + // return the first appearence once char in current stringstream + public char FirstAppearingOnce() { + + for (char c : res.toString().toCharArray()) { + if (characterMap.get(c) == 1) { + return c; + } + } + + return '#'; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/52_FirstCommonNodesInLists/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/52_FirstCommonNodesInLists/README.md" new file mode 100644 index 00000000..573d3357 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/52_FirstCommonNodesInLists/README.md" @@ -0,0 +1,86 @@ +## 两个链表的第一个公共结点 + +### 题目描述 +输入两个链表,找出它们的第一个公共结点。 + +**样例** +``` +给出两个链表如下所示: +A: a1 → a2 + ↘ + c1 → c2 → c3 + ↗ +B: b1 → b2 → b3 + +输出第一个公共节点c1 +``` + +### 解法 +先遍历两链表,求出两链表的长度,再求长度差 `|n1 - n2|`。 + +较长的链表先走 `|n1 - n2|` 步,之后两链表再同时走,首次相遇时的节点即为两链表的第一个公共节点。 + + +```java +/** + * @author Anonymous + * @since 2019/12/8 + */ + +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode(int x) { + * val = x; + * next = null; + * } + * } + */ +class Solution { + + /** + * 求两链表第一个公共节点 + * + * @param headA 链表A + * @param headB 链表B + * @return 第一个公共节点 + */ + public ListNode findFirstCommonNode(ListNode headA, ListNode headB) { + if (headA == null || headB == null) { + return null; + } + int n1 = len(headA), n2 = len(headB); + ListNode p1 = headA, p2 = headB; + if (n1 > n2) { + for (int i = 0; i < n1 - n2; ++i) { + p1 = p1.next; + } + } else if (n1 < n2) { + for (int i = 0; i < n2 - n1; ++i) { + p2 = p2.next; + } + } + while (p1 != p2 && p1 != null && p2 != null) { + p1 = p1.next; + p2 = p2.next; + } + return (p1 == null || p2 == null) ? null : p1; + } + + private int len(ListNode head) { + int n = 0; + ListNode cur = head; + while (cur != null) { + ++n; + cur = cur.next; + } + return n; + } +} +``` + +### 测试用例 +1. 功能测试(输入的两个链表有公共节点;第一个公共节点在链表的中间,第一个公共节点在链表的末尾,第一个公共节点是链表的头节点;输入的两个链表没有公共节点); +2. 特殊输入测试(输入的链表头节点是空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/52_FirstCommonNodesInLists/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/52_FirstCommonNodesInLists/Solution.java" new file mode 100644 index 00000000..e48f200d --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/52_FirstCommonNodesInLists/Solution.java" @@ -0,0 +1,57 @@ +/** + * @author Anonymous + * @since 2019/12/8 + */ + +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode(int x) { + * val = x; + * next = null; + * } + * } + */ +class Solution { + + /** + * 求两链表第一个公共节点 + * + * @param headA 链表A + * @param headB 链表B + * @return 第一个公共节点 + */ + public ListNode findFirstCommonNode(ListNode headA, ListNode headB) { + if (headA == null || headB == null) { + return null; + } + int n1 = len(headA), n2 = len(headB); + ListNode p1 = headA, p2 = headB; + if (n1 > n2) { + for (int i = 0; i < n1 - n2; ++i) { + p1 = p1.next; + } + } else if (n1 < n2) { + for (int i = 0; i < n2 - n1; ++i) { + p2 = p2.next; + } + } + while (p1 != p2 && p1 != null && p2 != null) { + p1 = p1.next; + p2 = p2.next; + } + return (p1 == null || p2 == null) ? null : p1; + } + + private int len(ListNode head) { + int n = 0; + ListNode cur = head; + while (cur != null) { + ++n; + cur = cur.next; + } + return n; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_01_NumberOfK/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_01_NumberOfK/README.md" new file mode 100644 index 00000000..4c5d266f --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_01_NumberOfK/README.md" @@ -0,0 +1,99 @@ +## 数字在排序数组中出现的次数 + +### 题目描述 +统计一个数字在排序数组中出现的次数。 + +例如输入排序数组 `[1, 2, 3, 3, 3, 3, 4, 5]` 和数字 3,由于 3 在这个数组中出现了 4 次,因此输出 4。 + +**样例** + +``` +输入:[1, 2, 3, 3, 3, 3, 4, 5] , 3 + +输出:4 +``` + +### 解法 +找出第一个 k 和最后一个 k 出现的位置。 + +找第一个 k 时,利用二分法,如果 `nums[m] == k`,判断它的前一个位置是不是也是 k,如果不是,说明这是第一个 k,直接返回。如果是,那么递归在左边查找第一个 k。 + +找最后一个 k 也同理。 + + +```java +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + /** + * 求数字k在排序数组中出现的次数 + * + * @param nums 数组 + * @param k 数字k + * @return k在数组中出现的次数 + */ + public int getNumberOfK(int[] nums, int k) { + if (nums == null || nums.length == 0) { + return 0; + } + int start = 0, end = nums.length - 1; + int first = getFirstK(nums, start, end, k); + int last = getLastK(nums, start, end, k); + if (first > -1 && last > -1) { + return last - first + 1; + } + return 0; + } + + private int getFirstK(int[] nums, int start, int end, int k) { + if (start > end) { + return -1; + } + int m = start + ((end - start) >> 1); + if (nums[m] == k) { + if (m == 0 || (m > 0 && nums[m - 1] != k)) { + return m; + } else { + end = m - 1; + } + } else { + if (nums[m] > k) { + end = m - 1; + } else { + start = m + 1; + } + } + return getFirstK(nums, start, end, k); + } + + private int getLastK(int[] nums, int start, int end, int k) { + if (start > end) { + return -1; + } + int m = start + ((end - start) >> 1); + if (nums[m] == k) { + if (m == nums.length - 1 || (m < nums.length - 1 && nums[m + 1] != k)) { + return m; + } else { + start = m + 1; + } + } else { + if (nums[m] > k) { + end = m - 1; + } else { + start = m + 1; + } + } + return getLastK(nums, start, end, k); + + } +} +``` + +### 测试用例 +1. 功能测试(数组中包含要查找的数字;数组中没有要查找的数字;要查找的数字在数组中出现一次/多次); +2. 边界值测试(查找数组中的最大值、最小值;数组中只有一个数字); +3. 特殊输入测试(表示数组的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_01_NumberOfK/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_01_NumberOfK/Solution.java" new file mode 100644 index 00000000..acb49faa --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_01_NumberOfK/Solution.java" @@ -0,0 +1,69 @@ +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + /** + * 求数字k在排序数组中出现的次数 + * + * @param nums 数组 + * @param k 数字k + * @return k在数组中出现的次数 + */ + public int getNumberOfK(int[] nums, int k) { + if (nums == null || nums.length == 0) { + return 0; + } + int start = 0, end = nums.length - 1; + int first = getFirstK(nums, start, end, k); + int last = getLastK(nums, start, end, k); + if (first > -1 && last > -1) { + return last - first + 1; + } + return 0; + } + + private int getFirstK(int[] nums, int start, int end, int k) { + if (start > end) { + return -1; + } + int m = start + ((end - start) >> 1); + if (nums[m] == k) { + if (m == 0 || (m > 0 && nums[m - 1] != k)) { + return m; + } else { + end = m - 1; + } + } else { + if (nums[m] > k) { + end = m - 1; + } else { + start = m + 1; + } + } + return getFirstK(nums, start, end, k); + } + + private int getLastK(int[] nums, int start, int end, int k) { + if (start > end) { + return -1; + } + int m = start + ((end - start) >> 1); + if (nums[m] == k) { + if (m == nums.length - 1 || (m < nums.length - 1 && nums[m + 1] != k)) { + return m; + } else { + start = m + 1; + } + } else { + if (nums[m] > k) { + end = m - 1; + } else { + start = m + 1; + } + } + return getLastK(nums, start, end, k); + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_02_MissingNumber/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_02_MissingNumber/README.md" new file mode 100644 index 00000000..b393c0d6 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_02_MissingNumber/README.md" @@ -0,0 +1,62 @@ +## 0到n-1中缺失的数字 + +### 题目描述 +一个长度为 `n-1` 的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围 `0` 到 `n-1` 之内。 + +在范围 `0` 到 `n-1` 的 `n` 个数字中有且只有一个数字不在该数组中,请找出这个数字。 + +**样例** +``` +输入:[0,1,2,4] + +输出:3 +``` + +### 解法 +找出第一个与下标不对应的数字即可。 + +特殊情况: +- 下标都对应,那么应该返回 `最后一个数+1`; +- 缺失的数字是第一个,那么返回 0。 + + +```java +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + /** + * 获取0~n-1缺失的数字 + * + * @param nums 数组 + * @return 缺失的数字 + */ + public int getMissingNumber(int[] nums) { + if (nums == null || nums.length == 0) { + return 0; + } + int n = nums.length; + int start = 0, end = n - 1; + while (start <= end) { + int mid = start + ((end - start) >> 1); + if (nums[mid] != mid) { + if (mid == 0 || nums[mid - 1] == mid - 1) { + return mid; + } + end = mid - 1; + } else { + start = mid + 1; + } + } + return start == n ? n : -1; + + } +} +``` + +### 测试用例 +1. 功能测试(缺失的数字位于数组的开始、中间或者末尾); +2. 边界值测试(数组中只有一个数字 0); +3. 特殊输入测试(表示数组的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_02_MissingNumber/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_02_MissingNumber/Solution.java" new file mode 100644 index 00000000..37b3943d --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_02_MissingNumber/Solution.java" @@ -0,0 +1,33 @@ +/** + * @author Anonymous + * @since 2019/12/8 + */ + +class Solution { + /** + * 获取0~n-1缺失的数字 + * + * @param nums 数组 + * @return 缺失的数字 + */ + public int getMissingNumber(int[] nums) { + if (nums == null || nums.length == 0) { + return 0; + } + int n = nums.length; + int start = 0, end = n - 1; + while (start <= end) { + int mid = start + ((end - start) >> 1); + if (nums[mid] != mid) { + if (mid == 0 || nums[mid - 1] == mid - 1) { + return mid; + } + end = mid - 1; + } else { + start = mid + 1; + } + } + return start == n ? n : -1; + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_03_IntegerIdenticalToIndex/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_03_IntegerIdenticalToIndex/README.md" new file mode 100644 index 00000000..82e8d2da --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_03_IntegerIdenticalToIndex/README.md" @@ -0,0 +1,63 @@ +## 数组中数值和下标相等的元素 + +### 题目描述 +假设一个单调递增的数组里的每个元素都是整数并且是唯一的。 + +请编程实现一个函数找出数组中任意一个数值等于其下标的元素。 + +例如,在数组 `[-3, -1, 1, 3, 5]` 中,数字 3 和它的下标相等。 + +**样例** +``` +输入:[-3, -1, 1, 3, 5] + +输出:3 +``` + +**注意**:如果不存在,则返回 -1。 + +### 解法 +二分法查找。 +- 当前元素等于对应的下标,直接返回该下标; +- 当前元素大于该下标,在左边查找; +- 当前元素小于该下标,在右边查找。 + + +```java +/** + * @author Anonymous + * @since 2019/12/10 + */ + +class Solution { + /** + * 找出单调递增数组中数值和下标相等的元素 + * + * @param nums 数组 + * @return 数值与下标相等的元素 + */ + public int getNumberSameAsIndex(int[] nums) { + if (nums == null || nums.length == 0) { + return -1; + } + int start = 0, end = nums.length - 1; + while (start <= end) { + int mid = start + ((end - start) >> 1); + if (nums[mid] == mid) { + return mid; + } + if (nums[mid] < mid) { + start = mid + 1; + } else { + end = mid - 1; + } + } + return -1; + } +} +``` + +### 测试用例 +1. 功能测试(数组中包含或者不包含数值和下标相等的元素); +2. 边界值测试(数组中只有一个数字;数值和下标相等的元素位于数组的开头或者结尾); +3. 特殊输入测试(表示数组的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_03_IntegerIdenticalToIndex/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_03_IntegerIdenticalToIndex/Solution.java" new file mode 100644 index 00000000..d2d50532 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/53_03_IntegerIdenticalToIndex/Solution.java" @@ -0,0 +1,31 @@ +/** + * @author Anonymous + * @since 2019/12/10 + */ + +class Solution { + /** + * 找出单调递增数组中数值和下标相等的元素 + * + * @param nums 数组 + * @return 数值与下标相等的元素 + */ + public int getNumberSameAsIndex(int[] nums) { + if (nums == null || nums.length == 0) { + return -1; + } + int start = 0, end = nums.length - 1; + while (start <= end) { + int mid = start + ((end - start) >> 1); + if (nums[mid] == mid) { + return mid; + } + if (nums[mid] < mid) { + start = mid + 1; + } else { + end = mid - 1; + } + } + return -1; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/54_KthNodeInBST/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/54_KthNodeInBST/README.md" new file mode 100644 index 00000000..be0bc799 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/54_KthNodeInBST/README.md" @@ -0,0 +1,54 @@ +## 二叉搜索树的第k个结点 + +### 题目描述 +给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4 + +### 解法 +因为BST的中序遍历得到的是一个升序的列表,所以在进行中序遍历行进行判断即可。所以该算法的时间复杂度为O(logn) + + +```java +/** + * @author mcrwayfun + * @version 1.0 + * @description + * @date Created in 2019/1/28 + */ +class Solution { + + private int count = 0; + + public TreeNode KthNode(TreeNode pRoot, int k) { + + if (pRoot == null || k == 0) { + return null; + } + + // 左递归 + TreeNode retNode = KthNode(pRoot.left, k); + + if (retNode != null) { + return retNode; + } + + // 符合条件则返回 + count++; + if (count == k) { + return pRoot; + } + + // 右递归 + retNode = KthNode(pRoot.right, k); + if (retNode != null) { + return retNode; + } + + return null; + } +} +``` + +### 测试用例 +1. 功能测试(各种形态不同的二叉搜索树); +2. 边界值测试(输入k为0、1、二叉搜索树的结点数、二叉搜索树的结点数+1); +3. 特殊输入测试(指向二叉搜索树的节点的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/54_KthNodeInBST/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/54_KthNodeInBST/Solution.java" new file mode 100644 index 00000000..d0716a55 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/54_KthNodeInBST/Solution.java" @@ -0,0 +1,38 @@ +/** + * @author mcrwayfun + * @version 1.0 + * @description + * @date Created in 2019/1/28 + */ +class Solution { + + private int count = 0; + + public TreeNode KthNode(TreeNode pRoot, int k) { + + if (pRoot == null || k == 0) { + return null; + } + + // 左递归 + TreeNode retNode = KthNode(pRoot.left, k); + + if (retNode != null) { + return retNode; + } + + // 符合条件则返回 + count++; + if (count == k) { + return pRoot; + } + + // 右递归 + retNode = KthNode(pRoot.right, k); + if (retNode != null) { + return retNode; + } + + return null; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_01_TreeDepth/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_01_TreeDepth/README.md" new file mode 100644 index 00000000..f9c41a6e --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_01_TreeDepth/README.md" @@ -0,0 +1,59 @@ +## [二叉树的深度](https://www.acwing.com/problem/content/67/) + +### 题目描述 +输入一棵二叉树的根结点,求该树的深度。 + +从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 + +**样例** +``` +输入:二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]如下图所示: + 8 + / \ + 12 2 + / \ + 6 4 + +输出:3 +``` + +### 解法 +递归即可。 + + +```java +/** + * @author Anonymous + * @since 2019/12/10 + */ + +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + /** + * 求二叉树的深度 + * + * @param root 二叉树根结点 + * @return 深度 + */ + public int treeDepth(TreeNode root) { + if (root == null) { + return 0; + } + int lDepth = treeDepth(root.left); + int rDepth = treeDepth(root.right); + return 1 + Math.max(lDepth, rDepth); + } +} +``` + +### 测试用例 +1. 功能测试(输入普通的二叉树;二叉树中所有节点都没有左/右子树); +2. 特殊输入测试(二叉树只有一个节点;二叉树的头节点为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_01_TreeDepth/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_01_TreeDepth/Solution.java" new file mode 100644 index 00000000..59122026 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_01_TreeDepth/Solution.java" @@ -0,0 +1,30 @@ +/** + * @author Anonymous + * @since 2019/12/10 + */ + +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + /** + * 求二叉树的深度 + * + * @param root 二叉树根结点 + * @return 深度 + */ + public int treeDepth(TreeNode root) { + if (root == null) { + return 0; + } + int lDepth = treeDepth(root.left); + int rDepth = treeDepth(root.right); + return 1 + Math.max(lDepth, rDepth); + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_02_BalancedBinaryTree/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_02_BalancedBinaryTree/README.md" new file mode 100644 index 00000000..42b749b8 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_02_BalancedBinaryTree/README.md" @@ -0,0 +1,127 @@ +## [平衡二叉树](https://www.acwing.com/problem/content/68/) + +### 题目描述 +输入一棵二叉树的根结点,判断该树是不是平衡二叉树。 + +如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 + +**注意:** + +- 规定空树也是一棵平衡二叉树。 + +**样例** +``` +输入:二叉树[5,7,11,null,null,12,9,null,null,null,null]如下所示, + 5 + / \ + 7 11 + / \ + 12 9 + +输出:true +``` + +### 解法 +#### 解法一 +求每个节点左右孩子的深度,判断该节点是否平衡。 + +这种方法需要重复遍历节点多次,不推荐。 + + +```java +/** + * @author Anonymous + * @since 2019/12/10 + */ + +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + /** + * 判断是否是平衡二叉树 + * + * @param root 二叉树根结点 + * @return 是否是平衡二叉树 + */ + public boolean isBalanced(TreeNode root) { + if (root == null) { + return true; + } + if (Math.abs(treeDepth(root.left) - treeDepth(root.right)) > 1) { + return false; + } + return isBalanced(root.left) && isBalanced(root.right); + } + + private int treeDepth(TreeNode root) { + if (root == null) { + return 0; + } + int lDepth = treeDepth(root.left); + int rDepth = treeDepth(root.right); + return 1 + Math.max(lDepth, rDepth); + } +} +``` + +#### 解法二 + +```java +/** + * @author Anonymous + * @since 2019/12/10 + */ + +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + private boolean isBalanced; + + /** + * 判断是否是平衡二叉树 + * + * @param root 二叉树根结点 + * @return 是否是平衡二叉树 + */ + public boolean isBalanced(TreeNode root) { + if (root == null) { + return true; + } + isBalanced = true; + treeDepth(root); + return isBalanced; + } + + private int treeDepth(TreeNode root) { + if (root == null || !isBalanced) { + return 0; + } + int lDepth = treeDepth(root.left); + int rDepth = treeDepth(root.right); + if (Math.abs(lDepth - rDepth) > 1) { + isBalanced = false; + } + return 1 + Math.max(lDepth, rDepth); + + } +} +``` + + +### 测试用例 +1. 功能测试(平衡的二叉树;不是平衡的二叉树;二叉树中所有节点都没有左/右子树); +2. 特殊输入测试(二叉树只有一个节点;二叉树的头节点为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_02_BalancedBinaryTree/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_02_BalancedBinaryTree/Solution.java" new file mode 100644 index 00000000..cddaf203 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/55_02_BalancedBinaryTree/Solution.java" @@ -0,0 +1,45 @@ +/** + * @author Anonymous + * @since 2019/12/10 + */ + +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + private boolean isBalanced; + + /** + * 判断是否是平衡二叉树 + * + * @param root 二叉树根结点 + * @return 是否是平衡二叉树 + */ + public boolean isBalanced(TreeNode root) { + if (root == null) { + return true; + } + isBalanced = true; + treeDepth(root); + return isBalanced; + } + + private int treeDepth(TreeNode root) { + if (root == null || !isBalanced) { + return 0; + } + int lDepth = treeDepth(root.left); + int rDepth = treeDepth(root.right); + if (Math.abs(lDepth - rDepth) > 1) { + isBalanced = false; + } + return 1 + Math.max(lDepth, rDepth); + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_01_NumbersAppearOnce/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_01_NumbersAppearOnce/README.md" new file mode 100644 index 00000000..6c0869ba --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_01_NumbersAppearOnce/README.md" @@ -0,0 +1,77 @@ +## [数组中只出现一次的两个数字](https://www.acwing.com/problem/content/69/) + +### 题目描述 +一个整型数组里除了两个数字之外,其他的数字都出现了两次。 + +请写程序找出这两个只出现一次的数字。 + +你可以假设这两个数字一定存在。 + +**样例** +``` +输入:[1,2,3,3,4,4] + +输出:[1,2] +``` + +### 解法 +如果数组有一个数字出现一次,其它数字都出现两次。那么我们很容易通过异或 `^` 运算求出来。 + +而现在是有两个数字出现一次,那么我们考虑一下怎么将这两个数字隔开,之后我们对隔开的数组分别进行异或,不就求出来了? + +我们先异或,求得的结果是两个不相同的数字异或的结果,结果一定不为 0。那么它的二进制表示中一定有 1。我们根据这个 1 在二进制中出现的位置。将数组划分,这样,两个只出现一次的数字就会被隔开,之后求异或即可。 + +```java +/** + * @author Anonymous + * @since 2019/12/10 + */ + +class Solution { + /** + * 求数组中只出现一次的两个数字 + * + * @param nums 数字 + * @return 两个数字组成的数组 + */ + public int[] findNumsAppearOnce(int[] nums) { + if (nums == null || nums.length < 2) { + return null; + } + int xorRes = 0; + for (int e : nums) { + xorRes ^= e; + } + int[] res = new int[2]; + int index = indexOf1(xorRes); + for (int e : nums) { + if (isBit1(e, index)) { + res[0] ^= e; + } else { + res[1] ^= e; + } + } + return res; + + + } + + private int indexOf1(int val) { + int index = 0; + while ((val & 1) == 0) { + val = val >> 1; + ++index; + } + return index; + } + + private boolean isBit1(int val, int index) { + val = val >> index; + return (val & 1) == 1; + } +} +``` + + +### 测试用例 +1. 功能测试(数组中有多对重复的数字;数组中没有重复的数字)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_01_NumbersAppearOnce/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_01_NumbersAppearOnce/Solution.java" new file mode 100644 index 00000000..e42ae279 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_01_NumbersAppearOnce/Solution.java" @@ -0,0 +1,47 @@ +/** + * @author Anonymous + * @since 2019/12/10 + */ + +class Solution { + /** + * 求数组中只出现一次的两个数字 + * + * @param nums 数字 + * @return 两个数字组成的数组 + */ + public int[] findNumsAppearOnce(int[] nums) { + if (nums == null || nums.length < 2) { + return null; + } + int xorRes = 0; + for (int e : nums) { + xorRes ^= e; + } + int[] res = new int[2]; + int index = indexOf1(xorRes); + for (int e : nums) { + if (isBit1(e, index)) { + res[0] ^= e; + } else { + res[1] ^= e; + } + } + return res; + + } + + private int indexOf1(int val) { + int index = 0; + while ((val & 1) == 0) { + val = val >> 1; + ++index; + } + return index; + } + + private boolean isBit1(int val, int index) { + val = val >> index; + return (val & 1) == 1; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_02_NumberAppearingOnce/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_02_NumberAppearingOnce/README.md" new file mode 100644 index 00000000..3d050e0b --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_02_NumberAppearingOnce/README.md" @@ -0,0 +1,55 @@ +## [数组中唯一只出现一次的数字](https://www.acwing.com/problem/content/70/) + +### 题目描述 +在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。 + +请找出那个只出现一次的数字。 + +你可以假设满足条件的数字一定存在。 + +**思考题:** + +- 如果要求只使用 `O(n)` 的时间和额外 `O(1)` 的空间,该怎么做呢? + +### 解法 +分别累加数组中每个元素的二进制中出现的数字,那么出现三次的数字,二进制位上最后累加的结果一定能被 3 整除。不能被 3 整除的位,就属于只出现一次的数字。 + +```java +/** + * @author Anonymous + * @since 2019/12/10 + */ + +class Solution { + /** + * 找出数组中只出现一次的数字,其它数字都出现三次 + * + * @param nums 数字 + * @return 只出现一次的数字 + */ + public int findNumberAppearingOnce(int[] nums) { + if (nums == null || nums.length == 0) { + return 0; + } + int[] bits = new int[32]; + int n = nums.length; + for (int i = 0; i < n; ++i) { + int val = nums[i]; + for (int j = 0; j < 32; ++j) { + bits[j] += (val & 1); + val = val >> 1; + } + } + int res = 0; + for (int i = 0; i < 32; ++i) { + if (bits[i] % 3 != 0) { + res += Math.pow(2, i); + } + } + return res; + } +} +``` + +### 测试用例 +1. 功能测试(唯一只出现一次的数字分别是 0、正数、负数;重复出现三次的数字分别是 0、正数、负数)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_02_NumberAppearingOnce/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_02_NumberAppearingOnce/Solution.java" new file mode 100644 index 00000000..5ef5fc75 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/56_02_NumberAppearingOnce/Solution.java" @@ -0,0 +1,34 @@ +/** + * @author Anonymous + * @since 2019/12/10 + */ + +class Solution { + /** + * 找出数组中只出现一次的数字,其它数字都出现三次 + * + * @param nums 数字 + * @return 只出现一次的数字 + */ + public int findNumberAppearingOnce(int[] nums) { + if (nums == null || nums.length == 0) { + return 0; + } + int[] bits = new int[32]; + int n = nums.length; + for (int i = 0; i < n; ++i) { + int val = nums[i]; + for (int j = 0; j < 32; ++j) { + bits[j] += (val & 1); + val = val >> 1; + } + } + int res = 0; + for (int i = 0; i < 32; ++i) { + if (bits[i] % 3 != 0) { + res += Math.pow(2, i); + } + } + return res; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_01_TwoNumbersWithSum/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_01_TwoNumbersWithSum/README.md" new file mode 100644 index 00000000..0b477017 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_01_TwoNumbersWithSum/README.md" @@ -0,0 +1,55 @@ +## 和为S的两个数字 + +### 题目描述 +输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。ps:对应每个测试案例,输出两个数,小的先输出。 + +### 解法 +定义两个指针,start指向数组头,end指向数组末尾。如果: + +- `sum == array[start] + array[end]`,则返回结果 +- `sum > array[start] + array[end]`,则start++,因为数组是递增的,所以从小数右边找一个大数与 `array[end]` 求和再次判断 +- 否则 end-- + +```java +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/02/02 + * @description + */ +public class Solution { + + public ArrayList FindNumbersWithSum(int[] array, int sum) { + + ArrayList reList = new ArrayList<>(); + + if (array == null || array.length < 2 || sum <= array[0]) { + return reList; + } + + int start = 0; + int end = array.length - 1; + + while (start < end) { + + int curSum = array[start] + array[end]; + if (curSum == sum) { + reList.add(array[start]); + reList.add(array[end]); + return reList; + } else if (curSum < sum) { + start++; + } else { + end--; + } + } + + // 查无 + return reList; + } +} +``` + +### 测试用例 +1. 功能测试(数组中存在和为 s 的两个数;数组中不存在和为 s 的两个数); +2. 特殊输入测试(表示数组的指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_01_TwoNumbersWithSum/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_01_TwoNumbersWithSum/Solution.java" new file mode 100644 index 00000000..71dec19e --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_01_TwoNumbersWithSum/Solution.java" @@ -0,0 +1,37 @@ +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/02/02 + * @description + */ +public class Solution { + + public ArrayList FindNumbersWithSum(int[] array, int sum) { + + ArrayList reList = new ArrayList<>(); + + if (array == null || array.length < 2 || sum <= array[0]) { + return reList; + } + + int start = 0; + int end = array.length - 1; + + while (start < end) { + + int curSum = array[start] + array[end]; + if (curSum == sum) { + reList.add(array[start]); + reList.add(array[end]); + return reList; + } else if (curSum < sum) { + start++; + } else { + end--; + } + } + + // 查无 + return reList; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_02_ContinuousSquenceWithSum/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_02_ContinuousSquenceWithSum/README.md" new file mode 100644 index 00000000..c837b587 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_02_ContinuousSquenceWithSum/README.md" @@ -0,0 +1,77 @@ +## 和为S的连续正数序列 + +### 题目描述 +输入一个正数 s,打印出所有和为 s 的连续正数序列(至少含有两个数)。 + +例如输入 15,由于 `1+2+3+4+5=4+5+6=7+8=15`,所以结果打印出 3 个连续序列 1~5、4~6 和 7~8。 + +**样例** +``` +输入:15 + +输出:[[1,2,3,4,5],[4,5,6],[7,8]] +``` + +### 解法 +这道题同样利用两个指针left和right,将(1,2)作为初始序列。当序列和大于所求值,则left向前走,把最小的数排除了;当序列和小于所求值,则right向前走,把一个更大的数包进序列中;如果序列和等于所求值,则求值区间[left,right]中的所有数并加入到列表中,并且right向前走,把一个更大的值包入序列中。循环直到 `left < (sum + 1)/2` 。 + +这道题的time complexity为O(n^2),space complexity为O(1) + +```java +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/02/03 + * @description + */ +public class Solution { + + public List> findContinuousSequence(int sum) { + + List> reList = new ArrayList<>(); + + if (sum < 3) { + return reList; + } + + int left = 1; + int right = 2; + int mid = (sum + 1) / 2; + int curSum = left + right; + + // left小于sum一半即可(1/2n) + while (left < mid) { + + // 等与sum则加入列表中(2~1/2n) + if (curSum == sum) { + reList.add(getListFromleftToright(left, right)); + // right增加并重新寻找序列 + right++; + curSum += right; + } else if (curSum > sum) { + curSum -= left; + left++; + } else { + right++; + curSum += right; + } + } + + return reList; + } + + private List getListFromleftToright(int left, int right) { + + List tempList = new ArrayList<>(); + for (int i = left; i <= right; i++) { + tempList.add(i); + } + + return tempList; + } +} +``` + +### 测试用例 +1. 功能测试(存在和为 s 的连续序列,如 9、100 等;不存在和为 s 的连续序列,如 4、0 等); +2. 边界值测试(连续序列的最小和 3)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_02_ContinuousSquenceWithSum/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_02_ContinuousSquenceWithSum/Solution.java" new file mode 100644 index 00000000..c6203bcb --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/57_02_ContinuousSquenceWithSum/Solution.java" @@ -0,0 +1,52 @@ +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/02/03 + * @description + */ +public class Solution { + + public List> findContinuousSequence(int sum) { + + List> reList = new ArrayList<>(); + + if (sum < 3) { + return reList; + } + + int left = 1; + int right = 2; + int mid = (sum + 1) / 2; + int curSum = left + right; + + // left小于sum一半即可(1/2n) + while (left < mid) { + + // 等与sum则加入列表中(2~1/2n) + if (curSum == sum) { + reList.add(getListFromleftToright(left, right)); + // right增加并重新寻找序列 + right++; + curSum += right; + } else if (curSum > sum) { + curSum -= left; + left++; + } else { + right++; + curSum += right; + } + } + + return reList; + } + + private List getListFromleftToright(int left, int right) { + + List tempList = new ArrayList<>(); + for (int i = left; i <= right; i++) { + tempList.add(i); + } + + return tempList; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_01_ReverseWordsInSentence/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_01_ReverseWordsInSentence/README.md" new file mode 100644 index 00000000..efb66fe4 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_01_ReverseWordsInSentence/README.md" @@ -0,0 +1,55 @@ +## [ 翻转单词顺序](https://www.acwing.com/problem/content/73/) + +### 题目描述 +输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 + +为简单起见,标点符号和普通字母一样处理。 + +例如输入字符串 `"I am a student."`,则输出 `"student. a am I"`。 + +**样例** +``` +输入:"I am a student." + +输出:"student. a am I" +``` + +### 解法 +先对字符串按空格切割成数组,再逆序数组后,最后将元素拼接并返回。 + +```java +/** + * @author Anonymous + * @since 2019/12/12 + */ + +class Solution { + /** + * 翻转单词 + * + * @param s 字符串 + * @return 翻转后的字符串 + */ + public String reverseWords(String s) { + if (s == null || s.length() == 0 || s.trim().equals("")) { + return s; + } + + String[] arr = s.split(" "); + int p = 0, q = arr.length - 1; + while (p < q) { + swap(arr, p++, q--); + } + return String.join(" ", arr); + } + private void swap(String[] arr, int p, int q) { + String t = arr[p]; + arr[p] = arr[q]; + arr[q] = t; + } +} +``` + +### 测试用例 +1. 功能测试(句子中有多个单词;句子中只有一个单词); +2. 特殊输入测试(字符串指针为空指针;字符串的内容为空;字符串中只有空格)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_01_ReverseWordsInSentence/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_01_ReverseWordsInSentence/Solution.java" new file mode 100644 index 00000000..98eab5e8 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_01_ReverseWordsInSentence/Solution.java" @@ -0,0 +1,31 @@ +/** + * @author Anonymous + * @since 2019/12/12 + */ + +class Solution { + /** + * 翻转单词 + * + * @param s 字符串 + * @return 翻转后的字符串 + */ + public String reverseWords(String s) { + if (s == null || s.length() == 0 || s.trim().equals("")) { + return s; + } + + String[] arr = s.split(" "); + int p = 0, q = arr.length - 1; + while (p < q) { + swap(arr, p++, q--); + } + return String.join(" ", arr); + } + + private void swap(String[] arr, int p, int q) { + String t = arr[p]; + arr[p] = arr[q]; + arr[q] = t; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_02_LeftRotateString/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_02_LeftRotateString/README.md" new file mode 100644 index 00000000..f56db999 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_02_LeftRotateString/README.md" @@ -0,0 +1,67 @@ +## [左旋转字符串](https://www.acwing.com/problem/content/74/) + +### 题目描述 +字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。 + +请定义一个函数实现字符串左旋转操作的功能。 + +比如输入字符串 `"abcdefg"` 和数字 2,该函数将返回左旋转 2 位得到的结果 `"cdefgab"`。 + +**注意:** + +- 数据保证 n 小于等于输入字符串的长度。 + +**样例** +``` +输入:"abcdefg" , n=2 + +输出:"cdefgab" +``` + +### 解法 +先翻转前 n 个字符,再翻转后面的字符,最后整体翻转。 + +```java +/** + * @author Anonymous + * @since 2019/12/12 + */ + +class Solution { + + /** + * 左旋转字符串 + * + * @param str 字符串 + * @param n 左旋的位数 + * @return 旋转后的字符串 + */ + public String leftRotateString(String str, int n) { + if (str == null || n < 1 || n > str.length()) { + return str; + } + char[] chars = str.toCharArray(); + int len = chars.length; + reverse(chars, 0, n - 1); + reverse(chars, n, len - 1); + reverse(chars, 0, len - 1); + return new String(chars); + } + + private void reverse(char[] chars, int p, int q) { + while (p < q) { + swap(chars, p++, q--); + } + } + + private void swap(char[] chars, int p, int q) { + char t = chars[p]; + chars[p] = chars[q]; + chars[q] = t; + } +} +``` + +### 测试用例 +1. 功能测试(把长度为 n 的字符串左旋转 0/1/2/n-1/n/n+1 个字符); +2. 特殊输入测试(字符串指针为空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_02_LeftRotateString/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_02_LeftRotateString/Solution.java" new file mode 100644 index 00000000..8d7f64a5 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/58_02_LeftRotateString/Solution.java" @@ -0,0 +1,38 @@ +/** + * @author Anonymous + * @since 2019/12/12 + */ + +class Solution { + + /** + * 左旋转字符串 + * + * @param str 字符串 + * @param n 左旋的位数 + * @return 旋转后的字符串 + */ + public String leftRotateString(String str, int n) { + if (str == null || n < 1 || n > str.length()) { + return str; + } + char[] chars = str.toCharArray(); + int len = chars.length; + reverse(chars, 0, n - 1); + reverse(chars, n, len - 1); + reverse(chars, 0, len - 1); + return new String(chars); + } + + private void reverse(char[] chars, int p, int q) { + while (p < q) { + swap(chars, p++, q--); + } + } + + private void swap(char[] chars, int p, int q) { + char t = chars[p]; + chars[p] = chars[q]; + chars[q] = t; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/59_01_MaxInSlidingWindow/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/59_01_MaxInSlidingWindow/README.md" new file mode 100644 index 00000000..f568e9b3 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/59_01_MaxInSlidingWindow/README.md" @@ -0,0 +1,75 @@ +## 滑动窗口的最大值 + +### 题目描述 +给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。 + +例如,如果输入数组 `[2, 3, 4, 2, 6, 2, 5, 1]` 及滑动窗口的大小 3,那么一共存在 6 个滑动窗口,它们的最大值分别为 `[4, 4, 6, 6, 6, 5]`。 + +**注意:** + +- 数据保证 k 大于 0,且 k 小于等于数组长度。 + +**样例** + +``` +输入:[2, 3, 4, 2, 6, 2, 5, 1] , k=3 + +输出: [4, 4, 6, 6, 6, 5] +``` + +### 解法 +使用一个双端队列,保证队首存放的是窗口最大值的下标。遍历数组, + +1. 队尾元素比要入队的元素小,则把其移除(因为不可能成为窗口最大值)。 +2. 队首下标对应的元素不在窗口内(即窗口最大值),将其从队列中移除。 +3. 把每次滑动值的下标加入队列中(经过步骤1、2,此时加入队列的下标要么是当前窗口最大值的下标,要么是小于窗口最大值的下标)。 +4. 滑动窗口的首地址i大于size就写入窗口最大值。 + +time complexity:O(n) + +space complexity:O(k) , k is the size + +```java +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/02/05 + * @description + */ +class Solution { + + public ArrayList maxInWindows(int[] num, int size) { + + ArrayList reList = new ArrayList<>(); + if (num == null || num.length < size || size < 1) { + return reList; + } + + Deque deque = new LinkedList<>(); + for (int i = 0; i < num.length; i++) { + + // 队尾元素比要入队的元素小,则把其移除(因为不可能成为窗口最大值) + while (!deque.isEmpty() && num[deque.getLast()] <= num[i]) { + deque.pollLast(); + } + // 队首下标对应的元素不在窗口内(即窗口最大值),将其从队列中移除 + while (!deque.isEmpty() && (i - deque.getFirst() + 1 > size)) { + deque.pollFirst(); + } + // 把每次滑动的值加入到队列中 + deque.add(i); + // 滑动窗口的首地址i大于size就写入窗口最大值 + if (!deque.isEmpty() && i + 1 >= size) { + reList.add(num[deque.getFirst()]); + } + } + + return reList; + } +} +``` + +### 测试用例 +1. 功能测试(输入数组的数字大小无序;输入数组的数字单调递增;输入数组的数字单调递减); +2. 边界值测试(滑动窗口的大小为 0、1、等于输入数组的长度、大于输入数组的长度); +3. 特殊输入测试(输入数组为空)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/59_01_MaxInSlidingWindow/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/59_01_MaxInSlidingWindow/Solution.java" new file mode 100644 index 00000000..a46be4eb --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/59_01_MaxInSlidingWindow/Solution.java" @@ -0,0 +1,37 @@ +/** + * @author mcrwayfun + * @version v1.0 + * @date Created in 2019/02/05 + * @description + */ +class Solution { + + public ArrayList maxInWindows(int[] num, int size) { + + ArrayList reList = new ArrayList<>(); + if (num == null || num.length < size || size < 1) { + return reList; + } + + Deque deque = new LinkedList<>(); + for (int i = 0; i < num.length; i++) { + + // 队尾元素比要入队的元素小,则把其移除(因为不可能成为窗口最大值) + while (!deque.isEmpty() && num[deque.getLast()] <= num[i]) { + deque.pollLast(); + } + // 队首下标对应的元素不在窗口内(即窗口最大值),将其从队列中移除 + while (!deque.isEmpty() && (i - deque.getFirst() + 1 > size)) { + deque.pollFirst(); + } + // 把每次滑动的值加入到队列中 + deque.add(i); + // 滑动窗口的首地址i大于size就写入窗口最大值 + if (!deque.isEmpty() && i + 1 >= size) { + reList.add(num[deque.getFirst()]); + } + } + + return reList; + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/61_ContinousCards/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/61_ContinousCards/README.md" new file mode 100644 index 00000000..c7675796 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/61_ContinousCards/README.md" @@ -0,0 +1,78 @@ +## [扑克牌的顺子](https://www.acwing.com/problem/content/77/) + +### 题目描述 +从扑克牌中随机抽 `5` 张牌,判断是不是一个顺子,即这5张牌是不是连续的。 + +`2~10` 为数字本身,`A` 为`1`,`J` 为 `11`,`Q` 为 `12`,`K` 为 `13`,大小王可以看做任意数字。 + +为了方便,大小王均以 `0` 来表示,并且假设这副牌中大小王均有两张。 + +**样例1** +``` +输入:[8,9,10,11,12] + +输出:true +``` + +**样例2** +``` +输入:[0,8,9,11,12] + +输出:true +``` + +### 解法 +- 对数组排序; +- 计算出 0 的个数 `zeroCount`; +- 从第一个不是 0 的数字开始遍历,与后一个数字比较,如果相等,直接返回 `false`;否则累计 `gap`; +- 判断 `zeroCount` 是否大于等于 `gap`。 + + +```java +import java.util.Arrays; + +/** + * @author Anonymous + * @since 2019/12/12 + */ + +class Solution { + + /** + * 判断是否是连续的数字 + * + * @param numbers 数组 + * @return 是否是顺子 + */ + public boolean isContinuous(int [] numbers) { + if (numbers == null || numbers.length == 0) { + return false; + } + int zeroCount = 0; + Arrays.sort(numbers); + for (int e : numbers) { + if (e > 0) { + break; + } + ++zeroCount; + } + + int p = zeroCount, q = p + 1, n = numbers.length; + int gap = 0; + while (q < n) { + if (numbers[p] == numbers[q]) { + return false; + } + gap += (numbers[q] - numbers[p] - 1); + p = q; + ++q; + } + return gap <= zeroCount; + + } +} +``` + +### 测试用例 +1. 功能测试(抽出的牌中有一个或者多个大、小王;抽出的牌中没有大、小王;抽出的牌中有对子); +2. 特殊输入测试(输入空指针)。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/61_ContinousCards/Solution.java" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/61_ContinousCards/Solution.java" new file mode 100644 index 00000000..958215bf --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/61_ContinousCards/Solution.java" @@ -0,0 +1,42 @@ +import java.util.Arrays; + +/** + * @author Anonymous + * @since 2019/12/12 + */ + +class Solution { + + /** + * 判断是否是连续的数字 + * + * @param numbers 数组 + * @return 是否是顺子 + */ + public boolean isContinuous(int[] numbers) { + if (numbers == null || numbers.length == 0) { + return false; + } + int zeroCount = 0; + Arrays.sort(numbers); + for (int e : numbers) { + if (e > 0) { + break; + } + ++zeroCount; + } + + int p = zeroCount, q = p + 1, n = numbers.length; + int gap = 0; + while (q < n) { + if (numbers[p] == numbers[q]) { + return false; + } + gap += (numbers[q] - numbers[p] - 1); + p = q; + ++q; + } + return gap <= zeroCount; + + } +} \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/README.md" new file mode 100644 index 00000000..b3b17870 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/README.md" @@ -0,0 +1,69 @@ +# 剑指offer + +| Title | 学习地址 | +|---|---| +| 01、找出数组中重复的数字 | [Find Duplication In Array](03_01_DuplicationInArray) | +| 02、找出数组中重复的数字II | [Find Duplication In Array II](03_02_DuplicationInArrayNoEdit) | +| 03、二维数组中的查找 | [Find In Partially Sorted Matrix](04_FindInPartiallySortedMatrix) | +| 04、将字符串中的所有空格替换为%20 | [Replace Spaces](05_ReplaceSpaces) | +| 05、从尾到头打印链表 | [Print List In Reversed Order](06_PrintListInReversedOrder) | +| 06、重建二叉树 | [Construct Binary Tree](07_ConstructBinaryTree) | +| 07、二叉树的下一个结点 | [Next Node In Binary Trees](08_NextNodeInBinaryTrees) | +| 08、用两个栈实现队列 | [Queue With Two Stacks](09_01_QueueWithTwoStacks) | +| 09、用两个队列实现栈 | [Stack With Two Queues](09_02_StackWithTwoQueues) | +| 10、斐波那契数列 | [Fibonacci](10_01_Fibonacci) | +| 11、跳台阶 | [Jump Floor](10_02_JumpFloor) | +| 12、变态跳台阶 | [Jump Floor II](10_03_JumpFloorII) | +| 13、矩形覆盖 | [Rect Cover](10_04_RectCover) | +| 14、旋转数组的最小数字 | [Min Number In Rotated Array](11_MinNumberInRotatedArray) | +| 15、矩阵中的路径 | [String Path In Matrix](12_StringPathInMatrix) | +| 16、机器人的移动范围 | [Robot Move](13_RobotMove) | +| 17、剪绳子求最大乘积 | [Cutting Rope](14_CuttingRope) | +| 18、二进制中 1 的个数 | [Number Of 1 In Binary](15_NumberOf1InBinary) | +| 19、数值的整数次方 | [Power](16_Power) | +| 20、打印从 1 到最大的 n 位数 | [Print 1 To Max Of N Digits](17_Print1ToMaxOfNDigits) | +| 21、在O(1)时间内删除链表节点 | [Delete Node In List](18_01_DeleteNodeInList) | +| 22、删除链表中重复的节点 | [Delete Duplicated Node](18_02_DeleteDuplicatedNode) | +| 23、正则表达式匹配 | [Regular Expressions Matching](19_RegularExpressionsMatching) | +| 24、表示数值的字符串 | [Numeric Strings](20_NumericStrings) | +| 25、调整数组顺序使奇数位于偶数前面 | [Reorder Array](21_ReorderArray) | +| 26、链表中倒数第k个结点 | [Kth Node From End](22_KthNodeFromEnd) | +| 27、链表中环的入口结点 | [Entry Node In List Loop](23_EntryNodeInListLoop) | +| 28、反转链表 | [Reverse List](24_ReverseList) | +| 29、合并两个排序的链表 | [Merge Sorted Lists](25_MergeSortedLists) | +| 30、树的子结构 | [Substructure In Tree](26_SubstructureInTree) | +| 31、二叉树的镜像 | [Mirror Of Binary Tree](27_MirrorOfBinaryTree) | +| 32、对称的二叉树 | [Symmetrical Binary Tree](28_SymmetricalBinaryTree) | +| 33、顺时针打印矩阵 | [Print Matrix](29_PrintMatrix) | +| 34、包含min函数的栈 | [Min In Stack](30_MinInStack) | +| 35、栈的压入、弹出序列 | [Stack Push Pop Order](31_StackPushPopOrder) | +| 36、不分行从上到下打印二叉树 | [Print Tree From Top To Bottom](32_01_PrintTreeFromTopToBottom) | +| 37、把二叉树打印成多行 | [Print Trees In Lines](32_02_PrintTreesInLines) | +| 38、按之字形打印二叉树 | [Print Trees In Zigzag](32_03_PrintTreesInZigzag) | +| 39、二叉搜索树的后序遍历序列 | [Squence Of BST](33_SquenceOfBST) | +| 40、二叉树中和为某一值的路径 | [Path In Tree](34_PathInTree) | +| 41、复杂链表的复制 | [Copy Complex List](35_CopyComplexList) | +| 42、二叉搜索树与双向链表 | [Convert Binary Search Tree](36_ConvertBinarySearchTree) | +| 43、数组中出现次数超过一半的数字 | [More Than Half Number](39_MoreThanHalfNumber) | +| 44、获取数组中最小的k个数 | [K Least Numbers](40_KLeastNumbers) | +| 45、数据流中的中位数 | [Stream Median](41_StreamMedian) | +| 46、连续子数组的最大和 | [Greatest Sum Of Subarrays](42_GreatestSumOfSubarrays) | +| 47、数字序列中某一位的数字 | [Digits In Sequence](44_DigitsInSequence) | +| 48、把数组排成最小的数 | [Sort Array For Min Number](45_SortArrayForMinNumber) | +| 49、把数字翻译成字符串 | [Translate Numbers To Strings](46_TranslateNumbersToStrings) | +| 50、礼物的最大价值 | [Max Value Of Gifts](47_MaxValueOfGifts) | +| 51、最长不含重复字符的子字符串 | [Longest Substring Without Dup](48_LongestSubstringWithoutDup) | +| 52、两个链表的第一个公共结点 | [First Common Nodes In Lists](52_FirstCommonNodesInLists) | +| 53、数字在排序数组中出现的次数 | [Number Of K](53_01_NumberOfK) | +| 54、0到n-1中缺失的数字| [Missing Number](53_02_MissingNumber) | +| 55、数组中数值和下标相等的元素 | [Integer Identical To Index](53_03_IntegerIdenticalToIndex) | +| 56、二叉树的深度 | [Tree Depth](55_01_TreeDepth) | +| 57、平衡二叉树 | [Balanced Binary Tree](55_02_BalancedBinaryTree) | +| 58、数组中只出现一次的两个数字 | [Numbers Appear Once](56_01_NumbersAppearOnce) | +| 59、数组中唯一只出现一次的数字 | [Number Appearing Once](56_02_NumberAppearingOnce) | +| 60、和为S的两个数字 | [Two Numbers With Sum](57_01_TwoNumbersWithSum) | +| 61、和为S的连续正数序列 | [Continuous Squence With Sum](57_02_ContinuousSquenceWithSum) | +| 62、翻转单词顺序 | [Reverse Words In Sentence](58_01_ReverseWordsInSentence) | +| 63、左旋转字符串 | [Left Rotate String](58_02_LeftRotateString) | +| 64、滑动窗口的最大值 | [Max In Sliding Window](59_01_MaxInSlidingWindow) | +| 65、扑克牌的顺子 | [Continous Cards](61_ContinousCards) | diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/\345\211\221\346\214\207offer.pdf" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/\345\211\221\346\214\207offer.pdf" new file mode 100644 index 00000000..fabf08ab Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\211\221\346\214\207offer/\345\211\221\346\214\207offer.pdf" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/1" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/1" new file mode 100644 index 00000000..0ba361ad --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/1" @@ -0,0 +1,6 @@ +志洋/展升/张冲 300 +云平/建华 300 +毕总 300 +铭泽/赵倩 400 +良许/四哥/骆总 400 +老婆/谷总 300 diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/BAT\351\235\242\350\257\225\345\270\270\351\227\25680\351\242\230.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/BAT\351\235\242\350\257\225\345\270\270\351\227\25680\351\242\230.zip" new file mode 100644 index 00000000..22b5c429 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/BAT\351\235\242\350\257\225\345\270\270\351\227\25680\351\242\230.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/.DS_Store" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/.DS_Store" new file mode 100644 index 00000000..5008ddfc Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/.DS_Store" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/C++\351\235\242\350\257\225\351\242\230\351\233\206\351\224\246300\351\241\265.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/C++\351\235\242\350\257\225\351\242\230\351\233\206\351\224\246300\351\241\265.zip" new file mode 100644 index 00000000..2b112217 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/C++\351\235\242\350\257\225\351\242\230\351\233\206\351\224\246300\351\241\265.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/Oracle.10g.PlSQL.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/Oracle.10g.PlSQL.zip" new file mode 100644 index 00000000..3d551f83 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/Oracle.10g.PlSQL.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/README.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/README.md" new file mode 100644 index 00000000..6e9ae188 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/README.md" @@ -0,0 +1,13 @@ + +一、推荐先看“王牌7 C++常见面试题.pdf” + +二、并重的看“Oracle.10g.PlSQL.pdf”,里面就是SQL(数据库)的相关知识。建议跳读(从看得懂的数据库代码地方开始最好了!):1、重点看看查询的嵌套,即子查询的应用;2、对创建的视图的数据排序,DESC(逆序)等。注意: + +3、连接部分,左外连接,右外连接;4、前三种范式的定义,自己可以简化定义有助于记忆; +5、若是感兴趣,可以多看看里面的设置主键呀,设置外键啊什么的。 + +> 一二部做完后基本上就可以从容面对笔试了,一般公司的面试可以处理得来## + +三、“百问百答.chm”这个里面的题目是个大公司的考题精选,里面被问到最多的问题是链表的回指。 + +最后,“千方百计c语言部分500题.doc” 直接秒杀中小型公司。 \ No newline at end of file diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\344\270\264\347\225\214\345\214\272.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\344\270\264\347\225\214\345\214\272.zip" new file mode 100644 index 00000000..15e1d20d Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\344\270\264\347\225\214\345\214\272.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\345\215\203\346\226\271\347\231\276\350\256\241C\350\257\255\350\250\200\351\203\250\345\210\206(500\351\242\230).zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\345\215\203\346\226\271\347\231\276\350\256\241C\350\257\255\350\250\200\351\203\250\345\210\206(500\351\242\230).zip" new file mode 100644 index 00000000..0669ae54 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\345\215\203\346\226\271\347\231\276\350\256\241C\350\257\255\350\250\200\351\203\250\345\210\206(500\351\242\230).zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\346\231\272\345\212\233\351\242\230\346\225\264\347\220\206.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\346\231\272\345\212\233\351\242\230\346\225\264\347\220\206.zip" new file mode 100644 index 00000000..7d4b9aab Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\346\231\272\345\212\233\351\242\230\346\225\264\347\220\206.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\347\216\213\347\211\2147 C++\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\347\216\213\347\211\2147 C++\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.zip" new file mode 100644 index 00000000..eb1f74e7 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\347\216\213\347\211\2147 C++\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\347\231\276\351\227\256\347\231\276\347\255\224.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\347\231\276\351\227\256\347\231\276\347\255\224.zip" new file mode 100644 index 00000000..f4a36aff Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\347\231\276\351\227\256\347\231\276\347\255\224.zip" differ diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/``\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214``.jpg" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/``\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214``.jpg" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\351\235\242\350\257\225\347\254\224\350\257\225.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\351\235\242\350\257\225\347\254\224\350\257\225.zip" new file mode 100644 index 00000000..5bca330a Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\351\235\242\350\257\225\347\254\224\350\257\225.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\351\235\242\350\257\225\351\242\230\345\217\212\345\237\272\346\234\254\347\237\245\350\257\206.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\351\235\242\350\257\225\351\242\230\345\217\212\345\237\272\346\234\254\347\237\245\350\257\206.zip" new file mode 100644 index 00000000..7deccf4d Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/C&C++/\351\235\242\350\257\225\351\242\230\345\217\212\345\237\272\346\234\254\347\237\245\350\257\206.zip" differ diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/ActiveMQ\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/ActiveMQ\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/ActiveMQ\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/ActiveMQ\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Dubbo\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Dubbo\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Dubbo\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Dubbo\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Dubbo\351\235\242\350\257\225\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Dubbo\351\235\242\350\257\225\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Dubbo\351\235\242\350\257\225\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Dubbo\351\235\242\350\257\225\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/JAVA \351\235\242\350\257\225\351\242\230 18 \347\257\207.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/JAVA \351\235\242\350\257\225\351\242\230 18 \347\257\207.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/JAVA \351\235\242\350\257\225\351\242\230 18 \347\257\207.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/JAVA \351\235\242\350\257\225\351\242\230 18 \347\257\207.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/JVM\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/JVM\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/JVM\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/JVM\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Java\345\237\272\347\241\200\351\235\242\350\257\225\351\242\230.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Java\345\237\272\347\241\200\351\235\242\350\257\225\351\242\230.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Java\345\237\272\347\241\200\351\235\242\350\257\225\351\242\230.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Java\345\237\272\347\241\200\351\235\242\350\257\225\351\242\230.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Java\345\271\266\345\217\221\344\275\223\347\263\273\347\237\245\350\257\206\345\257\274\345\233\276\347\254\224\350\256\260.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Java\345\271\266\345\217\221\344\275\223\347\263\273\347\237\245\350\257\206\345\257\274\345\233\276\347\254\224\350\256\260.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Java\345\271\266\345\217\221\344\275\223\347\263\273\347\237\245\350\257\206\345\257\274\345\233\276\347\254\224\350\256\260.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Java\345\271\266\345\217\221\344\275\223\347\263\273\347\237\245\350\257\206\345\257\274\345\233\276\347\254\224\350\256\260.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Java\346\240\270\345\277\203\347\237\245\350\257\206\347\202\271\346\225\264\347\220\206.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Java\346\240\270\345\277\203\347\237\245\350\257\206\347\202\271\346\225\264\347\220\206.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Java\346\240\270\345\277\203\347\237\245\350\257\206\347\202\271\346\225\264\347\220\206.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Java\346\240\270\345\277\203\347\237\245\350\257\206\347\202\271\346\225\264\347\220\206.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Kafka\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Kafka\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Kafka\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Kafka\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Linux\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Linux\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Linux\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Linux\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/MongoDB\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/MongoDB\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/MongoDB\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/MongoDB\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/MyBatis\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/MyBatis\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/MyBatis\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/MyBatis\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/MySQL55\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/MySQL55\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/MySQL55\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/MySQL55\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/MySQL\346\200\247\350\203\275\344\274\230\345\214\226\347\232\20421\344\270\252\346\234\200\344\275\263\345\256\236\350\267\265.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/MySQL\346\200\247\350\203\275\344\274\230\345\214\226\347\232\20421\344\270\252\346\234\200\344\275\263\345\256\236\350\267\265.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/MySQL\346\200\247\350\203\275\344\274\230\345\214\226\347\232\20421\344\270\252\346\234\200\344\275\263\345\256\236\350\267\265.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/MySQL\346\200\247\350\203\275\344\274\230\345\214\226\347\232\20421\344\270\252\346\234\200\344\275\263\345\256\236\350\267\265.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Netty\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Netty\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Netty\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Netty\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Nginx\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Nginx\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Nginx\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Nginx\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/RabbitMQ\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/RabbitMQ\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/RabbitMQ\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/RabbitMQ\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Redis\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Redis\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Redis\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Redis\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/SQL\344\274\230\345\214\226\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/SQL\344\274\230\345\214\226\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/SQL\344\274\230\345\214\226\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/SQL\344\274\230\345\214\226\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/SpringBoot\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/SpringBoot\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/SpringBoot\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/SpringBoot\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/SpringCloud\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/SpringCloud\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/SpringCloud\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/SpringCloud\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/SpringMVC\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/SpringMVC\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/SpringMVC\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/SpringMVC\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Spring\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Spring\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Spring\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Spring\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Tomcat\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Tomcat\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/Tomcat\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/Tomcat\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/java\345\220\216\347\253\257\351\235\242\350\257\225\351\242\230\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/java\345\220\216\347\253\257\351\235\242\350\257\225\351\242\230\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/java\345\220\216\347\253\257\351\235\242\350\257\225\351\242\230\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/java\345\220\216\347\253\257\351\235\242\350\257\225\351\242\230\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/memcached\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/memcached\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/memcached\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/memcached\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/mysql\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/mysql\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/mysql\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/mysql\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/redis\351\235\242\350\257\225\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/redis\351\235\242\350\257\225\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/redis\351\235\242\350\257\225\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/redis\351\235\242\350\257\225\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/zookeeper\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/zookeeper\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/zookeeper\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/zookeeper\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\345\244\232\347\272\277\347\250\213\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\345\244\232\347\272\277\347\250\213\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\345\244\232\347\272\277\347\250\213\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\345\244\232\347\272\277\347\250\213\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\345\271\266\345\217\221\347\274\226\347\250\213\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\345\271\266\345\217\221\347\274\226\347\250\213\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\345\271\266\345\217\221\347\274\226\347\250\213\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\345\271\266\345\217\221\347\274\226\347\250\213\345\217\212\347\255\224\346\241\210\357\274\210\344\270\212\357\274\211.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\345\271\266\345\217\221\347\274\226\347\250\213\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\345\271\266\345\217\221\347\274\226\347\250\213\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\345\271\266\345\217\221\347\274\226\347\250\213\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\345\271\266\345\217\221\347\274\226\347\250\213\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\345\274\200\346\272\220\346\241\206\346\236\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\345\274\200\346\272\220\346\241\206\346\236\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\345\274\200\346\272\220\346\241\206\346\236\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\345\274\200\346\272\220\346\241\206\346\236\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\345\276\256\346\234\215\345\212\241\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\345\276\256\346\234\215\345\212\241\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\345\276\256\346\234\215\345\212\241\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\345\276\256\346\234\215\345\212\241\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\346\225\260\346\215\256\345\272\223\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\346\225\260\346\215\256\345\272\223\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\346\225\260\346\215\256\345\272\223\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\346\225\260\346\215\256\345\272\223\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\346\266\210\346\201\257\344\270\255\351\227\264\344\273\266\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" new file mode 100644 index 00000000..896d2cf0 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" differ diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\350\256\276\350\256\241\346\250\241\345\274\217\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\350\256\276\350\256\241\346\250\241\345\274\217\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\350\256\276\350\256\241\346\250\241\345\274\217\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\350\256\276\350\256\241\346\250\241\345\274\217\351\235\242\350\257\225\344\270\223\351\242\230\345\217\212\347\255\224\346\241\210.zip" diff --git "a/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\351\235\242\350\257\225\345\277\205\345\244\207\344\271\213\344\271\220\350\247\202\351\224\201\344\270\216\346\202\262\350\247\202\351\224\201.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\351\235\242\350\257\225\345\277\205\345\244\207\344\271\213\344\271\220\350\247\202\351\224\201\344\270\216\346\202\262\350\247\202\351\224\201.zip" similarity index 100% rename from "\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273 100 \347\257\207/\351\235\242\350\257\225\345\277\205\345\244\207\344\271\213\344\271\220\350\247\202\351\224\201\344\270\216\346\202\262\350\247\202\351\224\201.zip" rename to "\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Java/\351\235\242\350\257\225\345\277\205\345\244\207\344\271\213\344\271\220\350\247\202\351\224\201\344\270\216\346\202\262\350\247\202\351\224\201.zip" diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/MySQL\351\235\242\350\257\225\351\242\230\357\274\210\345\220\253\347\255\224\346\241\210\357\274\211@www.java1234.com.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/MySQL\351\235\242\350\257\225\351\242\230\357\274\210\345\220\253\347\255\224\346\241\210\357\274\211@www.java1234.com.zip" new file mode 100644 index 00000000..b2ef5186 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/MySQL\351\235\242\350\257\225\351\242\230\357\274\210\345\220\253\347\255\224\346\241\210\357\274\211@www.java1234.com.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/\345\217\262\344\270\212\346\234\200\350\257\246\347\273\206\347\232\204\344\270\200\347\272\277\345\244\247\345\216\202Mysql\351\235\242\350\257\225\351\242\230\350\257\246\350\247\243.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/\345\217\262\344\270\212\346\234\200\350\257\246\347\273\206\347\232\204\344\270\200\347\272\277\345\244\247\345\216\202Mysql\351\235\242\350\257\225\351\242\230\350\257\246\350\247\243.zip" new file mode 100644 index 00000000..3616f231 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/\345\217\262\344\270\212\346\234\200\350\257\246\347\273\206\347\232\204\344\270\200\347\272\277\345\244\247\345\216\202Mysql\351\235\242\350\257\225\351\242\230\350\257\246\350\247\243.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/\345\274\272\347\203\210\346\216\250\350\215\220MySQL\351\235\242\350\257\225\351\242\230\345\222\214\347\255\224\346\241\210\357\274\210\344\273\205\344\276\233\345\217\202\350\200\203\357\274\211.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/\345\274\272\347\203\210\346\216\250\350\215\220MySQL\351\235\242\350\257\225\351\242\230\345\222\214\347\255\224\346\241\210\357\274\210\344\273\205\344\276\233\345\217\202\350\200\203\357\274\211.zip" new file mode 100644 index 00000000..ea8d74ff Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/\345\274\272\347\203\210\346\216\250\350\215\220MySQL\351\235\242\350\257\225\351\242\230\345\222\214\347\255\224\346\241\210\357\274\210\344\273\205\344\276\233\345\217\202\350\200\203\357\274\211.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" new file mode 100644 index 00000000..896d2cf0 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Mysql/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/.DS_Store" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/.DS_Store" new file mode 100644 index 00000000..5008ddfc Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/.DS_Store" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/Python\346\240\270\345\277\203\347\274\226\347\250\213\347\254\2543\347\211\210_\344\270\255\346\226\207&\350\213\261\346\226\207&\351\232\217\344\271\246\346\272\220\347\240\201.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/Python\346\240\270\345\277\203\347\274\226\347\250\213\347\254\2543\347\211\210_\344\270\255\346\226\207&\350\213\261\346\226\207&\351\232\217\344\271\246\346\272\220\347\240\201.zip" new file mode 100644 index 00000000..c6838598 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/Python\346\240\270\345\277\203\347\274\226\347\250\213\347\254\2543\347\211\210_\344\270\255\346\226\207&\350\213\261\346\226\207&\351\232\217\344\271\246\346\272\220\347\240\201.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\345\205\250\347\275\221\346\234\200\347\201\253\347\232\204100\351\201\223 Python \351\235\242\350\257\225\351\242\230.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\345\205\250\347\275\221\346\234\200\347\201\253\347\232\204100\351\201\223 Python \351\235\242\350\257\225\351\242\230.zip" new file mode 100644 index 00000000..bb49527d Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\345\205\250\347\275\221\346\234\200\347\201\253\347\232\204100\351\201\223 Python \351\235\242\350\257\225\351\242\230.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\347\244\276\346\213\233110\351\201\223Python\351\235\242\350\257\225\351\242\230\351\233\206\351\224\246.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\347\244\276\346\213\233110\351\201\223Python\351\235\242\350\257\225\351\242\230\351\233\206\351\224\246.zip" new file mode 100644 index 00000000..c6a4bb2e Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\347\244\276\346\213\233110\351\201\223Python\351\235\242\350\257\225\351\242\230\351\233\206\351\224\246.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\347\247\213\346\213\23350\351\201\223Python\351\235\242\350\257\225\351\242\230\351\233\206\351\224\246.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\347\247\213\346\213\23350\351\201\223Python\351\235\242\350\257\225\351\242\230\351\233\206\351\224\246.zip" new file mode 100644 index 00000000..3f4dffe1 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\347\247\213\346\213\23350\351\201\223Python\351\235\242\350\257\225\351\242\230\351\233\206\351\224\246.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" new file mode 100644 index 00000000..896d2cf0 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/Python/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/.DS_Store" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/.DS_Store" new file mode 100644 index 00000000..5008ddfc Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/.DS_Store" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/2020\345\214\227\344\272\254+\345\244\251\346\264\245\351\235\242\350\257\225\351\227\256\351\242\230\346\261\207\346\200\273.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/2020\345\214\227\344\272\254+\345\244\251\346\264\245\351\235\242\350\257\225\351\227\256\351\242\230\346\261\207\346\200\273.zip" new file mode 100644 index 00000000..88179bc4 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/2020\345\214\227\344\272\254+\345\244\251\346\264\245\351\235\242\350\257\225\351\227\256\351\242\230\346\261\207\346\200\273.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/\345\246\202\344\275\225\345\234\250\345\244\247\345\216\202\350\277\233\350\241\214\345\211\215\347\253\257\345\274\200\345\217\221\357\274\210\350\247\204\350\214\203\346\211\213\345\206\214\357\274\211.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/\345\246\202\344\275\225\345\234\250\345\244\247\345\216\202\350\277\233\350\241\214\345\211\215\347\253\257\345\274\200\345\217\221\357\274\210\350\247\204\350\214\203\346\211\213\345\206\214\357\274\211.zip" new file mode 100644 index 00000000..1b792a5e Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/\345\246\202\344\275\225\345\234\250\345\244\247\345\216\202\350\277\233\350\241\214\345\211\215\347\253\257\345\274\200\345\217\221\357\274\210\350\247\204\350\214\203\346\211\213\345\206\214\357\274\211.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" new file mode 100644 index 00000000..896d2cf0 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\345\211\215\347\253\257/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/1000\351\201\223Java\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/1000\351\201\223Java\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230.zip" new file mode 100644 index 00000000..0a8187a4 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/1000\351\201\223Java\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/Java\346\236\266\346\236\204\346\212\200\350\203\275\345\233\276\350\260\261\345\222\214\351\235\242\350\257\225130\351\242\230.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/Java\346\236\266\346\236\204\346\212\200\350\203\275\345\233\276\350\260\261\345\222\214\351\235\242\350\257\225130\351\242\230.zip" new file mode 100644 index 00000000..9365c163 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/Java\346\236\266\346\236\204\346\212\200\350\203\275\345\233\276\350\260\261\345\222\214\351\235\242\350\257\225130\351\242\230.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/\346\234\200\345\205\250\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225130\351\242\230.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/\346\234\200\345\205\250\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225130\351\242\230.zip" new file mode 100644 index 00000000..a1a0c854 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/\346\234\200\345\205\250\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225130\351\242\230.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" new file mode 100644 index 00000000..896d2cf0 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\346\236\266\346\236\204\345\270\210\351\235\242\350\257\225\351\242\230/\350\247\243\345\216\213\345\257\206\347\240\201\345\234\250\350\277\231\351\207\214/\350\247\243\345\216\213\345\257\206\347\240\201\350\277\231\351\207\214 .jpg" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\351\253\230\345\271\266\345\217\221\344\270\223\346\240\217.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\351\253\230\345\271\266\345\217\221\344\270\223\346\240\217.zip" new file mode 100644 index 00000000..7b623b86 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\244\247\345\216\202\351\235\242\347\273\217\346\261\207\346\200\273100\347\257\207/\351\253\230\345\271\266\345\217\221\344\270\223\346\240\217.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\270\270\347\224\250\346\216\250\350\215\220\347\256\227\346\263\225.pdf" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\270\270\347\224\250\346\216\250\350\215\220\347\256\227\346\263\225.pdf" new file mode 100644 index 00000000..ca386593 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\270\270\347\224\250\346\216\250\350\215\220\347\256\227\346\263\225.pdf" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\345\276\256\350\275\257\351\235\242\350\257\225100\351\242\230\347\263\273\345\210\227.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\276\256\350\275\257\351\235\242\350\257\225100\351\242\230\347\263\273\345\210\227.zip" new file mode 100644 index 00000000..5daa2616 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\345\276\256\350\275\257\351\235\242\350\257\225100\351\242\230\347\263\273\345\210\227.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\345\206\205\345\255\230\347\256\241\347\220\206.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\345\206\205\345\255\230\347\256\241\347\220\206.md" new file mode 100644 index 00000000..b0518efd --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\345\206\205\345\255\230\347\256\241\347\220\206.md" @@ -0,0 +1,144 @@ + +* [虚拟内存](#虚拟内存) +* [分页系统地址映射](#分页系统地址映射) +* [页面置换算法](#页面置换算法) + * [1. 最佳](#1-最佳) + * [2. 最近最久未使用](#2-最近最久未使用) + * [3. 最近未使用](#3-最近未使用) + * [4. 先进先出](#4-先进先出) + * [5. 第二次机会算法](#5-第二次机会算法) + * [6. 时钟](#6-时钟) +* [分段](#分段) +* [段页式](#段页式) +* [分页与分段的比较](#分页与分段的比较) + + + +# 虚拟内存 + +虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。 + +为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。 + +从上面的描述中可以看出,虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行,这使得有限的内存运行大程序成为可能。例如有一台计算机可以产生 16 位地址,那么一个程序的地址空间范围是 0\~64K。该计算机只有 32KB 的物理内存,虚拟内存技术允许该计算机运行一个 64K 大小的程序。 + +

+ +# 分页系统地址映射 + +内存管理单元(MMU)管理着地址空间和物理内存的转换,其中的页表(Page table)存储着页(程序地址空间)和页框(物理内存空间)的映射表。 + +一个虚拟地址分成两个部分,一部分存储页面号,一部分存储偏移量。 + +下图的页表存放着 16 个页,这 16 个页需要用 4 个比特位来进行索引定位。例如对于虚拟地址(0010 000000000100),前 4 位是存储页面号 2,读取表项内容为(110 1),页表项最后一位表示是否存在于内存中,1 表示存在。后 12 位存储偏移量。这个页对应的页框的地址为 (110 000000000100)。 + +

+ +# 页面置换算法 + +在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。 + +页面置换算法和缓存淘汰策略类似,可以将内存看成磁盘的缓存。在缓存系统中,缓存的大小有限,当有新的缓存到达时,需要淘汰一部分已经存在的缓存,这样才有空间存放新的缓存数据。 + +页面置换算法的主要目标是使页面置换频率最低(也可以说缺页率最低)。 + +## 1. 最佳 + +> OPT, Optimal replacement algorithm + +所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。 + +是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。 + +举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列: + +```html +7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 +``` + +开始运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。 + +## 2. 最近最久未使用 + +> LRU, Least Recently Used + +虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。 + +为了实现 LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的。 + +因为每次访问都需要更新链表,因此这种方式实现的 LRU 代价很高。 + +```html +4,7,0,7,1,0,1,2,1,2,6 +``` + +

+## 3. 最近未使用 + +> NRU, Not Recently Used + +每个页面都有两个状态位:R 与 M,当页面被访问时设置页面的 R=1,当页面被修改时设置 M=1。其中 R 位会定时被清零。可以将页面分成以下四类: + +- R=0,M=0 +- R=0,M=1 +- R=1,M=0 +- R=1,M=1 + +当发生缺页中断时,NRU 算法随机地从类编号最小的非空类中挑选一个页面将它换出。 + +NRU 优先换出已经被修改的脏页面(R=0,M=1),而不是被频繁使用的干净页面(R=1,M=0)。 + +## 4. 先进先出 + +> FIFO, First In First Out + +选择换出的页面是最先进入的页面。 + +该算法会将那些经常被访问的页面换出,导致缺页率升高。 + +## 5. 第二次机会算法 + +FIFO 算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改: + +当页面被访问 (读或写) 时设置该页面的 R 位为 1。需要替换的时候,检查最老页面的 R 位。如果 R 位是 0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是 1,就将 R 位清 0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索。 + +

+ +## 6. 时钟 + +> Clock + +第二次机会算法需要在链表中移动页面,降低了效率。时钟算法使用环形链表将页面连接起来,再使用一个指针指向最老的页面。 + +

+ +# 分段 + +虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,每一页再与内存进行映射。 + +下图为一个编译器在编译过程中建立的多个表,有 4 个表是动态增长的,如果使用分页系统的一维地址空间,动态增长的特点会导致覆盖问题的出现。 + +

+ +分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长。 + +

+ +# 段页式 + +程序的地址空间划分成多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。 + +# 分页与分段的比较 + +- 对程序员的透明性:分页透明,但是分段需要程序员显式划分每个段。 + +- 地址空间的维度:分页是一维地址空间,分段是二维的。 + +- 大小是否可以改变:页的大小不可变,段的大小可以动态改变。 + +- 出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。 + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\346\255\273\351\224\201.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\346\255\273\351\224\201.md" new file mode 100644 index 00000000..1346f087 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\346\255\273\351\224\201.md" @@ -0,0 +1,149 @@ + +* [必要条件](#必要条件) +* [处理方法](#处理方法) +* [鸵鸟策略](#鸵鸟策略) +* [死锁检测与死锁恢复](#死锁检测与死锁恢复) + * [1. 每种类型一个资源的死锁检测](#1-每种类型一个资源的死锁检测) + * [2. 每种类型多个资源的死锁检测](#2-每种类型多个资源的死锁检测) + * [3. 死锁恢复](#3-死锁恢复) +* [死锁预防](#死锁预防) + * [1. 破坏互斥条件](#1-破坏互斥条件) + * [2. 破坏占有和等待条件](#2-破坏占有和等待条件) + * [3. 破坏不可抢占条件](#3-破坏不可抢占条件) + * [4. 破坏环路等待](#4-破坏环路等待) +* [死锁避免](#死锁避免) + * [1. 安全状态](#1-安全状态) + * [2. 单个资源的银行家算法](#2-单个资源的银行家算法) + * [3. 多个资源的银行家算法](#3-多个资源的银行家算法) + + + +# 必要条件 + +

+ +- 互斥:每个资源要么已经分配给了一个进程,要么就是可用的。 +- 占有和等待:已经得到了某个资源的进程可以再请求新的资源。 +- 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。 +- 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。 + +# 处理方法 + +主要有以下四种方法: + +- 鸵鸟策略 +- 死锁检测与死锁恢复 +- 死锁预防 +- 死锁避免 + +# 鸵鸟策略 + +把头埋在沙子里,假装根本没发生问题。 + +因为解决死锁问题的代价很高,因此鸵鸟策略这种不采取任务措施的方案会获得更高的性能。 + +当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。 + +大多数操作系统,包括 Unix,Linux 和 Windows,处理死锁问题的办法仅仅是忽略它。 + +# 死锁检测与死锁恢复 + +不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。 + +## 1. 每种类型一个资源的死锁检测 + +

+ +上图为资源分配图,其中方框表示资源,圆圈表示进程。资源指向进程表示该资源已经分配给该进程,进程指向资源表示进程请求获取该资源。 + +图 a 可以抽取出环,如图 b,它满足了环路等待条件,因此会发生死锁。 + +每种类型一个资源的死锁检测算法是通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。 + +## 2. 每种类型多个资源的死锁检测 + +

+ +上图中,有三个进程四个资源,每个数据代表的含义如下: + +- E 向量:资源总量 +- A 向量:资源剩余量 +- C 矩阵:每个进程所拥有的资源数量,每一行都代表一个进程拥有资源的数量 +- R 矩阵:每个进程请求的资源数量 + +进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,让 P3 执行,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。P2 可以执行,执行后释放 P2 拥有的资源,A = (4 2 2 1) 。P1 也可以执行。所有进程都可以顺利执行,没有死锁。 + +算法总结如下: + +每个进程最开始时都不被标记,执行过程有可能被标记。当算法结束时,任何没有被标记的进程都是死锁进程。 + +1. 寻找一个没有标记的进程 Pi,它所请求的资源小于等于 A。 +2. 如果找到了这样一个进程,那么将 C 矩阵的第 i 行向量加到 A 中,标记该进程,并转回 1。 +3. 如果没有这样一个进程,算法终止。 + +## 3. 死锁恢复 + +- 利用抢占恢复 +- 利用回滚恢复 +- 通过杀死进程恢复 + +# 死锁预防 + +在程序运行之前预防发生死锁。 + +## 1. 破坏互斥条件 + +例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。 + +## 2. 破坏占有和等待条件 + +一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。 + +## 3. 破坏不可抢占条件 + +## 4. 破坏环路等待 + +给资源统一编号,进程只能按编号顺序来请求资源。 + +# 死锁避免 + +在程序运行时避免发生死锁。 + +## 1. 安全状态 + +

+ +图 a 的第二列 Has 表示已拥有的资源数,第三列 Max 表示总共需要的资源数,Free 表示还有可以使用的资源数。从图 a 开始出发,先让 B 拥有所需的所有资源(图 b),运行结束后释放 B,此时 Free 变为 5(图 c);接着以同样的方式运行 C 和 A,使得所有进程都能成功运行,因此可以称图 a 所示的状态时安全的。 + +定义:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。 + +安全状态的检测与死锁的检测类似,因为安全状态必须要求不能发生死锁。下面的银行家算法与死锁检测算法非常类似,可以结合着做参考对比。 + +## 2. 单个资源的银行家算法 + +一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。 + +

+ +上图 c 为不安全状态,因此算法会拒绝之前的请求,从而避免进入图 c 中的状态。 + +## 3. 多个资源的银行家算法 + +

+ +上图中有五个进程,四个资源。左边的图表示已经分配的资源,右边的图表示还需要分配的资源。最右边的 E、P 以及 A 分别表示:总资源、已分配资源以及可用资源,注意这三个为向量,而不是具体数值,例如 A=(1020),表示 4 个资源分别还剩下 1/0/2/0。 + +检查一个状态是否安全的算法如下: + +- 查找右边的矩阵是否存在一行小于等于向量 A。如果不存在这样的行,那么系统将会发生死锁,状态是不安全的。 +- 假若找到这样一行,将该进程标记为终止,并将其已分配资源加到 A 中。 +- 重复以上两步,直到所有进程都标记为终止,则状态时安全的。 + +如果一个状态不是安全的,需要拒绝进入这个状态。 + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\347\243\201\347\233\230\350\260\203\345\272\246.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\347\243\201\347\233\230\350\260\203\345\272\246.md" new file mode 100644 index 00000000..6a91822b --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\347\243\201\347\233\230\350\260\203\345\272\246.md" @@ -0,0 +1,65 @@ + +* [磁盘结构](#磁盘结构) +* [磁盘调度算法](#磁盘调度算法) + * [1. 先来先服务](#1-先来先服务) + * [2. 最短寻道时间优先](#2-最短寻道时间优先) + * [3. 电梯算法](#3-电梯算法) + + + +# 磁盘结构 + +- 盘面(Platter):一个磁盘有多个盘面; +- 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道; +- 扇区(Track Sector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理储存单位,目前主要有 512 bytes 与 4 K 两种大小; +- 磁头(Head):与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写); +- 制动手臂(Actuator arm):用于在磁道之间移动磁头; +- 主轴(Spindle):使整个盘面转动。 + +

+ +# 磁盘调度算法 + +读写一个磁盘块的时间的影响因素有: + +- 旋转时间(主轴转动盘面,使得磁头移动到适当的扇区上) +- 寻道时间(制动手臂移动,使得磁头移动到适当的磁道上) +- 实际的数据传输时间 + +其中,寻道时间最长,因此磁盘调度的主要目标是使磁盘的平均寻道时间最短。 + +## 1. 先来先服务 + +> FCFS, First Come First Served + +按照磁盘请求的顺序进行调度。 + +优点是公平和简单。缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。 + +## 2. 最短寻道时间优先 + +> SSTF, Shortest Seek Time First + +优先调度与当前磁头所在磁道距离最近的磁道。 + +虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。具体来说,两端的磁道请求更容易出现饥饿现象。 + +

+ +## 3. 电梯算法 + +> SCAN + +电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。 + +电梯算法(扫描算法)和电梯的运行过程类似,总是按一个方向来进行磁盘调度,直到该方向上没有未完成的磁盘请求,然后改变方向。 + +因为考虑了移动方向,因此所有的磁盘请求都会被满足,解决了 SSTF 的饥饿问题。 + + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\350\277\233\347\250\213\347\256\241\347\220\206.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\350\277\233\347\250\213\347\256\241\347\220\206.md" new file mode 100644 index 00000000..60d4951c --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\350\277\233\347\250\213\347\256\241\347\220\206.md" @@ -0,0 +1,601 @@ + +* [进程与线程](#进程与线程) + * [1. 进程](#1-进程) + * [2. 线程](#2-线程) + * [3. 区别](#3-区别) +* [进程状态的切换](#进程状态的切换) +* [进程调度算法](#进程调度算法) + * [1. 批处理系统](#1-批处理系统) + * [2. 交互式系统](#2-交互式系统) + * [3. 实时系统](#3-实时系统) +* [进程同步](#进程同步) + * [1. 临界区](#1-临界区) + * [2. 同步与互斥](#2-同步与互斥) + * [3. 信号量](#3-信号量) + * [4. 管程](#4-管程) +* [经典同步问题](#经典同步问题) + * [1. 哲学家进餐问题](#1-哲学家进餐问题) + * [2. 读者-写者问题](#2-读者-写者问题) +* [进程通信](#进程通信) + * [1. 管道](#1-管道) + * [2. FIFO](#2-fifo) + * [3. 消息队列](#3-消息队列) + * [4. 信号量](#4-信号量) + * [5. 共享存储](#5-共享存储) + * [6. 套接字](#6-套接字) + + + +# 进程与线程 + +## 1. 进程 + +进程是资源分配的基本单位。 + +进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。 + +下图显示了 4 个程序创建了 4 个进程,这 4 个进程可以并发地执行。 + +

+ +## 2. 线程 + +线程是独立调度的基本单位。 + +一个进程中可以有多个线程,它们共享进程资源。 + +QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。 + +

+ +## 3. 区别 + +Ⅰ 拥有资源 + +进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。 + +Ⅱ 调度 + +线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。 + +Ⅲ 系统开销 + +由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。 + +Ⅳ 通信方面 + +线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。 + +# 进程状态的切换 + +

+ +- 就绪状态(ready):等待被调度 +- 运行状态(running) +- 阻塞状态(waiting):等待资源 + +应该注意以下内容: + +- 只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。 +- 阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU 时间,缺少 CPU 时间会从运行态转换为就绪态。 + +# 进程调度算法 + +不同环境的调度算法目标不同,因此需要针对不同环境来讨论调度算法。 + +## 1. 批处理系统 + +批处理系统没有太多的用户操作,在该系统中,调度算法目标是保证吞吐量和周转时间(从提交到终止的时间)。 + +**1.1 先来先服务 first-come first-serverd(FCFS)** + +非抢占式的调度算法,按照请求的顺序进行调度。 + +有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。 + +**1.2 短作业优先 shortest job first(SJF)** + +非抢占式的调度算法,按估计运行时间最短的顺序进行调度。 + +长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业到来,那么长作业永远得不到调度。 + +**1.3 最短剩余时间优先 shortest remaining time next(SRTN)** + +最短作业优先的抢占式版本,按剩余运行时间的顺序进行调度。 当一个新的作业到达时,其整个运行时间与当前进程的剩余时间作比较。如果新的进程需要的时间更少,则挂起当前进程,运行新的进程。否则新的进程等待。 + +## 2. 交互式系统 + +交互式系统有大量的用户交互操作,在该系统中调度算法的目标是快速地进行响应。 + +**2.1 时间片轮转** + +将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。 + +时间片轮转算法的效率和时间片的大小有很大关系: + +- 因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。 +- 而如果时间片过长,那么实时性就不能得到保证。 + +

+ +**2.2 优先级调度** + +为每个进程分配一个优先级,按优先级进行调度。 + +为了防止低优先级的进程永远等不到调度,可以随着时间的推移增加等待进程的优先级。 + +**2.3 多级反馈队列** + +一个进程需要执行 100 个时间片,如果采用时间片轮转调度算法,那么需要交换 100 次。 + +多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同,例如 1,2,4,8,..。进程在第一个队列没执行完,就会被移到下一个队列。这种方式下,之前的进程只需要交换 7 次。 + +每个队列优先权也不同,最上面的优先权最高。因此只有上一个队列没有进程在排队,才能调度当前队列上的进程。 + +可以将这种调度算法看成是时间片轮转调度算法和优先级调度算法的结合。 + +

+ +## 3. 实时系统 + +实时系统要求一个请求在一个确定时间内得到响应。 + +分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时。 + +# 进程同步 + +## 1. 临界区 + +对临界资源进行访问的那段代码称为临界区。 + +为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查。 + +```html +// entry section +// critical section; +// exit section +``` + +## 2. 同步与互斥 + +- 同步:多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系。 +- 互斥:多个进程在同一时刻只有一个进程能进入临界区。 + +## 3. 信号量 + +信号量(Semaphore)是一个整型变量,可以对其执行 down 和 up 操作,也就是常见的 P 和 V 操作。 + +- **down** : 如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0,进程睡眠,等待信号量大于 0; +- **up** :对信号量执行 +1 操作,唤醒睡眠的进程让其完成 down 操作。 + +down 和 up 操作需要被设计成原语,不可分割,通常的做法是在执行这些操作的时候屏蔽中断。 + +如果信号量的取值只能为 0 或者 1,那么就成为了 **互斥量(Mutex)** ,0 表示临界区已经加锁,1 表示临界区解锁。 + +```c +typedef int semaphore; +semaphore mutex = 1; +void P1() { + down(&mutex); + // 临界区 + up(&mutex); +} + +void P2() { + down(&mutex); + // 临界区 + up(&mutex); +} +``` + + **使用信号量实现生产者-消费者问题**
+ +问题描述:使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品。 + +因为缓冲区属于临界资源,因此需要使用一个互斥量 mutex 来控制对缓冲区的互斥访问。 + +为了同步生产者和消费者的行为,需要记录缓冲区中物品的数量。数量可以使用信号量来进行统计,这里需要使用两个信号量:empty 记录空缓冲区的数量,full 记录满缓冲区的数量。其中,empty 信号量是在生产者进程中使用,当 empty 不为 0 时,生产者才可以放入物品;full 信号量是在消费者进程中使用,当 full 信号量不为 0 时,消费者才可以取走物品。 + +注意,不能先对缓冲区进行加锁,再测试信号量。也就是说,不能先执行 down(mutex) 再执行 down(empty)。如果这么做了,那么可能会出现这种情况:生产者对缓冲区加锁后,执行 down(empty) 操作,发现 empty = 0,此时生产者睡眠。消费者不能进入临界区,因为生产者对缓冲区加锁了,消费者就无法执行 up(empty) 操作,empty 永远都为 0,导致生产者永远等待下,不会释放锁,消费者因此也会永远等待下去。 + +```c +#define N 100 +typedef int semaphore; +semaphore mutex = 1; +semaphore empty = N; +semaphore full = 0; + +void producer() { + while(TRUE) { + int item = produce_item(); + down(&empty); + down(&mutex); + insert_item(item); + up(&mutex); + up(&full); + } +} + +void consumer() { + while(TRUE) { + down(&full); + down(&mutex); + int item = remove_item(); + consume_item(item); + up(&mutex); + up(&empty); + } +} +``` + +## 4. 管程 + +使用信号量机制实现的生产者消费者问题需要客户端代码做很多控制,而管程把控制的代码独立出来,不仅不容易出错,也使得客户端代码调用更容易。 + +c 语言不支持管程,下面的示例代码使用了类 Pascal 语言来描述管程。示例代码的管程提供了 insert() 和 remove() 方法,客户端代码通过调用这两个方法来解决生产者-消费者问题。 + +```pascal +monitor ProducerConsumer + integer i; + condition c; + + procedure insert(); + begin + // ... + end; + + procedure remove(); + begin + // ... + end; +end monitor; +``` + +管程有一个重要特性:在一个时刻只能有一个进程使用管程。进程在无法继续执行的时候不能一直占用管程,否则其它进程永远不能使用管程。 + +管程引入了 **条件变量** 以及相关的操作:**wait()** 和 **signal()** 来实现同步操作。对条件变量执行 wait() 操作会导致调用进程阻塞,把管程让出来给另一个进程持有。signal() 操作用于唤醒被阻塞的进程。 + + **使用管程实现生产者-消费者问题**
+ +```pascal +// 管程 +monitor ProducerConsumer + condition full, empty; + integer count := 0; + condition c; + + procedure insert(item: integer); + begin + if count = N then wait(full); + insert_item(item); + count := count + 1; + if count = 1 then signal(empty); + end; + + function remove: integer; + begin + if count = 0 then wait(empty); + remove = remove_item; + count := count - 1; + if count = N -1 then signal(full); + end; +end monitor; + +// 生产者客户端 +procedure producer +begin + while true do + begin + item = produce_item; + ProducerConsumer.insert(item); + end +end; + +// 消费者客户端 +procedure consumer +begin + while true do + begin + item = ProducerConsumer.remove; + consume_item(item); + end +end; +``` + +# 经典同步问题 + +生产者和消费者问题前面已经讨论过了。 + +## 1. 哲学家进餐问题 + +

+ +五个哲学家围着一张圆桌,每个哲学家面前放着食物。哲学家的生活有两种交替活动:吃饭以及思考。当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子。 + +下面是一种错误的解法,如果所有哲学家同时拿起左手边的筷子,那么所有哲学家都在等待其它哲学家吃完并释放自己手中的筷子,导致死锁。 + +```c +#define N 5 + +void philosopher(int i) { + while(TRUE) { + think(); + take(i); // 拿起左边的筷子 + take((i+1)%N); // 拿起右边的筷子 + eat(); + put(i); + put((i+1)%N); + } +} +``` + +为了防止死锁的发生,可以设置两个条件: + +- 必须同时拿起左右两根筷子; +- 只有在两个邻居都没有进餐的情况下才允许进餐。 + +```c +#define N 5 +#define LEFT (i + N - 1) % N // 左邻居 +#define RIGHT (i + 1) % N // 右邻居 +#define THINKING 0 +#define HUNGRY 1 +#define EATING 2 +typedef int semaphore; +int state[N]; // 跟踪每个哲学家的状态 +semaphore mutex = 1; // 临界区的互斥,临界区是 state 数组,对其修改需要互斥 +semaphore s[N]; // 每个哲学家一个信号量 + +void philosopher(int i) { + while(TRUE) { + think(i); + take_two(i); + eat(i); + put_two(i); + } +} + +void take_two(int i) { + down(&mutex); + state[i] = HUNGRY; + check(i); + up(&mutex); + down(&s[i]); // 只有收到通知之后才可以开始吃,否则会一直等下去 +} + +void put_two(i) { + down(&mutex); + state[i] = THINKING; + check(LEFT); // 尝试通知左右邻居,自己吃完了,你们可以开始吃了 + check(RIGHT); + up(&mutex); +} + +void eat(int i) { + down(&mutex); + state[i] = EATING; + up(&mutex); +} + +// 检查两个邻居是否都没有用餐,如果是的话,就 up(&s[i]),使得 down(&s[i]) 能够得到通知并继续执行 +void check(i) { + if(state[i] == HUNGRY && state[LEFT] != EATING && state[RIGHT] !=EATING) { + state[i] = EATING; + up(&s[i]); + } +} +``` + +## 2. 读者-写者问题 + +允许多个进程同时对数据进行读操作,但是不允许读和写以及写和写操作同时发生。 + +一个整型变量 count 记录在对数据进行读操作的进程数量,一个互斥量 count_mutex 用于对 count 加锁,一个互斥量 data_mutex 用于对读写的数据加锁。 + +```c +typedef int semaphore; +semaphore count_mutex = 1; +semaphore data_mutex = 1; +int count = 0; + +void reader() { + while(TRUE) { + down(&count_mutex); + count++; + if(count == 1) down(&data_mutex); // 第一个读者需要对数据进行加锁,防止写进程访问 + up(&count_mutex); + read(); + down(&count_mutex); + count--; + if(count == 0) up(&data_mutex); + up(&count_mutex); + } +} + +void writer() { + while(TRUE) { + down(&data_mutex); + write(); + up(&data_mutex); + } +} +``` + +以下内容由 [@Bandi Yugandhar](https://github.com/yugandharbandi) 提供。 + +The first case may result Writer to starve. This case favous Writers i.e no writer, once added to the queue, shall be kept waiting longer than absolutely necessary(only when there are readers that entered the queue before the writer). + +```c +int readcount, writecount; //(initial value = 0) +semaphore rmutex, wmutex, readLock, resource; //(initial value = 1) + +//READER +void reader() { + + down(&readLock); // reader is trying to enter + down(&rmutex); // lock to increase readcount + readcount++; + if (readcount == 1) + down(&resource); //if you are the first reader then lock the resource + up(&rmutex); //release for other readers + up(&readLock); //Done with trying to access the resource + + +//reading is performed + + + down(&rmutex); //reserve exit section - avoids race condition with readers + readcount--; //indicate you're leaving + if (readcount == 0) //checks if you are last reader leaving + up(&resource); //if last, you must release the locked resource + up(&rmutex); //release exit section for other readers +} + +//WRITER +void writer() { + + down(&wmutex); //reserve entry section for writers - avoids race conditions + writecount++; //report yourself as a writer entering + if (writecount == 1) //checks if you're first writer + down(&readLock); //if you're first, then you must lock the readers out. Prevent them from trying to enter CS + up(&wmutex); //release entry section + + + down(&resource); //reserve the resource for yourself - prevents other writers from simultaneously editing the shared resource + //writing is performed + up(&resource); //release file + + + down(&wmutex); //reserve exit section + writecount--; //indicate you're leaving + if (writecount == 0) //checks if you're the last writer + up(&readLock); //if you're last writer, you must unlock the readers. Allows them to try enter CS for reading + up(&wmutex); //release exit section +} +``` + +We can observe that every reader is forced to acquire ReadLock. On the otherhand, writers doesn’t need to lock individually. Once the first writer locks the ReadLock, it will be released only when there is no writer left in the queue. + +From the both cases we observed that either reader or writer has to starve. Below solutionadds the constraint that no thread shall be allowed to starve; that is, the operation of obtaining a lock on the shared data will always terminate in a bounded amount of time. + +```source-c +int readCount; // init to 0; number of readers currently accessing resource + +// all semaphores initialised to 1 +Semaphore resourceAccess; // controls access (read/write) to the resource +Semaphore readCountAccess; // for syncing changes to shared variable readCount +Semaphore serviceQueue; // FAIRNESS: preserves ordering of requests (signaling must be FIFO) + +void writer() +{ + down(&serviceQueue); // wait in line to be servicexs + // + down(&resourceAccess); // request exclusive access to resource + // + up(&serviceQueue); // let next in line be serviced + + // + writeResource(); // writing is performed + // + + // + up(&resourceAccess); // release resource access for next reader/writer + // +} + +void reader() +{ + down(&serviceQueue); // wait in line to be serviced + down(&readCountAccess); // request exclusive access to readCount + // + if (readCount == 0) // if there are no readers already reading: + down(&resourceAccess); // request resource access for readers (writers blocked) + readCount++; // update count of active readers + // + up(&serviceQueue); // let next in line be serviced + up(&readCountAccess); // release access to readCount + + // + readResource(); // reading is performed + // + + down(&readCountAccess); // request exclusive access to readCount + // + readCount--; // update count of active readers + if (readCount == 0) // if there are no readers left: + up(&resourceAccess); // release resource access for all + // + up(&readCountAccess); // release access to readCount +} + +``` + +# 进程通信 + +进程同步与进程通信很容易混淆,它们的区别在于: + +- 进程同步:控制多个进程按一定顺序执行; +- 进程通信:进程间传输信息。 + +进程通信是一种手段,而进程同步是一种目的。也可以说,为了能够达到进程同步的目的,需要让进程进行通信,传输一些进程同步所需要的信息。 + +## 1. 管道 + +管道是通过调用 pipe 函数创建的,fd[0] 用于读,fd[1] 用于写。 + +```c +#include +int pipe(int fd[2]); +``` + +它具有以下限制: + +- 只支持半双工通信(单向交替传输); +- 只能在父子进程或者兄弟进程中使用。 + +

+ +## 2. FIFO + +也称为命名管道,去除了管道只能在父子进程中使用的限制。 + +```c +#include +int mkfifo(const char *path, mode_t mode); +int mkfifoat(int fd, const char *path, mode_t mode); +``` + +FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户进程和服务器进程之间传递数据。 + +

+ +## 3. 消息队列 + +相比于 FIFO,消息队列具有以下优点: + +- 消息队列可以独立于读写进程存在,从而避免了 FIFO 中同步管道的打开和关闭时可能产生的困难; +- 避免了 FIFO 的同步阻塞问题,不需要进程自己提供同步方法; +- 读进程可以根据消息类型有选择地接收消息,而不像 FIFO 那样只能默认地接收。 + +## 4. 信号量 + +它是一个计数器,用于为多个进程提供对共享数据对象的访问。 + +## 5. 共享存储 + +允许多个进程共享一个给定的存储区。因为数据不需要在进程之间复制,所以这是最快的一种 IPC。 + +需要使用信号量用来同步对共享存储的访问。 + +多个进程可以将同一个文件映射到它们的地址空间从而实现共享内存。另外 XSI 共享内存不是使用文件,而是使用内存的匿名段。 + +## 6. 套接字 + +与其它通信机制不同的是,它可用于不同机器间的进程通信。 + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\351\241\265\351\235\242\347\275\256\346\215\242\347\256\227\346\263\225.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\351\241\265\351\235\242\347\275\256\346\215\242\347\256\227\346\263\225.md" new file mode 100644 index 00000000..e0c6a7ac --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\223\215\344\275\234\347\263\273\347\273\237/\351\241\265\351\235\242\347\275\256\346\215\242\347\256\227\346\263\225.md" @@ -0,0 +1,129 @@ + +* [基本特征](#基本特征) + * [1. 并发](#1-并发) + * [2. 共享](#2-共享) + * [3. 虚拟](#3-虚拟) + * [4. 异步](#4-异步) +* [基本功能](#基本功能) + * [1. 进程管理](#1-进程管理) + * [2. 内存管理](#2-内存管理) + * [3. 文件管理](#3-文件管理) + * [4. 设备管理](#4-设备管理) +* [系统调用](#系统调用) +* [大内核和微内核](#大内核和微内核) + * [1. 大内核](#1-大内核) + * [2. 微内核](#2-微内核) +* [中断分类](#中断分类) + * [1. 外中断](#1-外中断) + * [2. 异常](#2-异常) + * [3. 陷入](#3-陷入) + + + +# 基本特征 + +## 1. 并发 + +并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。 + +并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。 + +操作系统通过引入进程和线程,使得程序能够并发运行。 + +## 2. 共享 + +共享是指系统中的资源可以被多个并发进程共同使用。 + +有两种共享方式:互斥共享和同时共享。 + +互斥共享的资源称为临界资源,例如打印机等,在同一时刻只允许一个进程访问,需要用同步机制来实现互斥访问。 + +## 3. 虚拟 + +虚拟技术把一个物理实体转换为多个逻辑实体。 + +主要有两种虚拟技术:时(时间)分复用技术和空(空间)分复用技术。 + +多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占用处理器,每次只执行一小个时间片并快速切换。 + +虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。 + +## 4. 异步 + +异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。 + +# 基本功能 + +## 1. 进程管理 + +进程控制、进程同步、进程通信、死锁处理、处理机调度等。 + +## 2. 内存管理 + +内存分配、地址映射、内存保护与共享、虚拟内存等。 + +## 3. 文件管理 + +文件存储空间的管理、目录管理、文件读写管理和保护等。 + +## 4. 设备管理 + +完成用户的 I/O 请求,方便用户使用各种设备,并提高设备的利用率。 + +主要包括缓冲管理、设备分配、设备处理、虛拟设备等。 + +# 系统调用 + +如果一个进程在用户态需要使用内核态的功能,就进行系统调用从而陷入内核,由操作系统代为完成。 + +

+ +Linux 的系统调用主要有以下这些: + +| Task | Commands | +| :---: | --- | +| 进程控制 | fork(); exit(); wait(); | +| 进程通信 | pipe(); shmget(); mmap(); | +| 文件操作 | open(); read(); write(); | +| 设备操作 | ioctl(); read(); write(); | +| 信息维护 | getpid(); alarm(); sleep(); | +| 安全 | chmod(); umask(); chown(); | + +# 大内核和微内核 + +## 1. 大内核 + +大内核是将操作系统功能作为一个紧密结合的整体放到内核。 + +由于各模块共享信息,因此有很高的性能。 + +## 2. 微内核 + +由于操作系统不断复杂,因此将一部分操作系统功能移出内核,从而降低内核的复杂性。移出的部分根据分层的原则划分成若干服务,相互独立。 + +在微内核结构下,操作系统被划分成小的、定义良好的模块,只有微内核这一个模块运行在内核态,其余模块运行在用户态。 + +因为需要频繁地在用户态和核心态之间进行切换,所以会有一定的性能损失。 + +

+ +# 中断分类 + +## 1. 外中断 + +由 CPU 执行指令以外的事件引起,如 I/O 完成中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。 + +## 2. 异常 + +由 CPU 执行指令的内部事件引起,如非法操作码、地址越界、算术溢出等。 + +## 3. 陷入 + +在用户程序中使用系统调用。 + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\346\225\260\346\215\256\347\273\223\346\236\204\347\256\227\346\263\225\347\254\224\350\257\225\351\242\230\346\261\207\346\200\273.pdf" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\225\260\346\215\256\347\273\223\346\236\204\347\256\227\346\263\225\347\254\224\350\257\225\351\242\230\346\261\207\346\200\273.pdf" new file mode 100644 index 00000000..a2ff33aa Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\225\260\346\215\256\347\273\223\346\236\204\347\256\227\346\263\225\347\254\224\350\257\225\351\242\230\346\261\207\346\200\273.pdf" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\346\234\200\345\260\217\347\224\237\346\210\220\346\240\221\347\256\227\346\263\225\350\256\262\350\247\243.ppt" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\234\200\345\260\217\347\224\237\346\210\220\346\240\221\347\256\227\346\263\225\350\256\262\350\247\243.ppt" new file mode 100644 index 00000000..eae48f67 Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\346\234\200\345\260\217\347\224\237\346\210\220\346\240\221\347\256\227\346\263\225\350\256\262\350\247\243.ppt" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\203\214\345\214\205\344\271\235\350\256\262-2.0.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\203\214\345\214\205\344\271\235\350\256\262-2.0.zip" new file mode 100644 index 00000000..f9f471bc Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\203\214\345\214\205\344\271\235\350\256\262-2.0.zip" differ diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \344\274\240\350\276\223\345\261\202.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \344\274\240\350\276\223\345\261\202.md" new file mode 100644 index 00000000..fdd2de8a --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \344\274\240\350\276\223\345\261\202.md" @@ -0,0 +1,169 @@ + +* [UDP 和 TCP 的特点](#udp-和-tcp-的特点) +* [UDP 首部格式](#udp-首部格式) +* [TCP 首部格式](#tcp-首部格式) +* [TCP 的三次握手](#tcp-的三次握手) +* [TCP 的四次挥手](#tcp-的四次挥手) +* [TCP 可靠传输](#tcp-可靠传输) +* [TCP 滑动窗口](#tcp-滑动窗口) +* [TCP 流量控制](#tcp-流量控制) +* [TCP 拥塞控制](#tcp-拥塞控制) + * [1. 慢开始与拥塞避免](#1-慢开始与拥塞避免) + * [2. 快重传与快恢复](#2-快重传与快恢复) + + + +网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。 + +# UDP 和 TCP 的特点 + +- 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。 + +- 传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。 + +# UDP 首部格式 + +

+ +首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。 + +# TCP 首部格式 + +

+ +- **序号** :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。 + +- **确认号** :期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。 + +- **数据偏移** :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。 + +- **确认 ACK** :当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。 + +- **同步 SYN** :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。 + +- **终止 FIN** :用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。 + +- **窗口** :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。 + +# TCP 的三次握手 + +

+ +假设 A 为客户端,B 为服务器端。 + +- 首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。 + +- A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。 + +- B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。 + +- A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。 + +- B 收到 A 的确认后,连接建立。 + +**三次握手的原因** + +第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。 + +客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。 + +# TCP 的四次挥手 + +

+ +以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。 + +- A 发送连接释放报文,FIN=1。 + +- B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。 + +- 当 B 不再需要连接时,发送连接释放报文,FIN=1。 + +- A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。 + +- B 收到 A 的确认后释放连接。 + +**四次挥手的原因** + +客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。 + +**TIME_WAIT** + +客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由: + +- 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。 + +- 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。 + +# TCP 可靠传输 + +TCP 使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。 + +一个报文段从发送再到接收到确认所经过的时间称为往返时间 RTT,加权平均往返时间 RTTs 计算如下: + +

+其中,0 ≤ a < 1,RTTs 随着 a 的增加更容易受到 RTT 的影响。 + +超时时间 RTO 应该略大于 RTTs,TCP 使用的超时时间计算如下: + +

+其中 RTTd 为偏差的加权平均值。 + +# TCP 滑动窗口 + +窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。 + +发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。 + +接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。 + +

+ +# TCP 流量控制 + +流量控制是为了控制发送方发送速率,保证接收方来得及接收。 + +接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。 + +# TCP 拥塞控制 + +如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。 + +

+ +TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。 + +发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。 + +为了便于讨论,做如下假设: + +- 接收方有足够大的接收缓存,因此不会发生流量控制; +- 虽然 TCP 的窗口基于字节,但是这里设窗口的大小单位为报文段。 + +

+ +## 1. 慢开始与拥塞避免 + +发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 ... + +注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。 + +如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。 + +## 2. 快重传与快恢复 + +在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认。 + +在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。 + +在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。 + +慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。 + + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \345\272\224\347\224\250\345\261\202.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \345\272\224\347\224\250\345\261\202.md" new file mode 100644 index 00000000..213f43f8 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \345\272\224\347\224\250\345\261\202.md" @@ -0,0 +1,173 @@ + +* [域名系统](#域名系统) +* [文件传送协议](#文件传送协议) +* [动态主机配置协议](#动态主机配置协议) +* [远程登录协议](#远程登录协议) +* [电子邮件协议](#电子邮件协议) + * [1. SMTP](#1-smtp) + * [2. POP3](#2-pop3) + * [3. IMAP](#3-imap) +* [常用端口](#常用端口) +* [Web 页面请求过程](#web-页面请求过程) + * [1. DHCP 配置主机信息](#1-dhcp-配置主机信息) + * [2. ARP 解析 MAC 地址](#2-arp-解析-mac-地址) + * [3. DNS 解析域名](#3-dns-解析域名) + * [4. HTTP 请求页面](#4-http-请求页面) + + + +# 域名系统 + +DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。 + +域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。 + +

+ +DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输: + +- 如果返回的响应超过的 512 字节(UDP 最大只支持 512 字节的数据)。 +- 区域传送(区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据)。 + +# 文件传送协议 + +FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件: + +- 控制连接:服务器打开端口号 21 等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答。 +- 数据连接:用来传送一个文件数据。 + +根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式: + +- 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0\~1023 是熟知端口号。 + +

+ +- 被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。 + +

+ +主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。 + +# 动态主机配置协议 + +DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息。 + +DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。 + +DHCP 工作过程如下: + +1. 客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。 +2. DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。 +3. 如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。 +4. DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。 + +

+ +# 远程登录协议 + +TELNET 用于登录到远程主机上,并且远程主机上的输出也会返回。 + +TELNET 可以适应许多计算机和操作系统的差异,例如不同操作系统系统的换行符定义。 + +# 电子邮件协议 + +一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件协议。 + +邮件协议包含发送协议和读取协议,发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。 + +

+ +## 1. SMTP + +SMTP 只能发送 ASCII 码,而互联网邮件扩充 MIME 可以发送二进制文件。MIME 并没有改动或者取代 SMTP,而是增加邮件主体的结构,定义了非 ASCII 码的编码规则。 + +

+ +## 2. POP3 + +POP3 的特点是只要用户从服务器上读取了邮件,就把该邮件删除。但最新版本的 POP3 可以不删除邮件。 + +## 3. IMAP + +IMAP 协议中客户端和服务器上的邮件保持同步,如果不手动删除邮件,那么服务器上的邮件也不会被删除。IMAP 这种做法可以让用户随时随地去访问服务器上的邮件。 + +# 常用端口 + +|应用| 应用层协议 | 端口号 | 传输层协议 | 备注 | +| :---: | :--: | :--: | :--: | :--: | +| 域名解析 | DNS | 53 | UDP/TCP | 长度超过 512 字节时使用 TCP | +| 动态主机配置协议 | DHCP | 67/68 | UDP | | +| 简单网络管理协议 | SNMP | 161/162 | UDP | | +| 文件传送协议 | FTP | 20/21 | TCP | 控制连接 21,数据连接 20 | +| 远程终端协议 | TELNET | 23 | TCP | | +| 超文本传送协议 | HTTP | 80 | TCP | | +| 简单邮件传送协议 | SMTP | 25 | TCP | | +| 邮件读取协议 | POP3 | 110 | TCP | | +| 网际报文存取协议 | IMAP | 143 | TCP | | + +# Web 页面请求过程 + +## 1. DHCP 配置主机信息 + +- 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。 + +- 主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口 68 的 UDP 报文段中。 + +- 该报文段则被放入在一个具有广播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 数据报中。 + +- 该数据报则被放置在 MAC 帧中,该帧具有目的地址 FF:FF:FF:FF:FF:FF,将广播到与交换机连接的所有设备。 + +- 连接在交换机的 DHCP 服务器收到广播帧之后,不断地向上分解得到 IP 数据报、UDP 报文段、DHCP 请求报文,之后生成 DHCP ACK 报文,该报文包含以下信息:IP 地址、DNS 服务器的 IP 地址、默认网关路由器的 IP 地址和子网掩码。该报文被放入 UDP 报文段中,UDP 报文段有被放入 IP 数据报中,最后放入 MAC 帧中。 + +- 该帧的目的地址是请求主机的 MAC 地址,因为交换机具有自学习能力,之前主机发送了广播帧之后就记录了 MAC 地址到其转发接口的交换表项,因此现在交换机就可以直接知道应该向哪个接口发送该帧。 + +- 主机收到该帧后,不断分解得到 DHCP 报文。之后就配置它的 IP 地址、子网掩码和 DNS 服务器的 IP 地址,并在其 IP 转发表中安装默认网关。 + +## 2. ARP 解析 MAC 地址 + +- 主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。 + +- 主机生成一个 DNS 查询报文,该报文具有 53 号端口,因为 DNS 服务器的端口号是 53。 + +- 该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中。 + +- 该 IP 数据报被放入一个以太网帧中,该帧将发送到网关路由器。 + +- DHCP 过程只知道网关路由器的 IP 地址,为了获取网关路由器的 MAC 地址,需要使用 ARP 协议。 + +- 主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文放入一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。 + +- 网关路由器接收到该帧后,不断向上分解得到 ARP 报文,发现其中的 IP 地址与其接口的 IP 地址匹配,因此就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。 + +## 3. DNS 解析域名 + +- 知道了网关路由器的 MAC 地址之后,就可以继续 DNS 的解析过程了。 + +- 网关路由器接收到包含 DNS 查询报文的以太网帧后,抽取出 IP 数据报,并根据转发表决定该 IP 数据报应该转发的路由器。 + +- 因为路由器具有内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,因此路由表中已经配置了网关路由器到达 DNS 服务器的路由表项。 + +- 到达 DNS 服务器之后,DNS 服务器抽取出 DNS 查询报文,并在 DNS 数据库中查找待解析的域名。 + +- 找到 DNS 记录之后,发送 DNS 回答报文,将该回答报文放入 UDP 报文段中,然后放入 IP 数据报中,通过路由器反向转发回网关路由器,并经过以太网交换机到达主机。 + +## 4. HTTP 请求页面 + +- 有了 HTTP 服务器的 IP 地址之后,主机就能够生成 TCP 套接字,该套接字将用于向 Web 服务器发送 HTTP GET 报文。 + +- 在生成 TCP 套接字之前,必须先与 HTTP 服务器进行三次握手来建立连接。生成一个具有目的端口 80 的 TCP SYN 报文段,并向 HTTP 服务器发送该报文段。 + +- HTTP 服务器收到该报文段之后,生成 TCP SYN ACK 报文段,发回给主机。 + +- 连接建立之后,浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。 + +- HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。 + +- 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。 + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \346\246\202\350\277\260.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \346\246\202\350\277\260.md" new file mode 100644 index 00000000..82aeffc0 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \346\246\202\350\277\260.md" @@ -0,0 +1,139 @@ + +* [网络的网络](#网络的网络) +* [ISP](#isp) +* [主机之间的通信方式](#主机之间的通信方式) +* [电路交换与分组交换](#电路交换与分组交换) + * [1. 电路交换](#1-电路交换) + * [2. 分组交换](#2-分组交换) +* [时延](#时延) + * [1. 排队时延](#1-排队时延) + * [2. 处理时延](#2-处理时延) + * [3. 传输时延](#3-传输时延) + * [4. 传播时延](#4-传播时延) +* [计算机网络体系结构](#计算机网络体系结构) + * [1. 五层协议](#1-五层协议) + * [2. OSI](#2-osi) + * [3. TCP/IP](#3-tcpip) + * [4. 数据在各层之间的传递过程](#4-数据在各层之间的传递过程) + + + +# 网络的网络 + +网络把主机连接起来,而互连网(internet)是把多种不同的网络连接起来,因此互连网是网络的网络。而互联网(Internet)是全球范围的互连网。 + +

+ +# ISP + +互联网服务提供商 ISP 可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联网设备,个人或机构向 ISP 缴纳一定的费用就可以接入互联网。 + +

+ +目前的互联网是一种多层次 ISP 结构,ISP 根据覆盖面积的大小分为第一层 ISP、区域 ISP 和接入 ISP。互联网交换点 IXP 允许两个 ISP 直接相连而不用经过第三个 ISP。 + +

+ +# 主机之间的通信方式 + +- 客户-服务器(C/S):客户是服务的请求方,服务器是服务的提供方。 + +

+ +- 对等(P2P):不区分客户和服务器。 + +

+ +# 电路交换与分组交换 + +## 1. 电路交换 + +电路交换用于电话通信系统,两个用户要通信之前需要建立一条专用的物理链路,并且在整个通信过程中始终占用该链路。由于通信的过程中不可能一直在使用传输线路,因此电路交换对线路的利用率很低,往往不到 10%。 + +## 2. 分组交换 + +每个分组都有首部和尾部,包含了源地址和目的地址等控制信息,在同一个传输线路上同时传输多个分组互相不会影响,因此在同一条传输线路上允许同时传输多个分组,也就是说分组交换不需要占用传输线路。 + +在一个邮局通信系统中,邮局收到一份邮件之后,先存储下来,然后把相同目的地的邮件一起转发到下一个目的地,这个过程就是存储转发过程,分组交换也使用了存储转发过程。 + +# 时延 + +总时延 = 排队时延 + 处理时延 + 传输时延 + 传播时延 + +

+ +## 1. 排队时延 + +分组在路由器的输入队列和输出队列中排队等待的时间,取决于网络当前的通信量。 + +## 2. 处理时延 + +主机或路由器收到分组时进行处理所需要的时间,例如分析首部、从分组中提取数据、进行差错检验或查找适当的路由等。 + +## 3. 传输时延 + +主机或路由器传输数据帧所需要的时间。 + + + +

+ + +其中 l 表示数据帧的长度,v 表示传输速率。 + +## 4. 传播时延 + +电磁波在信道中传播所需要花费的时间,电磁波传播的速度接近光速。 + + + +

+ +其中 l 表示信道长度,v 表示电磁波在信道上的传播速度。 + +# 计算机网络体系结构 + +

+ +## 1. 五层协议 + +- **应用层** :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。 + +- **传输层** :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。 + +- **网络层** :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。 + +- **数据链路层** :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。 + +- **物理层** :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。 + +## 2. OSI + +其中表示层和会话层用途如下: + +- **表示层** :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。 + +- **会话层** :建立及管理会话。 + +五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理。 + +## 3. TCP/IP + +它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。 + +TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者网络接口层。 + +

+ +## 4. 数据在各层之间的传递过程 + +在向下的过程中,需要添加下层协议所需要的首部或者尾部,而在向上的过程中不断拆开首部和尾部。 + +路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。 + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\211\251\347\220\206\345\261\202.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\211\251\347\220\206\345\261\202.md" new file mode 100644 index 00000000..7c6b8a16 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\211\251\347\220\206\345\261\202.md" @@ -0,0 +1,26 @@ + +* [通信方式](#通信方式) +* [带通调制](#带通调制) + + + +# 通信方式 + +根据信息在传输线上的传送方向,分为以下三种通信方式: + +- 单工通信:单向传输 +- 半双工通信:双向交替传输 +- 全双工通信:双向同时传输 + +# 带通调制 + +模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。 + + + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\275\221\347\273\234\345\261\202.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\275\221\347\273\234\345\261\202.md" new file mode 100644 index 00000000..36685f17 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \347\275\221\347\273\234\345\261\202.md" @@ -0,0 +1,248 @@ + +* [概述](#概述) +* [IP 数据报格式](#ip-数据报格式) +* [IP 地址编址方式](#ip-地址编址方式) + * [1. 分类](#1-分类) + * [2. 子网划分](#2-子网划分) + * [3. 无分类](#3-无分类) +* [地址解析协议 ARP](#地址解析协议-arp) +* [网际控制报文协议 ICMP](#网际控制报文协议-icmp) + * [1. Ping](#1-ping) + * [2. Traceroute](#2-traceroute) +* [虚拟专用网 VPN](#虚拟专用网-vpn) +* [网络地址转换 NAT](#网络地址转换-nat) +* [路由器的结构](#路由器的结构) +* [路由器分组转发流程](#路由器分组转发流程) +* [路由选择协议](#路由选择协议) + * [1. 内部网关协议 RIP](#1-内部网关协议-rip) + * [2. 内部网关协议 OSPF](#2-内部网关协议-ospf) + * [3. 外部网关协议 BGP](#3-外部网关协议-bgp) + + + +# 概述 + +因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。 + +使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。 + +

+ +与 IP 协议配套使用的还有三个协议: + +- 地址解析协议 ARP(Address Resolution Protocol) +- 网际控制报文协议 ICMP(Internet Control Message Protocol) +- 网际组管理协议 IGMP(Internet Group Management Protocol) + +# IP 数据报格式 + +

+ +- **版本** : 有 4(IPv4)和 6(IPv6)两个值; + +- **首部长度** : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为固定部分长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。 + +- **区分服务** : 用来获得更好的服务,一般情况下不使用。 + +- **总长度** : 包括首部长度和数据部分长度。 + +- **生存时间** :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。 + +- **协议** :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。 + +- **首部检验和** :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。 + +- **标识** : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。 + +- **片偏移** : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。 + +

+ +# IP 地址编址方式 + +IP 地址的编址方式经历了三个历史阶段: + +- 分类 +- 子网划分 +- 无分类 + +## 1. 分类 + +由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。 + +IP 地址 ::= {< 网络号 >, < 主机号 >} + +

+ +## 2. 子网划分 + +通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。 + +IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >} + +要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。 + +注意,外部网络看不到子网的存在。 + +## 3. 无分类 + +无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。 + +IP 地址 ::= {< 网络前缀号 >, < 主机号 >} + +CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。 + +CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。 + +一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 **构成超网** 。 + +在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。 + +# 地址解析协议 ARP + +网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。 + +

+ +ARP 实现由 IP 地址得到 MAC 地址。 + +

+ +每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。 + +如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。 + +

+ +# 网际控制报文协议 ICMP + +ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。 + +

+ +ICMP 报文分为差错报告报文和询问报文。 + +

+ +## 1. Ping + +Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。 + +Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。 + +## 2. Traceroute + +Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。 + +Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。 + +- 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文; +- 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。 +- 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。 +- 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。 + +# 虚拟专用网 VPN + +由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。 + +有三个专用地址块: + +- 10.0.0.0 \~ 10.255.255.255 +- 172.16.0.0 \~ 172.31.255.255 +- 192.168.0.0 \~ 192.168.255.255 + +VPN 使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指好像是,而实际上并不是,它有经过公用的互联网。 + +下图中,场所 A 和 B 的通信经过互联网,如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信,IP 数据报的源地址是 10.1.0.1,目的地址是 10.2.0.3。数据报先发送到与互联网相连的路由器 R1,R1 对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为 10.2.0.3,就交付给 Y。 + +

+ +# 网络地址转换 NAT + +专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。 + +在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。 + +

+ +# 路由器的结构 + +路由器从功能上可以划分为:路由选择和分组转发。 + +分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。 + +

+ +# 路由器分组转发流程 + +- 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。 +- 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付; +- 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器; +- 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器; +- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器; +- 报告转发分组出错。 + +

+ +# 路由选择协议 + +路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。 + +互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。 + +可以把路由选择协议划分为两大类: + +- 自治系统内部的路由选择:RIP 和 OSPF +- 自治系统间的路由选择:BGP + +## 1. 内部网关协议 RIP + +RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。 + +RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。 + +距离向量算法: + +- 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1; +- 对修改后的 RIP 报文中的每一个项目,进行以下步骤: + - 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中; + - 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。 +- 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。 + +RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。 + +## 2. 内部网关协议 OSPF + +开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。 + +开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。 + +OSPF 具有以下特点: + +- 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。 +- 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。 +- 只有当链路状态发生变化时,路由器才会发送信息。 + +所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。 + +## 3. 外部网关协议 BGP + +BGP(Border Gateway Protocol,边界网关协议) + +AS 之间的路由选择很困难,主要是由于: + +- 互联网规模很大; +- 各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量; +- AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。 + +BGP 只能寻找一条比较好的路由,而不是最佳路由。 + +每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。 + + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \351\223\276\350\267\257\345\261\202.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \351\223\276\350\267\257\345\261\202.md" new file mode 100644 index 00000000..e7831ceb --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234 - \351\223\276\350\267\257\345\261\202.md" @@ -0,0 +1,202 @@ + +* [基本问题](#基本问题) + * [1. 封装成帧](#1-封装成帧) + * [2. 透明传输](#2-透明传输) + * [3. 差错检测](#3-差错检测) +* [信道分类](#信道分类) + * [1. 广播信道](#1-广播信道) + * [2. 点对点信道](#2-点对点信道) +* [信道复用技术](#信道复用技术) + * [1. 频分复用](#1-频分复用) + * [2. 时分复用](#2-时分复用) + * [3. 统计时分复用](#3-统计时分复用) + * [4. 波分复用](#4-波分复用) + * [5. 码分复用](#5-码分复用) +* [CSMA/CD 协议](#csmacd-协议) +* [PPP 协议](#ppp-协议) +* [MAC 地址](#mac-地址) +* [局域网](#局域网) +* [以太网](#以太网) +* [交换机](#交换机) +* [虚拟局域网](#虚拟局域网) + + + +# 基本问题 + +## 1. 封装成帧 + +将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。 + +

+ +## 2. 透明传输 + +透明表示一个实际存在的事物看起来好像不存在一样。 + +帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定。需要在数据部分出现首部尾部相同的内容前面插入转义字符。如果数据部分出现转义字符,那么就在转义字符前面再加个转义字符。在接收端进行处理之后可以还原出原始数据。这个过程透明传输的内容是转义字符,用户察觉不到转义字符的存在。 + +

+ +## 3. 差错检测 + +目前数据链路层广泛使用了循环冗余检验(CRC)来检查比特差错。 + +# 信道分类 + +## 1. 广播信道 + +一对多通信,一个节点发送的数据能够被广播信道上所有的节点接收到。 + +所有的节点都在同一个广播信道上发送数据,因此需要有专门的控制方法进行协调,避免发生冲突(冲突也叫碰撞)。 + +主要有两种控制方法进行协调,一个是使用信道复用技术,一是使用 CSMA/CD 协议。 + +## 2. 点对点信道 + +一对一通信。 + +因为不会发生碰撞,因此也比较简单,使用 PPP 协议进行控制。 + +# 信道复用技术 + +## 1. 频分复用 + +频分复用的所有主机在相同的时间占用不同的频率带宽资源。 + +

+ +## 2. 时分复用 + +时分复用的所有主机在不同的时间占用相同的频率带宽资源。 + +

+ +使用频分复用和时分复用进行通信,在通信的过程中主机会一直占用一部分信道资源。但是由于计算机数据的突发性质,通信过程没必要一直占用信道资源而不让出给其它用户使用,因此这两种方式对信道的利用率都不高。 + +## 3. 统计时分复用 + +是对时分复用的一种改进,不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。 + +

+ +## 4. 波分复用 + +光的频分复用。由于光的频率很高,因此习惯上用波长而不是频率来表示所使用的光载波。 + +## 5. 码分复用 + +为每个用户分配 m bit 的码片,并且所有的码片正交,对于任意两个码片 有 + + + +

+ +为了讨论方便,取 m=8,设码片 为 00011011。在拥有该码片的用户发送比特 1 时就发送该码片,发送比特 0 时就发送该码片的反码 11100100。 + +在计算时将 00011011 记作 (-1 -1 -1 +1 +1 -1 +1 +1),可以得到 + + + + + +

+ +

+ +其中 的反码。 + +利用上面的式子我们知道,当接收端使用码片 对接收到的数据进行内积运算时,结果为 0 的是其它用户发送的数据,结果为 1 的是用户发送的比特 1,结果为 -1 的是用户发送的比特 0。 + +码分复用需要发送的数据量为原先的 m 倍。 + +

+ + +# CSMA/CD 协议 + +CSMA/CD 表示载波监听多点接入 / 碰撞检测。 + +- **多点接入** :说明这是总线型网络,许多主机以多点的方式连接到总线上。 +- **载波监听** :每个主机都必须不停地监听信道。在发送前,如果监听到信道正在使用,就必须等待。 +- **碰撞检测** :在发送中,如果监听到信道已有其它主机正在发送数据,就表示发生了碰撞。虽然每个主机在发送数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞。 + +记端到端的传播时延为 τ,最先发送的站点最多经过 2τ 就可以知道是否发生了碰撞,称 2τ 为 **争用期** 。只有经过争用期之后还没有检测到碰撞,才能肯定这次发送不会发生碰撞。 + +当发生碰撞时,站点要停止发送,等待一段时间再发送。这个时间采用 **截断二进制指数退避算法** 来确定。从离散的整数集合 {0, 1, .., (2k-1)} 中随机取出一个数,记作 r,然后取 r 倍的争用期作为重传等待时间。 + +

+ +# PPP 协议 + +互联网用户通常需要连接到某个 ISP 之后才能接入到互联网,PPP 协议是用户计算机和 ISP 进行通信时所使用的数据链路层协议。 + +

+ +PPP 的帧格式: + +- F 字段为帧的定界符 +- A 和 C 字段暂时没有意义 +- FCS 字段是使用 CRC 的检验序列 +- 信息部分的长度不超过 1500 + +

+ +# MAC 地址 + +MAC 地址是链路层地址,长度为 6 字节(48 位),用于唯一标识网络适配器(网卡)。 + +一台主机拥有多少个网络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个 MAC 地址。 + +# 局域网 + +局域网是一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限。 + +主要有以太网、令牌环网、FDDI 和 ATM 等局域网技术,目前以太网占领着有线局域网市场。 + +可以按照网络拓扑结构对局域网进行分类: + +

+ +# 以太网 + +以太网是一种星型拓扑结构局域网。 + +早期使用集线器进行连接,集线器是一种物理层设备, 作用于比特而不是帧,当一个比特到达接口时,集线器重新生成这个比特,并将其能量强度放大,从而扩大网络的传输距离,之后再将这个比特发送到其它所有接口。如果集线器同时收到两个不同接口的帧,那么就发生了碰撞。 + +目前以太网使用交换机替代了集线器,交换机是一种链路层设备,它不会发生碰撞,能根据 MAC 地址进行存储转发。 + +以太网帧格式: + +- **类型** :标记上层使用的协议; +- **数据** :长度在 46-1500 之间,如果太小则需要填充; +- **FCS** :帧检验序列,使用的是 CRC 检验方法; + +

+ +# 交换机 + +交换机具有自学习能力,学习的是交换表的内容,交换表中存储着 MAC 地址到接口的映射。 + +正是由于这种自学习能力,因此交换机是一种即插即用设备,不需要网络管理员手动配置交换表内容。 + +下图中,交换机有 4 个接口,主机 A 向主机 B 发送数据帧时,交换机把主机 A 到接口 1 的映射写入交换表中。为了发送数据帧到 B,先查交换表,此时没有主机 B 的表项,那么主机 A 就发送广播帧,主机 C 和主机 D 会丢弃该帧,主机 B 回应该帧向主机 A 发送数据包时,交换机查找交换表得到主机 A 映射的接口为 1,就发送数据帧到接口 1,同时交换机添加主机 B 到接口 2 的映射。 + +

+ +# 虚拟局域网 + +虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。 + +例如下图中 (A1, A2, A3, A4) 属于一个虚拟局域网,A1 发送的广播会被 A2、A3、A4 收到,而其它站点收不到。 + +使用 VLAN 干线连接来建立虚拟局域网,每台交换机上的一个特殊接口被设置为干线接口,以互连 VLAN 交换机。IEEE 定义了一种扩展的以太网帧格式 802.1Q,它在标准以太网帧上加进了 4 字节首部 VLAN 标签,用于表示该帧属于哪一个虚拟局域网。 + + + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\344\270\255\344\273\213\350\200\205\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\344\270\255\344\273\213\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 00000000..bd2d5190 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\344\270\255\344\273\213\350\200\205\346\250\241\345\274\217.md" @@ -0,0 +1,185 @@ +## 中介者(Mediator) + +### 介绍 + +中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。 + +### Intent + +集中相关对象之间复杂的沟通和控制方式。 + +### Class Diagram + +- Mediator:中介者,定义一个接口用于与各同事(Colleague)对象通信。 +- Colleague:同事,相关对象 + +

+ +### Implementation + +Alarm(闹钟)、CoffeePot(咖啡壶)、Calendar(日历)、Sprinkler(喷头)是一组相关的对象,在某个对象的事件产生时需要去操作其它对象,形成了下面这种依赖结构: + +

+ +使用中介者模式可以将复杂的依赖结构变成星形结构: + +

+ +```java +public abstract class Colleague { + public abstract void onEvent(Mediator mediator); +} +``` + +```java +public class Alarm extends Colleague { + + @Override + public void onEvent(Mediator mediator) { + mediator.doEvent("alarm"); + } + + public void doAlarm() { + System.out.println("doAlarm()"); + } +} +``` + +```java +public class CoffeePot extends Colleague { + @Override + public void onEvent(Mediator mediator) { + mediator.doEvent("coffeePot"); + } + + public void doCoffeePot() { + System.out.println("doCoffeePot()"); + } +} +``` + +```java +public class Calender extends Colleague { + @Override + public void onEvent(Mediator mediator) { + mediator.doEvent("calender"); + } + + public void doCalender() { + System.out.println("doCalender()"); + } +} +``` + +```java +public class Sprinkler extends Colleague { + @Override + public void onEvent(Mediator mediator) { + mediator.doEvent("sprinkler"); + } + + public void doSprinkler() { + System.out.println("doSprinkler()"); + } +} +``` + +```java +public abstract class Mediator { + public abstract void doEvent(String eventType); +} +``` + +```java +public class ConcreteMediator extends Mediator { + private Alarm alarm; + private CoffeePot coffeePot; + private Calender calender; + private Sprinkler sprinkler; + + public ConcreteMediator(Alarm alarm, CoffeePot coffeePot, Calender calender, Sprinkler sprinkler) { + this.alarm = alarm; + this.coffeePot = coffeePot; + this.calender = calender; + this.sprinkler = sprinkler; + } + + @Override + public void doEvent(String eventType) { + switch (eventType) { + case "alarm": + doAlarmEvent(); + break; + case "coffeePot": + doCoffeePotEvent(); + break; + case "calender": + doCalenderEvent(); + break; + default: + doSprinklerEvent(); + } + } + + public void doAlarmEvent() { + alarm.doAlarm(); + coffeePot.doCoffeePot(); + calender.doCalender(); + sprinkler.doSprinkler(); + } + + public void doCoffeePotEvent() { + // ... + } + + public void doCalenderEvent() { + // ... + } + + public void doSprinklerEvent() { + // ... + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Alarm alarm = new Alarm(); + CoffeePot coffeePot = new CoffeePot(); + Calender calender = new Calender(); + Sprinkler sprinkler = new Sprinkler(); + Mediator mediator = new ConcreteMediator(alarm, coffeePot, calender, sprinkler); + // 闹钟事件到达,调用中介者就可以操作相关对象 + alarm.onEvent(mediator); + } +} +``` + +```java +doAlarm() +doCoffeePot() +doCalender() +doSprinkler() +``` + +### JDK + +- All scheduleXXX() methods of [java.util.Timer](http://docs.oracle.com/javase/8/docs/api/java/util/Timer.html) +- [java.util.concurrent.Executor#execute()](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html#execute-java.lang.Runnable-) +- submit() and invokeXXX() methods of [java.util.concurrent.ExecutorService](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html) +- scheduleXXX() methods of [java.util.concurrent.ScheduledExecutorService](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html) +- [java.lang.reflect.Method#invoke()](http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#invoke-java.lang.Object-java.lang.Object...-) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\344\272\253\345\205\203\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\344\272\253\345\205\203\346\250\241\345\274\217.md" new file mode 100644 index 00000000..23be74e7 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\344\272\253\345\205\203\346\250\241\345\274\217.md" @@ -0,0 +1,102 @@ +## 享元(Flyweight) + +### 介绍 + +享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 + +享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象。 + +### Intent + +利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。 + +### Class Diagram + +- Flyweight:享元对象 +- IntrinsicState:内部状态,享元对象共享内部状态 +- ExtrinsicState:外部状态,每个享元对象的外部状态不同 + +

+ +### Implementation + +```java +public interface Flyweight { + void doOperation(String extrinsicState); +} +``` + +```java +public class ConcreteFlyweight implements Flyweight { + + private String intrinsicState; + + public ConcreteFlyweight(String intrinsicState) { + this.intrinsicState = intrinsicState; + } + + @Override + public void doOperation(String extrinsicState) { + System.out.println("Object address: " + System.identityHashCode(this)); + System.out.println("IntrinsicState: " + intrinsicState); + System.out.println("ExtrinsicState: " + extrinsicState); + } +} +``` + +```java +public class FlyweightFactory { + + private HashMap flyweights = new HashMap<>(); + + Flyweight getFlyweight(String intrinsicState) { + if (!flyweights.containsKey(intrinsicState)) { + Flyweight flyweight = new ConcreteFlyweight(intrinsicState); + flyweights.put(intrinsicState, flyweight); + } + return flyweights.get(intrinsicState); + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + FlyweightFactory factory = new FlyweightFactory(); + Flyweight flyweight1 = factory.getFlyweight("aa"); + Flyweight flyweight2 = factory.getFlyweight("aa"); + flyweight1.doOperation("x"); + flyweight2.doOperation("y"); + } +} +``` + +```html +Object address: 1163157884 +IntrinsicState: aa +ExtrinsicState: x +Object address: 1163157884 +IntrinsicState: aa +ExtrinsicState: y +``` + +### JDK + +Java 利用缓存来加速大量小对象的访问时间。 + +- java.lang.Integer#valueOf(int) +- java.lang.Boolean#valueOf(boolean) +- java.lang.Byte#valueOf(byte) +- java.lang.Character#valueOf(char) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\344\273\243\347\220\206\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\344\273\243\347\220\206\346\250\241\345\274\217.md" new file mode 100644 index 00000000..b019ef69 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\344\273\243\347\220\206\346\250\241\345\274\217.md" @@ -0,0 +1,121 @@ +## 代理(Proxy) + +### 介绍 + +在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 + +在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 + +### Intent + +控制对其它对象的访问。 + +### Class Diagram + +代理有以下四类: + +- 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。 +- 虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,它可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大图片时,不能马上完成,可以用虚拟代理缓存图片的大小信息,然后生成一张临时图片代替原始图片。 +- 保护代理(Protection Proxy):按权限控制对象的访问,它负责检查调用者是否具有实现一个请求所必须的访问权限。 +- 智能代理(Smart Reference):取代了简单的指针,它在访问对象时执行一些附加操作:记录对象的引用次数;当第一次引用一个对象时,将它装入内存;在访问一个实际对象前,检查是否已经锁定了它,以确保其它对象不能改变它。 + +

+ +### Implementation + +以下是一个虚拟代理的实现,模拟了图片延迟加载的情况下使用与图片大小相等的临时内容去替换原始图片,直到图片加载完成才将图片显示出来。 + +```java +public interface Image { + void showImage(); +} +``` + +```java +public class HighResolutionImage implements Image { + + private URL imageURL; + private long startTime; + private int height; + private int width; + + public int getHeight() { + return height; + } + + public int getWidth() { + return width; + } + + public HighResolutionImage(URL imageURL) { + this.imageURL = imageURL; + this.startTime = System.currentTimeMillis(); + this.width = 600; + this.height = 600; + } + + public boolean isLoad() { + // 模拟图片加载,延迟 3s 加载完成 + long endTime = System.currentTimeMillis(); + return endTime - startTime > 3000; + } + + @Override + public void showImage() { + System.out.println("Real Image: " + imageURL); + } +} +``` + +```java +public class ImageProxy implements Image { + + private HighResolutionImage highResolutionImage; + + public ImageProxy(HighResolutionImage highResolutionImage) { + this.highResolutionImage = highResolutionImage; + } + + @Override + public void showImage() { + while (!highResolutionImage.isLoad()) { + try { + System.out.println("Temp Image: " + highResolutionImage.getWidth() + " " + highResolutionImage.getHeight()); + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + highResolutionImage.showImage(); + } +} +``` + +```java +public class ImageViewer { + + public static void main(String[] args) throws Exception { + String image = "http://image.jpg/"; + URL url = new URL(image); + HighResolutionImage highResolutionImage = new HighResolutionImage(url); + ImageProxy imageProxy = new ImageProxy(highResolutionImage); + imageProxy.showImage(); + } +} +``` + +### JDK + +- java.lang.reflect.Proxy +- RMI + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\215\225\344\276\213\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\215\225\344\276\213\346\250\241\345\274\217.md" new file mode 100644 index 00000000..bcc1bcd0 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\215\225\344\276\213\346\250\241\345\274\217.md" @@ -0,0 +1,225 @@ +## 单例(Singleton) + +### 介绍 + +单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 + +这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 + +注意: + +- 1、单例类只能有一个实例。 +- 2、单例类必须自己创建自己的唯一实例。 +- 3、单例类必须给所有其他对象提供这一实例。 + +### Intent + +确保一个类只有一个实例,并提供该实例的全局访问点。 + +### Class Diagram + +使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 + +私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 + +

+ +### Implementation + +#### Ⅰ 懒汉式-线程不安全 + +以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资源。 + +这个实现在多线程环境下是不安全的,如果多个线程能够同时进入 `if (uniqueInstance == null)` ,并且此时 uniqueInstance 为 null,那么会有多个线程执行 `uniqueInstance = new Singleton();` 语句,这将导致实例化多次 uniqueInstance。 + +```java +public class Singleton { + + private static Singleton uniqueInstance; + + private Singleton() { + } + + public static Singleton getUniqueInstance() { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + return uniqueInstance; + } +} +``` + +#### Ⅱ 饿汉式-线程安全 + +线程不安全问题主要是由于 uniqueInstance 被实例化多次,采取直接实例化 uniqueInstance 的方式就不会产生线程不安全问题。 + +但是直接实例化的方式也丢失了延迟实例化带来的节约资源的好处。 + +```java +private static Singleton uniqueInstance = new Singleton(); +``` + +#### Ⅲ 懒汉式-线程安全 + +只需要对 getUniqueInstance() 方法加锁,那么在一个时间点只能有一个线程能够进入该方法,从而避免了实例化多次 uniqueInstance。 + +但是当一个线程进入该方法之后,其它试图进入该方法的线程都必须等待,即使 uniqueInstance 已经被实例化了。这会让线程阻塞时间过长,因此该方法有性能问题,不推荐使用。 + +```java +public static synchronized Singleton getUniqueInstance() { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + return uniqueInstance; +} +``` + +#### Ⅳ 双重校验锁-线程安全 + +uniqueInstance 只需要被实例化一次,之后就可以直接使用了。加锁操作只需要对实例化那部分的代码进行,只有当 uniqueInstance 没有被实例化时,才需要进行加锁。 + +双重校验锁先判断 uniqueInstance 是否已经被实例化,如果没有被实例化,那么才对实例化语句进行加锁。 + +```java +public class Singleton { + + private volatile static Singleton uniqueInstance; + + private Singleton() { + } + + public static Singleton getUniqueInstance() { + if (uniqueInstance == null) { + synchronized (Singleton.class) { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + } + } + return uniqueInstance; + } +} +``` + +考虑下面的实现,也就是只使用了一个 if 语句。在 uniqueInstance == null 的情况下,如果两个线程都执行了 if 语句,那么两个线程都会进入 if 语句块内。虽然在 if 语句块内有加锁操作,但是两个线程都会执行 `uniqueInstance = new Singleton();` 这条语句,只是先后的问题,那么就会进行两次实例化。因此必须使用双重校验锁,也就是需要使用两个 if 语句:第一个 if 语句用来避免 uniqueInstance 已经被实例化之后的加锁操作,而第二个 if 语句进行了加锁,所以只能有一个线程进入,就不会出现 uniqueInstance == null 时两个线程同时进行实例化操作。 + +```java +if (uniqueInstance == null) { + synchronized (Singleton.class) { + uniqueInstance = new Singleton(); + } +} +``` + +uniqueInstance 采用 volatile 关键字修饰也是很有必要的, `uniqueInstance = new Singleton();` 这段代码其实是分为三步执行: + +1. 为 uniqueInstance 分配内存空间 +2. 初始化 uniqueInstance +3. 将 uniqueInstance 指向分配的内存地址 + +但是由于 JVM 具有指令重排的特性,执行顺序有可能变成 1>3>2。指令重排在单线程环境下不会出现问题,但是在多线程环境下会导致一个线程获得还没有初始化的实例。例如,线程 T1 执行了 1 和 3,此时 T2 调用 getUniqueInstance() 后发现 uniqueInstance 不为空,因此返回 uniqueInstance,但此时 uniqueInstance 还未被初始化。 + +使用 volatile 可以禁止 JVM 的指令重排,保证在多线程环境下也能正常运行。 + +#### Ⅴ 静态内部类实现 + +当 Singleton 类被加载时,静态内部类 SingletonHolder 没有被加载进内存。只有当调用 `getUniqueInstance()` 方法从而触发 `SingletonHolder.INSTANCE` 时 SingletonHolder 才会被加载,此时初始化 INSTANCE 实例,并且 JVM 能确保 INSTANCE 只被实例化一次。 + +这种方式不仅具有延迟初始化的好处,而且由 JVM 提供了对线程安全的支持。 + +```java +public class Singleton { + + private Singleton() { + } + + private static class SingletonHolder { + private static final Singleton INSTANCE = new Singleton(); + } + + public static Singleton getUniqueInstance() { + return SingletonHolder.INSTANCE; + } +} +``` + +#### Ⅵ 枚举实现 + +```java +public enum Singleton { + + INSTANCE; + + private String objName; + + + public String getObjName() { + return objName; + } + + + public void setObjName(String objName) { + this.objName = objName; + } + + + public static void main(String[] args) { + + // 单例测试 + Singleton firstSingleton = Singleton.INSTANCE; + firstSingleton.setObjName("firstName"); + System.out.println(firstSingleton.getObjName()); + Singleton secondSingleton = Singleton.INSTANCE; + secondSingleton.setObjName("secondName"); + System.out.println(firstSingleton.getObjName()); + System.out.println(secondSingleton.getObjName()); + + // 反射获取实例测试 + try { + Singleton[] enumConstants = Singleton.class.getEnumConstants(); + for (Singleton enumConstant : enumConstants) { + System.out.println(enumConstant.getObjName()); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} +``` + +```html +firstName +secondName +secondName +secondName +``` + +该实现可以防止反射攻击。在其它实现中,通过 setAccessible() 方法可以将私有构造函数的访问级别设置为 public,然后调用构造函数从而实例化对象,如果要防止这种攻击,需要在构造函数中添加防止多次实例化的代码。该实现是由 JVM 保证只会实例化一次,因此不会出现上述的反射攻击。 + +该实现在多次序列化和序列化之后,不会得到多个实例。而其它实现需要使用 transient 修饰所有字段,并且实现序列化和反序列化的方法。 + +### Examples + +- Logger Classes +- Configuration Classes +- Accesing resources in shared mode +- Factories implemented as Singletons + +### JDK + +- [java.lang.Runtime#getRuntime()](http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#getRuntime%28%29) +- [java.awt.Desktop#getDesktop()](http://docs.oracle.com/javase/8/docs/api/java/awt/Desktop.html#getDesktop--) + + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\216\237\345\236\213\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\216\237\345\236\213\346\250\241\345\274\217.md" new file mode 100644 index 00000000..786c09bc --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\216\237\345\236\213\346\250\241\345\274\217.md" @@ -0,0 +1,73 @@ +# 原型模式(Prototype) + +### 介绍 + +原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 + +这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。 + +### Intent + +使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。 + +### Class Diagram + +

+ +### Implementation + +```java +public abstract class Prototype { + abstract Prototype myClone(); +} +``` + +```java +public class ConcretePrototype extends Prototype { + + private String filed; + + public ConcretePrototype(String filed) { + this.filed = filed; + } + + @Override + Prototype myClone() { + return new ConcretePrototype(filed); + } + + @Override + public String toString() { + return filed; + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Prototype prototype = new ConcretePrototype("abc"); + Prototype clone = prototype.myClone(); + System.out.println(clone.toString()); + } +} +``` + +```html +abc +``` + +### JDK + +- [java.lang.Object#clone()](http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone%28%29) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\221\275\344\273\244\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\221\275\344\273\244\346\250\241\345\274\217.md" new file mode 100644 index 00000000..f23096b4 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\221\275\344\273\244\346\250\241\345\274\217.md" @@ -0,0 +1,142 @@ +## 命令(Command) + +### 介绍 + +命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 + +### Intent + +将命令封装成对象中,具有以下作用: + +- 使用命令来参数化其它对象 +- 将命令放入队列中进行排队 +- 将命令的操作记录到日志中 +- 支持可撤销的操作 + +### Class Diagram + +- Command:命令 +- Receiver:命令接收者,也就是命令真正的执行者 +- Invoker:通过它来调用命令 +- Client:可以设置命令与命令的接收者 + +

+ +### Implementation + +设计一个遥控器,可以控制电灯开关。 + +

+ +```java +public interface Command { + void execute(); +} +``` + +```java +public class LightOnCommand implements Command { + Light light; + + public LightOnCommand(Light light) { + this.light = light; + } + + @Override + public void execute() { + light.on(); + } +} +``` + +```java +public class LightOffCommand implements Command { + Light light; + + public LightOffCommand(Light light) { + this.light = light; + } + + @Override + public void execute() { + light.off(); + } +} +``` + +```java +public class Light { + + public void on() { + System.out.println("Light is on!"); + } + + public void off() { + System.out.println("Light is off!"); + } +} +``` + +```java +/** + * 遥控器 + */ +public class Invoker { + private Command[] onCommands; + private Command[] offCommands; + private final int slotNum = 7; + + public Invoker() { + this.onCommands = new Command[slotNum]; + this.offCommands = new Command[slotNum]; + } + + public void setOnCommand(Command command, int slot) { + onCommands[slot] = command; + } + + public void setOffCommand(Command command, int slot) { + offCommands[slot] = command; + } + + public void onButtonWasPushed(int slot) { + onCommands[slot].execute(); + } + + public void offButtonWasPushed(int slot) { + offCommands[slot].execute(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Invoker invoker = new Invoker(); + Light light = new Light(); + Command lightOnCommand = new LightOnCommand(light); + Command lightOffCommand = new LightOffCommand(light); + invoker.setOnCommand(lightOnCommand, 0); + invoker.setOffCommand(lightOffCommand, 0); + invoker.onButtonWasPushed(0); + invoker.offButtonWasPushed(0); + } +} +``` + +### JDK + +- [java.lang.Runnable](http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html) +- [Netflix Hystrix](https://github.com/Netflix/Hystrix/wiki) +- [javax.swing.Action](http://docs.oracle.com/javase/8/docs/api/javax/swing/Action.html) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\244\207\345\277\230\345\275\225\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\244\207\345\277\230\345\275\225\346\250\241\345\274\217.md" new file mode 100644 index 00000000..956b62a0 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\244\207\345\277\230\345\275\225\346\250\241\345\274\217.md" @@ -0,0 +1,191 @@ +## 备忘录(Memento) + +### 介绍 + +备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 + +### Intent + +在不违反封装的情况下获得对象的内部状态,从而在需要时可以将对象恢复到最初状态。 + +### Class Diagram + +- Originator:原始对象 +- Caretaker:负责保存好备忘录 +- Memento:备忘录,存储原始对象的的状态。备忘录实际上有两个接口,一个是提供给 Caretaker 的窄接口:它只能将备忘录传递给其它对象;一个是提供给 Originator 的宽接口,允许它访问到先前状态所需的所有数据。理想情况是只允许 Originator 访问本备忘录的内部状态。 + +

+ +### Implementation + +以下实现了一个简单计算器程序,可以输入两个值,然后计算这两个值的和。备忘录模式允许将这两个值存储起来,然后在某个时刻用存储的状态进行恢复。 + +实现参考:[Memento Pattern - Calculator Example - Java Sourcecode](https://www.oodesign.com/memento-pattern-calculator-example-java-sourcecode.html) + +```java +/** + * Originator Interface + */ +public interface Calculator { + + // Create Memento + PreviousCalculationToCareTaker backupLastCalculation(); + + // setMemento + void restorePreviousCalculation(PreviousCalculationToCareTaker memento); + + int getCalculationResult(); + + void setFirstNumber(int firstNumber); + + void setSecondNumber(int secondNumber); +} +``` + +```java +/** + * Originator Implementation + */ +public class CalculatorImp implements Calculator { + + private int firstNumber; + private int secondNumber; + + @Override + public PreviousCalculationToCareTaker backupLastCalculation() { + // create a memento object used for restoring two numbers + return new PreviousCalculationImp(firstNumber, secondNumber); + } + + @Override + public void restorePreviousCalculation(PreviousCalculationToCareTaker memento) { + this.firstNumber = ((PreviousCalculationToOriginator) memento).getFirstNumber(); + this.secondNumber = ((PreviousCalculationToOriginator) memento).getSecondNumber(); + } + + @Override + public int getCalculationResult() { + // result is adding two numbers + return firstNumber + secondNumber; + } + + @Override + public void setFirstNumber(int firstNumber) { + this.firstNumber = firstNumber; + } + + @Override + public void setSecondNumber(int secondNumber) { + this.secondNumber = secondNumber; + } +} +``` + +```java +/** + * Memento Interface to Originator + * + * This interface allows the originator to restore its state + */ +public interface PreviousCalculationToOriginator { + int getFirstNumber(); + int getSecondNumber(); +} +``` + +```java +/** + * Memento interface to CalculatorOperator (Caretaker) + */ +public interface PreviousCalculationToCareTaker { + // no operations permitted for the caretaker +} +``` + +```java +/** + * Memento Object Implementation + *

+ * Note that this object implements both interfaces to Originator and CareTaker + */ +public class PreviousCalculationImp implements PreviousCalculationToCareTaker, + PreviousCalculationToOriginator { + + private int firstNumber; + private int secondNumber; + + public PreviousCalculationImp(int firstNumber, int secondNumber) { + this.firstNumber = firstNumber; + this.secondNumber = secondNumber; + } + + @Override + public int getFirstNumber() { + return firstNumber; + } + + @Override + public int getSecondNumber() { + return secondNumber; + } +} +``` + +```java +/** + * CareTaker object + */ +public class Client { + + public static void main(String[] args) { + // program starts + Calculator calculator = new CalculatorImp(); + + // assume user enters two numbers + calculator.setFirstNumber(10); + calculator.setSecondNumber(100); + + // find result + System.out.println(calculator.getCalculationResult()); + + // Store result of this calculation in case of error + PreviousCalculationToCareTaker memento = calculator.backupLastCalculation(); + + // user enters a number + calculator.setFirstNumber(17); + + // user enters a wrong second number and calculates result + calculator.setSecondNumber(-290); + + // calculate result + System.out.println(calculator.getCalculationResult()); + + // user hits CTRL + Z to undo last operation and see last result + calculator.restorePreviousCalculation(memento); + + // result restored + System.out.println(calculator.getCalculationResult()); + } +} +``` + +```html +110 +-273 +110 +``` + +### JDK + +- java.io.Serializable + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +

+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\244\226\350\247\202\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\244\226\350\247\202\346\250\241\345\274\217.md" new file mode 100644 index 00000000..6c16edd8 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\244\226\350\247\202\346\250\241\345\274\217.md" @@ -0,0 +1,71 @@ +## 外观(Facade) + +### 介绍 + +外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 + +这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 + +### Intent + +提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。 + +### Class Diagram + +

+ +### Implementation + +观看电影需要操作很多电器,使用外观模式实现一键看电影功能。 + +```java +public class SubSystem { + public void turnOnTV() { + System.out.println("turnOnTV()"); + } + + public void setCD(String cd) { + System.out.println("setCD( " + cd + " )"); + } + + public void startWatching(){ + System.out.println("startWatching()"); + } +} +``` + +```java +public class Facade { + private SubSystem subSystem = new SubSystem(); + + public void watchMovie() { + subSystem.turnOnTV(); + subSystem.setCD("a movie"); + subSystem.startWatching(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Facade facade = new Facade(); + facade.watchMovie(); + } +} +``` + +### 设计原则 + +最少知识原则:只和你的密友谈话。也就是说客户对象所需要交互的对象应当尽可能少。 + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\267\245\345\216\202\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\267\245\345\216\202\346\250\241\345\274\217.md" new file mode 100644 index 00000000..b2576352 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\267\245\345\216\202\346\250\241\345\274\217.md" @@ -0,0 +1,76 @@ +## 工厂方法(Factory Method) + +### 介绍 + +工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 + +在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 + +### Intent + +定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。 + +### Class Diagram + +在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。 + +下图中,Factory 有一个 doSomething() 方法,这个方法需要用到一个产品对象,这个产品对象由 factoryMethod() 方法创建。该方法是抽象的,需要由子类去实现。 + +

+ +### Implementation + +```java +public abstract class Factory { + abstract public Product factoryMethod(); + public void doSomething() { + Product product = factoryMethod(); + // do something with the product + } +} +``` + +```java +public class ConcreteFactory extends Factory { + public Product factoryMethod() { + return new ConcreteProduct(); + } +} +``` + +```java +public class ConcreteFactory1 extends Factory { + public Product factoryMethod() { + return new ConcreteProduct1(); + } +} +``` + +```java +public class ConcreteFactory2 extends Factory { + public Product factoryMethod() { + return new ConcreteProduct2(); + } +} +``` + +### JDK + +- [java.util.Calendar](http://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html#getInstance--) +- [java.util.ResourceBundle](http://docs.oracle.com/javase/8/docs/api/java/util/ResourceBundle.html#getBundle-java.lang.String-) +- [java.text.NumberFormat](http://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html#getInstance--) +- [java.nio.charset.Charset](http://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html#forName-java.lang.String-) +- [java.net.URLStreamHandlerFactory](http://docs.oracle.com/javase/8/docs/api/java/net/URLStreamHandlerFactory.html#createURLStreamHandler-java.lang.String-) +- [java.util.EnumSet](https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html#of-E-) +- [javax.xml.bind.JAXBContext](https://docs.oracle.com/javase/8/docs/api/javax/xml/bind/JAXBContext.html#createMarshaller--) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\273\272\351\200\240\350\200\205\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\273\272\351\200\240\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 00000000..6c500b4d --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\345\273\272\351\200\240\350\200\205\346\250\241\345\274\217.md" @@ -0,0 +1,106 @@ +## 生成器(Builder) + +### 介绍 + +建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 + +一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 + +### Intent + +封装一个对象的构造过程,并允许按步骤构造。 + +### Class Diagram + +

+ +### Implementation + +以下是一个简易的 StringBuilder 实现,参考了 JDK 1.8 源码。 + +```java +public class AbstractStringBuilder { + protected char[] value; + + protected int count; + + public AbstractStringBuilder(int capacity) { + count = 0; + value = new char[capacity]; + } + + public AbstractStringBuilder append(char c) { + ensureCapacityInternal(count + 1); + value[count++] = c; + return this; + } + + private void ensureCapacityInternal(int minimumCapacity) { + // overflow-conscious code + if (minimumCapacity - value.length > 0) + expandCapacity(minimumCapacity); + } + + void expandCapacity(int minimumCapacity) { + int newCapacity = value.length * 2 + 2; + if (newCapacity - minimumCapacity < 0) + newCapacity = minimumCapacity; + if (newCapacity < 0) { + if (minimumCapacity < 0) // overflow + throw new OutOfMemoryError(); + newCapacity = Integer.MAX_VALUE; + } + value = Arrays.copyOf(value, newCapacity); + } +} +``` + +```java +public class StringBuilder extends AbstractStringBuilder { + public StringBuilder() { + super(16); + } + + @Override + public String toString() { + // Create a copy, don't share the array + return new String(value, 0, count); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + StringBuilder sb = new StringBuilder(); + final int count = 26; + for (int i = 0; i < count; i++) { + sb.append((char) ('a' + i)); + } + System.out.println(sb.toString()); + } +} +``` + +```html +abcdefghijklmnopqrstuvwxyz +``` + +### JDK + +- [java.lang.StringBuilder](http://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html) +- [java.nio.ByteBuffer](http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html#put-byte-) +- [java.lang.StringBuffer](http://docs.oracle.com/javase/8/docs/api/java/lang/StringBuffer.html#append-boolean-) +- [java.lang.Appendable](http://docs.oracle.com/javase/8/docs/api/java/lang/Appendable.html) +- [Apache Camel builders](https://github.com/apache/camel/tree/0e195428ee04531be27a0b659005e3aa8d159d23/camel-core/src/main/java/org/apache/camel/builder) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\346\212\275\350\261\241\345\267\245\345\216\202.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\346\212\275\350\261\241\345\267\245\345\216\202.md" new file mode 100644 index 00000000..c8f41d3b --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\346\212\275\350\261\241\345\267\245\345\216\202.md" @@ -0,0 +1,114 @@ +## 抽象工厂(Abstract Factory) + +### 介绍 + +抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 + +在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 + +### Intent + +提供一个接口,用于创建 **相关的对象家族** 。 + +### Class Diagram + +抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂方法模式只是用于创建一个对象,这和抽象工厂模式有很大不同。 + +抽象工厂模式用到了工厂方法模式来创建单一对象,AbstractFactory 中的 createProductA() 和 createProductB() 方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂方法模式的定义。 + +至于创建对象的家族这一概念是在 Client 体现,Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象,在这里这两个对象就有很大的相关性,Client 需要同时创建出这两个对象。 + +从高层次来看,抽象工厂使用了组合,即 Cilent 组合了 AbstractFactory,而工厂方法模式使用了继承。 + +

+ +### Implementation + +```java +public class AbstractProductA { +} +``` + +```java +public class AbstractProductB { +} +``` + +```java +public class ProductA1 extends AbstractProductA { +} +``` + +```java +public class ProductA2 extends AbstractProductA { +} +``` + +```java +public class ProductB1 extends AbstractProductB { +} +``` + +```java +public class ProductB2 extends AbstractProductB { +} +``` + +```java +public abstract class AbstractFactory { + abstract AbstractProductA createProductA(); + abstract AbstractProductB createProductB(); +} +``` + +```java +public class ConcreteFactory1 extends AbstractFactory { + AbstractProductA createProductA() { + return new ProductA1(); + } + + AbstractProductB createProductB() { + return new ProductB1(); + } +} +``` + +```java +public class ConcreteFactory2 extends AbstractFactory { + AbstractProductA createProductA() { + return new ProductA2(); + } + + AbstractProductB createProductB() { + return new ProductB2(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + AbstractFactory abstractFactory = new ConcreteFactory1(); + AbstractProductA productA = abstractFactory.createProductA(); + AbstractProductB productB = abstractFactory.createProductB(); + // do something with productA and productB + } +} +``` + +### JDK + +- [javax.xml.parsers.DocumentBuilderFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/parsers/DocumentBuilderFactory.html) +- [javax.xml.transform.TransformerFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/transform/TransformerFactory.html#newInstance--) +- [javax.xml.xpath.XPathFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/xpath/XPathFactory.html#newInstance--) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\346\241\245\346\216\245\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\346\241\245\346\216\245\346\250\241\345\274\217.md" new file mode 100644 index 00000000..ef9b3c47 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\346\241\245\346\216\245\346\250\241\345\274\217.md" @@ -0,0 +1,175 @@ +## 桥接(Bridge) + +### 介绍 + +桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 + +这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 + +我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。 + +### Intent + +将抽象与实现分离开来,使它们可以独立变化。 + +### Class Diagram + +- Abstraction:定义抽象类的接口 +- Implementor:定义实现类接口 + +

+ +### Implementation + +RemoteControl 表示遥控器,指代 Abstraction。 + +TV 表示电视,指代 Implementor。 + +桥接模式将遥控器和电视分离开来,从而可以独立改变遥控器或者电视的实现。 + +```java +public abstract class TV { + public abstract void on(); + + public abstract void off(); + + public abstract void tuneChannel(); +} +``` + +```java +public class Sony extends TV { + @Override + public void on() { + System.out.println("Sony.on()"); + } + + @Override + public void off() { + System.out.println("Sony.off()"); + } + + @Override + public void tuneChannel() { + System.out.println("Sony.tuneChannel()"); + } +} +``` + +```java +public class RCA extends TV { + @Override + public void on() { + System.out.println("RCA.on()"); + } + + @Override + public void off() { + System.out.println("RCA.off()"); + } + + @Override + public void tuneChannel() { + System.out.println("RCA.tuneChannel()"); + } +} +``` + +```java +public abstract class RemoteControl { + protected TV tv; + + public RemoteControl(TV tv) { + this.tv = tv; + } + + public abstract void on(); + + public abstract void off(); + + public abstract void tuneChannel(); +} +``` + +```java +public class ConcreteRemoteControl1 extends RemoteControl { + public ConcreteRemoteControl1(TV tv) { + super(tv); + } + + @Override + public void on() { + System.out.println("ConcreteRemoteControl1.on()"); + tv.on(); + } + + @Override + public void off() { + System.out.println("ConcreteRemoteControl1.off()"); + tv.off(); + } + + @Override + public void tuneChannel() { + System.out.println("ConcreteRemoteControl1.tuneChannel()"); + tv.tuneChannel(); + } +} +``` + +```java +public class ConcreteRemoteControl2 extends RemoteControl { + public ConcreteRemoteControl2(TV tv) { + super(tv); + } + + @Override + public void on() { + System.out.println("ConcreteRemoteControl2.on()"); + tv.on(); + } + + @Override + public void off() { + System.out.println("ConcreteRemoteControl2.off()"); + tv.off(); + } + + @Override + public void tuneChannel() { + System.out.println("ConcreteRemoteControl2.tuneChannel()"); + tv.tuneChannel(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + RemoteControl remoteControl1 = new ConcreteRemoteControl1(new RCA()); + remoteControl1.on(); + remoteControl1.off(); + remoteControl1.tuneChannel(); + RemoteControl remoteControl2 = new ConcreteRemoteControl2(new Sony()); + remoteControl2.on(); + remoteControl2.off(); + remoteControl2.tuneChannel(); + } +} +``` + +### JDK + +- AWT (It provides an abstraction layer which maps onto the native OS the windowing support.) +- JDBC + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\346\250\241\346\235\277\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\346\250\241\346\235\277\346\250\241\345\274\217.md" new file mode 100644 index 00000000..6feaf664 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\346\250\241\346\235\277\346\250\241\345\274\217.md" @@ -0,0 +1,111 @@ +## 模板方法(Template Method) + +### 介绍 + +在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 + +### Intent + +定义算法框架,并将一些步骤的实现延迟到子类。 + +通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。 + +### Class Diagram + +

+ +### Implementation + +冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。 + +

+ +```java +public abstract class CaffeineBeverage { + + final void prepareRecipe() { + boilWater(); + brew(); + pourInCup(); + addCondiments(); + } + + abstract void brew(); + + abstract void addCondiments(); + + void boilWater() { + System.out.println("boilWater"); + } + + void pourInCup() { + System.out.println("pourInCup"); + } +} +``` + +```java +public class Coffee extends CaffeineBeverage { + @Override + void brew() { + System.out.println("Coffee.brew"); + } + + @Override + void addCondiments() { + System.out.println("Coffee.addCondiments"); + } +} +``` + +```java +public class Tea extends CaffeineBeverage { + @Override + void brew() { + System.out.println("Tea.brew"); + } + + @Override + void addCondiments() { + System.out.println("Tea.addCondiments"); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + CaffeineBeverage caffeineBeverage = new Coffee(); + caffeineBeverage.prepareRecipe(); + System.out.println("-----------"); + caffeineBeverage = new Tea(); + caffeineBeverage.prepareRecipe(); + } +} +``` + +```html +boilWater +Coffee.brew +pourInCup +Coffee.addCondiments +----------- +boilWater +Tea.brew +pourInCup +Tea.addCondiments +``` + +### JDK + +- java.util.Collections#sort() +- java.io.InputStream#skip() +- java.io.InputStream#read() +- java.util.AbstractList#indexOf() + + + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\212\266\346\200\201\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\212\266\346\200\201\346\250\241\345\274\217.md" new file mode 100644 index 00000000..d2dbf6a0 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\212\266\346\200\201\346\250\241\345\274\217.md" @@ -0,0 +1,318 @@ +## 状态(State) + +### 介绍 + +在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 + +在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 + +### Intent + +允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它所属的类。 + +### Class Diagram + +

+ +### Implementation + +糖果销售机有多种状态,每种状态下销售机有不同的行为,状态可以发生转移,使得销售机的行为也发生改变。 + +

+ +```java +public interface State { + /** + * 投入 25 分钱 + */ + void insertQuarter(); + + /** + * 退回 25 分钱 + */ + void ejectQuarter(); + + /** + * 转动曲柄 + */ + void turnCrank(); + + /** + * 发放糖果 + */ + void dispense(); +} +``` + +```java +public class HasQuarterState implements State { + + private GumballMachine gumballMachine; + + public HasQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + @Override + public void insertQuarter() { + System.out.println("You can't insert another quarter"); + } + + @Override + public void ejectQuarter() { + System.out.println("Quarter returned"); + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } + + @Override + public void turnCrank() { + System.out.println("You turned..."); + gumballMachine.setState(gumballMachine.getSoldState()); + } + + @Override + public void dispense() { + System.out.println("No gumball dispensed"); + } +} +``` + +```java +public class NoQuarterState implements State { + + GumballMachine gumballMachine; + + public NoQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + @Override + public void insertQuarter() { + System.out.println("You insert a quarter"); + gumballMachine.setState(gumballMachine.getHasQuarterState()); + } + + @Override + public void ejectQuarter() { + System.out.println("You haven't insert a quarter"); + } + + @Override + public void turnCrank() { + System.out.println("You turned, but there's no quarter"); + } + + @Override + public void dispense() { + System.out.println("You need to pay first"); + } +} +``` + +```java +public class SoldOutState implements State { + + GumballMachine gumballMachine; + + public SoldOutState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + @Override + public void insertQuarter() { + System.out.println("You can't insert a quarter, the machine is sold out"); + } + + @Override + public void ejectQuarter() { + System.out.println("You can't eject, you haven't inserted a quarter yet"); + } + + @Override + public void turnCrank() { + System.out.println("You turned, but there are no gumballs"); + } + + @Override + public void dispense() { + System.out.println("No gumball dispensed"); + } +} +``` + +```java +public class SoldState implements State { + + GumballMachine gumballMachine; + + public SoldState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + @Override + public void insertQuarter() { + System.out.println("Please wait, we're already giving you a gumball"); + } + + @Override + public void ejectQuarter() { + System.out.println("Sorry, you already turned the crank"); + } + + @Override + public void turnCrank() { + System.out.println("Turning twice doesn't get you another gumball!"); + } + + @Override + public void dispense() { + gumballMachine.releaseBall(); + if (gumballMachine.getCount() > 0) { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } else { + System.out.println("Oops, out of gumballs"); + gumballMachine.setState(gumballMachine.getSoldOutState()); + } + } +} +``` + +```java +public class GumballMachine { + + private State soldOutState; + private State noQuarterState; + private State hasQuarterState; + private State soldState; + + private State state; + private int count = 0; + + public GumballMachine(int numberGumballs) { + count = numberGumballs; + soldOutState = new SoldOutState(this); + noQuarterState = new NoQuarterState(this); + hasQuarterState = new HasQuarterState(this); + soldState = new SoldState(this); + + if (numberGumballs > 0) { + state = noQuarterState; + } else { + state = soldOutState; + } + } + + public void insertQuarter() { + state.insertQuarter(); + } + + public void ejectQuarter() { + state.ejectQuarter(); + } + + public void turnCrank() { + state.turnCrank(); + state.dispense(); + } + + public void setState(State state) { + this.state = state; + } + + public void releaseBall() { + System.out.println("A gumball comes rolling out the slot..."); + if (count != 0) { + count -= 1; + } + } + + public State getSoldOutState() { + return soldOutState; + } + + public State getNoQuarterState() { + return noQuarterState; + } + + public State getHasQuarterState() { + return hasQuarterState; + } + + public State getSoldState() { + return soldState; + } + + public int getCount() { + return count; + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + GumballMachine gumballMachine = new GumballMachine(5); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + gumballMachine.insertQuarter(); + gumballMachine.ejectQuarter(); + gumballMachine.turnCrank(); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.ejectQuarter(); + + gumballMachine.insertQuarter(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + } +} +``` + +```html +You insert a quarter +You turned... +A gumball comes rolling out the slot... +You insert a quarter +Quarter returned +You turned, but there's no quarter +You need to pay first +You insert a quarter +You turned... +A gumball comes rolling out the slot... +You insert a quarter +You turned... +A gumball comes rolling out the slot... +You haven't insert a quarter +You insert a quarter +You can't insert another quarter +You turned... +A gumball comes rolling out the slot... +You insert a quarter +You turned... +A gumball comes rolling out the slot... +Oops, out of gumballs +You can't insert a quarter, the machine is sold out +You turned, but there are no gumballs +No gumball dispensed +``` +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\251\272\345\257\271\350\261\241\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\251\272\345\257\271\350\261\241\346\250\241\345\274\217.md" new file mode 100644 index 00000000..60221f94 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\251\272\345\257\271\350\261\241\346\250\241\345\274\217.md" @@ -0,0 +1,72 @@ +## 空对象(Null) + +### 介绍 + +在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。 + +在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。 + +### Intent + +使用什么都不做 + +的空对象来代替 NULL。 + +一个方法返回 NULL,意味着方法的调用端需要去检查返回值是否是 NULL,这么做会导致非常多的冗余的检查代码。并且如果某一个调用端忘记了做这个检查返回值,而直接使用返回的对象,那么就有可能抛出空指针异常。 + +### Class Diagram + +

+ +### Implementation + +```java +public abstract class AbstractOperation { + abstract void request(); +} +``` + +```java +public class RealOperation extends AbstractOperation { + @Override + void request() { + System.out.println("do something"); + } +} +``` + +```java +public class NullOperation extends AbstractOperation{ + @Override + void request() { + // do nothing + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + AbstractOperation abstractOperation = func(-1); + abstractOperation.request(); + } + + public static AbstractOperation func(int para) { + if (para < 0) { + return new NullOperation(); + } + return new RealOperation(); + } +} +``` +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\255\226\347\225\245\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\255\226\347\225\245\346\250\241\345\274\217.md" new file mode 100644 index 00000000..e17416c6 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\255\226\347\225\245\346\250\241\345\274\217.md" @@ -0,0 +1,106 @@ +## 策略(Strategy) + +### 介绍 + +在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 + +在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 + +### Intent + +定义一系列算法,封装每个算法,并使它们可以互换。 + +策略模式可以让算法独立于使用它的客户端。 + +### Class Diagram + +- Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。 +- Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。 + +

+ +### 与状态模式的比较 + +状态模式的类图和策略模式类似,并且都是能够动态改变对象的行为。但是状态模式是通过状态转移来改变 Context 所组合的 State 对象,而策略模式是通过 Context 本身的决策来改变组合的 Strategy 对象。所谓的状态转移,是指 Context 在运行过程中由于一些条件发生改变而使得 State 对象发生改变,注意必须要是在运行过程中。 + +状态模式主要是用来解决状态转移的问题,当状态发生转移了,那么 Context 对象就会改变它的行为;而策略模式主要是用来封装一组可以互相替代的算法族,并且可以根据需要动态地去替换 Context 使用的算法。 + +### Implementation + +设计一个鸭子,它可以动态地改变叫声。这里的算法族是鸭子的叫声行为。 + +```java +public interface QuackBehavior { + void quack(); +} +``` + +```java +public class Quack implements QuackBehavior { + @Override + public void quack() { + System.out.println("quack!"); + } +} +``` + +```java +public class Squeak implements QuackBehavior{ + @Override + public void quack() { + System.out.println("squeak!"); + } +} +``` + +```java +public class Duck { + + private QuackBehavior quackBehavior; + + public void performQuack() { + if (quackBehavior != null) { + quackBehavior.quack(); + } + } + + public void setQuackBehavior(QuackBehavior quackBehavior) { + this.quackBehavior = quackBehavior; + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + Duck duck = new Duck(); + duck.setQuackBehavior(new Squeak()); + duck.performQuack(); + duck.setQuackBehavior(new Quack()); + duck.performQuack(); + } +} +``` + +```html +squeak! +quack! +``` + +### JDK + +- java.util.Comparator#compare() +- javax.servlet.http.HttpServlet +- javax.servlet.Filter#doFilter() + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\256\200\345\215\225\345\267\245\345\216\202\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\256\200\345\215\225\345\267\245\345\216\202\346\250\241\345\274\217.md" new file mode 100644 index 00000000..6da387cf --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\256\200\345\215\225\345\267\245\345\216\202\346\250\241\345\274\217.md" @@ -0,0 +1,97 @@ +## 简单工厂(Simple Factory) + +### 介绍 + +简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 + +### Intent + +在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。 + +### Class Diagram + +简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。 + +这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,例如增加子类,那么所有的客户类都要进行修改。 + +

+ +### Implementation + +```java +public interface Product { +} +``` + +```java +public class ConcreteProduct implements Product { +} +``` + +```java +public class ConcreteProduct1 implements Product { +} +``` + +```java +public class ConcreteProduct2 implements Product { +} +``` + +以下的 Client 类包含了实例化的代码,这是一种错误的实现。如果在客户类中存在这种实例化代码,就需要考虑将代码放到简单工厂中。 + +```java +public class Client { + + public static void main(String[] args) { + int type = 1; + Product product; + if (type == 1) { + product = new ConcreteProduct1(); + } else if (type == 2) { + product = new ConcreteProduct2(); + } else { + product = new ConcreteProduct(); + } + // do something with the product + } +} +``` + +以下的 SimpleFactory 是简单工厂实现,它被所有需要进行实例化的客户类调用。 + +```java +public class SimpleFactory { + + public Product createProduct(int type) { + if (type == 1) { + return new ConcreteProduct1(); + } else if (type == 2) { + return new ConcreteProduct2(); + } + return new ConcreteProduct(); + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + SimpleFactory simpleFactory = new SimpleFactory(); + Product product = simpleFactory.createProduct(1); + // do something with the product + } +} +``` +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\273\204\345\220\210\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\273\204\345\220\210\346\250\241\345\274\217.md" new file mode 100644 index 00000000..4897f247 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\347\273\204\345\220\210\346\250\241\345\274\217.md" @@ -0,0 +1,150 @@ +## 组合(Composite) + +### 介绍 + +组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 + +这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 + +### Intent + +将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。 + +### Class Diagram + +组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。 + +组合对象拥有一个或者多个组件对象,因此组合对象的操作可以委托给组件对象去处理,而组件对象可以是另一个组合对象或者叶子对象。 + +

+ +### Implementation + +```java +public abstract class Component { + protected String name; + + public Component(String name) { + this.name = name; + } + + public void print() { + print(0); + } + + abstract void print(int level); + + abstract public void add(Component component); + + abstract public void remove(Component component); +} +``` + +```java +public class Composite extends Component { + + private List child; + + public Composite(String name) { + super(name); + child = new ArrayList<>(); + } + + @Override + void print(int level) { + for (int i = 0; i < level; i++) { + System.out.print("--"); + } + System.out.println("Composite:" + name); + for (Component component : child) { + component.print(level + 1); + } + } + + @Override + public void add(Component component) { + child.add(component); + } + + @Override + public void remove(Component component) { + child.remove(component); + } +} +``` + +```java +public class Leaf extends Component { + public Leaf(String name) { + super(name); + } + + @Override + void print(int level) { + for (int i = 0; i < level; i++) { + System.out.print("--"); + } + System.out.println("left:" + name); + } + + @Override + public void add(Component component) { + throw new UnsupportedOperationException(); // 牺牲透明性换取单一职责原则,这样就不用考虑是叶子节点还是组合节点 + } + + @Override + public void remove(Component component) { + throw new UnsupportedOperationException(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Composite root = new Composite("root"); + Component node1 = new Leaf("1"); + Component node2 = new Composite("2"); + Component node3 = new Leaf("3"); + root.add(node1); + root.add(node2); + root.add(node3); + Component node21 = new Leaf("21"); + Component node22 = new Composite("22"); + node2.add(node21); + node2.add(node22); + Component node221 = new Leaf("221"); + node22.add(node221); + root.print(); + } +} +``` + +```html +Composite:root +--left:1 +--Composite:2 +----left:21 +----Composite:22 +------left:221 +--left:3 +``` + +### JDK + +- javax.swing.JComponent#add(Component) +- java.awt.Container#add(Component) +- java.util.Map#putAll(Map) +- java.util.List#addAll(Collection) +- java.util.Set#addAll(Collection) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\243\205\351\245\260\350\200\205\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\243\205\351\245\260\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 00000000..7a1d643e --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\243\205\351\245\260\350\200\205\346\250\241\345\274\217.md" @@ -0,0 +1,126 @@ +## 装饰(Decorator) + +### 介绍 + +装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 + +这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 + +我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。 + +### Intent + +为对象动态添加功能。 + +### Class Diagram + +装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也保留了被装饰者的功能。可以看到,具体组件应当是装饰层次的最低层,因为只有具体组件的方法实现不需要依赖于其它对象。 + +

+ +### Implementation + +设计不同种类的饮料,饮料可以添加配料,比如可以添加牛奶,并且支持动态添加新配料。每增加一种配料,该饮料的价格就会增加,要求计算一种饮料的价格。 + +下图表示在 DarkRoast 饮料上新增新添加 Mocha 配料,之后又添加了 Whip 配料。DarkRoast 被 Mocha 包裹,Mocha 又被 Whip 包裹。它们都继承自相同父类,都有 cost() 方法,外层类的 cost() 方法调用了内层类的 cost() 方法。 + +

+ +```java +public interface Beverage { + double cost(); +} +``` + +```java +public class DarkRoast implements Beverage { + @Override + public double cost() { + return 1; + } +} +``` + +```java +public class HouseBlend implements Beverage { + @Override + public double cost() { + return 1; + } +} +``` + +```java +public abstract class CondimentDecorator implements Beverage { + protected Beverage beverage; +} +``` + +```java +public class Milk extends CondimentDecorator { + + public Milk(Beverage beverage) { + this.beverage = beverage; + } + + @Override + public double cost() { + return 1 + beverage.cost(); + } +} +``` + +```java +public class Mocha extends CondimentDecorator { + + public Mocha(Beverage beverage) { + this.beverage = beverage; + } + + @Override + public double cost() { + return 1 + beverage.cost(); + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + Beverage beverage = new HouseBlend(); + beverage = new Mocha(beverage); + beverage = new Milk(beverage); + System.out.println(beverage.cost()); + } +} +``` + +```html +3.0 +``` + +### 设计原则 + +类应该对扩展开放,对修改关闭:也就是添加新功能时不需要修改代码。饮料可以动态添加新的配料,而不需要去修改饮料的代码。 + +不可能把所有的类设计成都满足这一原则,应当把该原则应用于最有可能发生改变的地方。 + +### JDK + +- java.io.BufferedInputStream(InputStream) +- java.io.DataInputStream(InputStream) +- java.io.BufferedOutputStream(OutputStream) +- java.util.zip.ZipOutputStream(OutputStream) +- java.util.Collections#checked[List|Map|Set|SortedSet|SortedMap]() + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 00000000..c86ff758 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" @@ -0,0 +1,149 @@ +## 观察者(Observer) + +### 介绍 + +当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 + +### Intent + +定义对象之间的一对多依赖,当一个对象状态改变时,它的所有依赖都会收到通知并且自动更新状态。 + +主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。 + +

+ +### Class Diagram + +主题(Subject)具有注册和移除观察者、并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。 + +观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法。 + +

+ +### Implementation + +天气数据布告板会在天气信息发生改变时更新其内容,布告板有多个,并且在将来会继续增加。 + +

+ +```java +public interface Subject { + void registerObserver(Observer o); + + void removeObserver(Observer o); + + void notifyObserver(); +} +``` + +```java +public class WeatherData implements Subject { + private List observers; + private float temperature; + private float humidity; + private float pressure; + + public WeatherData() { + observers = new ArrayList<>(); + } + + public void setMeasurements(float temperature, float humidity, float pressure) { + this.temperature = temperature; + this.humidity = humidity; + this.pressure = pressure; + notifyObserver(); + } + + @Override + public void registerObserver(Observer o) { + observers.add(o); + } + + @Override + public void removeObserver(Observer o) { + int i = observers.indexOf(o); + if (i >= 0) { + observers.remove(i); + } + } + + @Override + public void notifyObserver() { + for (Observer o : observers) { + o.update(temperature, humidity, pressure); + } + } +} +``` + +```java +public interface Observer { + void update(float temp, float humidity, float pressure); +} +``` + +```java +public class StatisticsDisplay implements Observer { + + public StatisticsDisplay(Subject weatherData) { + weatherData.reisterObserver(this); + } + + @Override + public void update(float temp, float humidity, float pressure) { + System.out.println("StatisticsDisplay.update: " + temp + " " + humidity + " " + pressure); + } +} +``` + +```java +public class CurrentConditionsDisplay implements Observer { + + public CurrentConditionsDisplay(Subject weatherData) { + weatherData.registerObserver(this); + } + + @Override + public void update(float temp, float humidity, float pressure) { + System.out.println("CurrentConditionsDisplay.update: " + temp + " " + humidity + " " + pressure); + } +} +``` + +```java +public class WeatherStation { + public static void main(String[] args) { + WeatherData weatherData = new WeatherData(); + CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData); + StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData); + + weatherData.setMeasurements(0, 0, 0); + weatherData.setMeasurements(1, 1, 1); + } +} +``` + +```html +CurrentConditionsDisplay.update: 0.0 0.0 0.0 +StatisticsDisplay.update: 0.0 0.0 0.0 +CurrentConditionsDisplay.update: 1.0 1.0 1.0 +StatisticsDisplay.update: 1.0 1.0 1.0 +``` + +### JDK + +- [java.util.Observer](http://docs.oracle.com/javase/8/docs/api/java/util/Observer.html) +- [java.util.EventListener](http://docs.oracle.com/javase/8/docs/api/java/util/EventListener.html) +- [javax.servlet.http.HttpSessionBindingListener](http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSessionBindingListener.html) +- [RxJava](https://github.com/ReactiveX/RxJava) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\247\243\351\207\212\345\231\250\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\247\243\351\207\212\345\231\250\346\250\241\345\274\217.md" new file mode 100644 index 00000000..f22b470c --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\247\243\351\207\212\345\231\250\346\250\241\345\274\217.md" @@ -0,0 +1,138 @@ +## 解释器(Interpreter) + +### 介绍 + +解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 + +### Intent + +为语言创建解释器,通常由语言的语法和语法分析来定义。 + +### Class Diagram + +- TerminalExpression:终结符表达式,每个终结符都需要一个 TerminalExpression。 +- Context:上下文,包含解释器之外的一些全局信息。 + +

+ +### Implementation + +以下是一个规则检验器实现,具有 and 和 or 规则,通过规则可以构建一颗解析树,用来检验一个文本是否满足解析树定义的规则。 + +例如一颗解析树为 D And (A Or (B C)),文本 "D A" 满足该解析树定义的规则。 + +这里的 Context 指的是 String。 + +```java +public abstract class Expression { + public abstract boolean interpret(String str); +} +``` + +```java +public class TerminalExpression extends Expression { + + private String literal = null; + + public TerminalExpression(String str) { + literal = str; + } + + public boolean interpret(String str) { + StringTokenizer st = new StringTokenizer(str); + while (st.hasMoreTokens()) { + String test = st.nextToken(); + if (test.equals(literal)) { + return true; + } + } + return false; + } +} +``` + +```java +public class AndExpression extends Expression { + + private Expression expression1 = null; + private Expression expression2 = null; + + public AndExpression(Expression expression1, Expression expression2) { + this.expression1 = expression1; + this.expression2 = expression2; + } + + public boolean interpret(String str) { + return expression1.interpret(str) && expression2.interpret(str); + } +} +``` + +```java +public class OrExpression extends Expression { + private Expression expression1 = null; + private Expression expression2 = null; + + public OrExpression(Expression expression1, Expression expression2) { + this.expression1 = expression1; + this.expression2 = expression2; + } + + public boolean interpret(String str) { + return expression1.interpret(str) || expression2.interpret(str); + } +} +``` + +```java +public class Client { + + /** + * 构建解析树 + */ + public static Expression buildInterpreterTree() { + // Literal + Expression terminal1 = new TerminalExpression("A"); + Expression terminal2 = new TerminalExpression("B"); + Expression terminal3 = new TerminalExpression("C"); + Expression terminal4 = new TerminalExpression("D"); + // B C + Expression alternation1 = new OrExpression(terminal2, terminal3); + // A Or (B C) + Expression alternation2 = new OrExpression(terminal1, alternation1); + // D And (A Or (B C)) + return new AndExpression(terminal4, alternation2); + } + + public static void main(String[] args) { + Expression define = buildInterpreterTree(); + String context1 = "D A"; + String context2 = "A B"; + System.out.println(define.interpret(context1)); + System.out.println(define.interpret(context2)); + } +} +``` + +```html +true +false +``` + +### JDK + +- [java.util.Pattern](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) +- [java.text.Normalizer](http://docs.oracle.com/javase/8/docs/api/java/text/Normalizer.html) +- All subclasses of [java.text.Format](http://docs.oracle.com/javase/8/docs/api/java/text/Format.html) +- [javax.el.ELResolver](http://docs.oracle.com/javaee/7/api/javax/el/ELResolver.html) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\256\277\351\227\256\350\200\205\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\256\277\351\227\256\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 00000000..bc5226de --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\256\277\351\227\256\350\200\205\346\250\241\345\274\217.md" @@ -0,0 +1,220 @@ +## 访问者(Visitor) + +### 介绍 + +在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 + +### Intent + +为一个对象结构(比如组合结构)增加新能力。 + +### Class Diagram + +- Visitor:访问者,为每一个 ConcreteElement 声明一个 visit 操作 +- ConcreteVisitor:具体访问者,存储遍历过程中的累计结果 +- ObjectStructure:对象结构,可以是组合结构,或者是一个集合。 + +

+ +### Implementation + +```java +public interface Element { + void accept(Visitor visitor); +} +``` + +```java +class CustomerGroup { + + private List customers = new ArrayList<>(); + + void accept(Visitor visitor) { + for (Customer customer : customers) { + customer.accept(visitor); + } + } + + void addCustomer(Customer customer) { + customers.add(customer); + } +} +``` + +```java +public class Customer implements Element { + + private String name; + private List orders = new ArrayList<>(); + + Customer(String name) { + this.name = name; + } + + String getName() { + return name; + } + + void addOrder(Order order) { + orders.add(order); + } + + public void accept(Visitor visitor) { + visitor.visit(this); + for (Order order : orders) { + order.accept(visitor); + } + } +} +``` + +```java +public class Order implements Element { + + private String name; + private List items = new ArrayList(); + + Order(String name) { + this.name = name; + } + + Order(String name, String itemName) { + this.name = name; + this.addItem(new Item(itemName)); + } + + String getName() { + return name; + } + + void addItem(Item item) { + items.add(item); + } + + public void accept(Visitor visitor) { + visitor.visit(this); + + for (Item item : items) { + item.accept(visitor); + } + } +} +``` + +```java +public class Item implements Element { + + private String name; + + Item(String name) { + this.name = name; + } + + String getName() { + return name; + } + + public void accept(Visitor visitor) { + visitor.visit(this); + } +} +``` + +```java +public interface Visitor { + void visit(Customer customer); + + void visit(Order order); + + void visit(Item item); +} +``` + +```java +public class GeneralReport implements Visitor { + + private int customersNo; + private int ordersNo; + private int itemsNo; + + public void visit(Customer customer) { + System.out.println(customer.getName()); + customersNo++; + } + + public void visit(Order order) { + System.out.println(order.getName()); + ordersNo++; + } + + public void visit(Item item) { + System.out.println(item.getName()); + itemsNo++; + } + + public void displayResults() { + System.out.println("Number of customers: " + customersNo); + System.out.println("Number of orders: " + ordersNo); + System.out.println("Number of items: " + itemsNo); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Customer customer1 = new Customer("customer1"); + customer1.addOrder(new Order("order1", "item1")); + customer1.addOrder(new Order("order2", "item1")); + customer1.addOrder(new Order("order3", "item1")); + + Order order = new Order("order_a"); + order.addItem(new Item("item_a1")); + order.addItem(new Item("item_a2")); + order.addItem(new Item("item_a3")); + Customer customer2 = new Customer("customer2"); + customer2.addOrder(order); + + CustomerGroup customers = new CustomerGroup(); + customers.addCustomer(customer1); + customers.addCustomer(customer2); + + GeneralReport visitor = new GeneralReport(); + customers.accept(visitor); + visitor.displayResults(); + } +} +``` + +```html +customer1 +order1 +item1 +order2 +item1 +order3 +item1 +customer2 +order_a +item_a1 +item_a2 +item_a3 +Number of customers: 2 +Number of orders: 4 +Number of items: 6 +``` + +### JDK + +- javax.lang.model.element.Element and javax.lang.model.element.ElementVisitor +- javax.lang.model.type.TypeMirror and javax.lang.model.type.TypeVisitor + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" new file mode 100644 index 00000000..5c1ae961 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" @@ -0,0 +1,147 @@ +## 责任链(Chain Of Responsibility) + +### 介绍 + +顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 + +在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 + +### Intent + +使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。 + +### Class Diagram + +- Handler:定义处理请求的接口,并且实现后继链(successor) + +

+ +### Implementation + +```java +public abstract class Handler { + + protected Handler successor; + + + public Handler(Handler successor) { + this.successor = successor; + } + + + protected abstract void handleRequest(Request request); +} +``` + +```java +public class ConcreteHandler1 extends Handler { + + public ConcreteHandler1(Handler successor) { + super(successor); + } + + + @Override + protected void handleRequest(Request request) { + if (request.getType() == RequestType.TYPE1) { + System.out.println(request.getName() + " is handle by ConcreteHandler1"); + return; + } + if (successor != null) { + successor.handleRequest(request); + } + } +} +``` + +```java +public class ConcreteHandler2 extends Handler { + + public ConcreteHandler2(Handler successor) { + super(successor); + } + + + @Override + protected void handleRequest(Request request) { + if (request.getType() == RequestType.TYPE2) { + System.out.println(request.getName() + " is handle by ConcreteHandler2"); + return; + } + if (successor != null) { + successor.handleRequest(request); + } + } +} +``` + +```java +public class Request { + + private RequestType type; + private String name; + + + public Request(RequestType type, String name) { + this.type = type; + this.name = name; + } + + + public RequestType getType() { + return type; + } + + + public String getName() { + return name; + } +} + +``` + +```java +public enum RequestType { + TYPE1, TYPE2 +} +``` + +```java +public class Client { + + public static void main(String[] args) { + + Handler handler1 = new ConcreteHandler1(null); + Handler handler2 = new ConcreteHandler2(handler1); + + Request request1 = new Request(RequestType.TYPE1, "request1"); + handler2.handleRequest(request1); + + Request request2 = new Request(RequestType.TYPE2, "request2"); + handler2.handleRequest(request2); + } +} +``` + +```html +request1 is handle by ConcreteHandler1 +request2 is handle by ConcreteHandler2 +``` + +### JDK + +- [java.util.logging.Logger#log()](http://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html#log%28java.util.logging.Level,%20java.lang.String%29) +- [Apache Commons Chain](https://commons.apache.org/proper/commons-chain/index.html) +- [javax.servlet.Filter#doFilter()](http://docs.oracle.com/javaee/7/api/javax/servlet/Filter.html#doFilter-javax.servlet.ServletRequest-javax.servlet.ServletResponse-javax.servlet.FilterChain-) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\277\255\344\273\243\345\231\250\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\277\255\344\273\243\345\231\250\346\250\241\345\274\217.md" new file mode 100644 index 00000000..348b1653 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\350\277\255\344\273\243\345\231\250\346\250\241\345\274\217.md" @@ -0,0 +1,104 @@ +## 迭代器(Iterator) + +### 介绍 + +迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 + +### Intent + +提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。 + +### Class Diagram + +- Aggregate 是聚合类,其中 createIterator() 方法可以产生一个 Iterator; +- Iterator 主要定义了 hasNext() 和 next() 方法; +- Client 组合了 Aggregate,为了迭代遍历 Aggregate,也需要组合 Iterator。 + +
image-20191130164425351

+ +### Implementation + +```java +public interface Aggregate { + Iterator createIterator(); +} +``` + +```java +public class ConcreteAggregate implements Aggregate { + + private Integer[] items; + + public ConcreteAggregate() { + items = new Integer[10]; + for (int i = 0; i < items.length; i++) { + items[i] = i; + } + } + + @Override + public Iterator createIterator() { + return new ConcreteIterator(items); + } +} +``` + +```java +public interface Iterator { + + Item next(); + + boolean hasNext(); +} +``` + +```java +public class ConcreteIterator implements Iterator { + + private Item[] items; + private int position = 0; + + public ConcreteIterator(Item[] items) { + this.items = items; + } + + @Override + public Object next() { + return items[position++]; + } + + @Override + public boolean hasNext() { + return position < items.length; + } +} +``` + +```java +public class Client { + + public static void main(String[] args) { + Aggregate aggregate = new ConcreteAggregate(); + Iterator iterator = aggregate.createIterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } +} +``` + +### JDK + +- [java.util.Iterator](http://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html) +- [java.util.Enumeration](http://docs.oracle.com/javase/8/docs/api/java/util/Enumeration.html) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" new file mode 100644 index 00000000..60d91e16 --- /dev/null +++ "b/\347\256\227\346\263\225\350\257\273\347\211\251/\350\256\276\350\256\241\346\250\241\345\274\217/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" @@ -0,0 +1,87 @@ +## 适配器(Adapter) + +### 介绍 + +适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 + +这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。 + +### Intent + +把一个类接口转换成另一个用户需要的接口。 + +

+ +### Class Diagram + +

+ +### Implementation + +鸭子(Duck)和火鸡(Turkey)拥有不同的叫声,Duck 的叫声调用 quack() 方法,而 Turkey 调用 gobble() 方法。 + +要求将 Turkey 的 gobble() 方法适配成 Duck 的 quack() 方法,从而让火鸡冒充鸭子! + +```java +public interface Duck { + void quack(); +} +``` + +```java +public interface Turkey { + void gobble(); +} +``` + +```java +public class WildTurkey implements Turkey { + @Override + public void gobble() { + System.out.println("gobble!"); + } +} +``` + +```java +public class TurkeyAdapter implements Duck { + Turkey turkey; + + public TurkeyAdapter(Turkey turkey) { + this.turkey = turkey; + } + + @Override + public void quack() { + turkey.gobble(); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Turkey turkey = new WildTurkey(); + Duck duck = new TurkeyAdapter(turkey); + duck.quack(); + } +} +``` + +### JDK + +- [java.util.Arrays#asList()](http://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#asList%28T...%29) +- [java.util.Collections#list()](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#list-java.util.Enumeration-) +- [java.util.Collections#enumeration()](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#enumeration-java.util.Collection-) +- [javax.xml.bind.annotation.adapters.XMLAdapter](http://docs.oracle.com/javase/8/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html#marshal-BoundType-) + +你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图! + +
+ +
+ + + + + diff --git "a/\347\256\227\346\263\225\350\257\273\347\211\251/\351\255\224\345\205\275\344\270\226\347\225\214\345\271\263\350\241\241\347\256\227\346\263\225.zip" "b/\347\256\227\346\263\225\350\257\273\347\211\251/\351\255\224\345\205\275\344\270\226\347\225\214\345\271\263\350\241\241\347\256\227\346\263\225.zip" new file mode 100644 index 00000000..24561e6e Binary files /dev/null and "b/\347\256\227\346\263\225\350\257\273\347\211\251/\351\255\224\345\205\275\344\270\226\347\225\214\345\271\263\350\241\241\347\256\227\346\263\225.zip" differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/.DS_Store" deleted file mode 100644 index 0bd9da2b..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/01.Docker \345\255\246\344\271\240\357\274\210\347\262\276\346\240\241\357\274\211/docker.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/01.Docker \345\255\246\344\271\240\357\274\210\347\262\276\346\240\241\357\274\211/docker.pdf" deleted file mode 100644 index 01836c08..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/01.Docker \345\255\246\344\271\240\357\274\210\347\262\276\346\240\241\357\274\211/docker.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/02.Git\345\237\272\347\241\200\357\274\210\347\262\276\346\240\241\357\274\211/Git\345\237\272\347\241\200.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/02.Git\345\237\272\347\241\200\357\274\210\347\262\276\346\240\241\357\274\211/Git\345\237\272\347\241\200.pdf" deleted file mode 100644 index 4dd87448..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/02.Git\345\237\272\347\241\200\357\274\210\347\262\276\346\240\241\357\274\211/Git\345\237\272\347\241\200.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/03.Java\345\271\266\345\217\221\344\275\223\347\263\273\357\274\210\347\262\276\346\240\241\357\274\211/Java\345\271\266\345\217\221\344\275\223\347\263\273.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/03.Java\345\271\266\345\217\221\344\275\223\347\263\273\357\274\210\347\262\276\346\240\241\357\274\211/Java\345\271\266\345\217\221\344\275\223\347\263\273.pdf" deleted file mode 100644 index ae8564d0..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/03.Java\345\271\266\345\217\221\344\275\223\347\263\273\357\274\210\347\262\276\346\240\241\357\274\211/Java\345\271\266\345\217\221\344\275\223\347\263\273.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/04.JVM\345\222\214\346\200\247\350\203\275\350\260\203\344\274\230\357\274\210\347\262\276\346\240\241\357\274\211/JVM\345\222\214\346\200\247\350\203\275\344\274\230\345\214\226.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/04.JVM\345\222\214\346\200\247\350\203\275\350\260\203\344\274\230\357\274\210\347\262\276\346\240\241\357\274\211/JVM\345\222\214\346\200\247\350\203\275\344\274\230\345\214\226.pdf" deleted file mode 100644 index f0dd74f4..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/04.JVM\345\222\214\346\200\247\350\203\275\350\260\203\344\274\230\357\274\210\347\262\276\346\240\241\357\274\211/JVM\345\222\214\346\200\247\350\203\275\344\274\230\345\214\226.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/05.Kafka\357\274\210\347\262\276\346\240\241\357\274\211/kafka.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/05.Kafka\357\274\210\347\262\276\346\240\241\357\274\211/kafka.pdf" deleted file mode 100644 index a31d1889..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/05.Kafka\357\274\210\347\262\276\346\240\241\357\274\211/kafka.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/06.Mysql \346\225\264\345\220\210\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/MySQL.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/06.Mysql \346\225\264\345\220\210\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/MySQL.pdf" deleted file mode 100644 index bd1b4fbd..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/06.Mysql \346\225\264\345\220\210\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/MySQL.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/07.Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260\357\274\210\347\262\276\346\240\241\357\274\211/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/07.Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260\357\274\210\347\262\276\346\240\241\357\274\211/.DS_Store" deleted file mode 100644 index 38ac543c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/07.Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260\357\274\210\347\262\276\346\240\241\357\274\211/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/07.Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260\357\274\210\347\262\276\346\240\241\357\274\211/Redis.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/07.Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260\357\274\210\347\262\276\346\240\241\357\274\211/Redis.pdf" deleted file mode 100644 index 1c07f734..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/07.Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260\357\274\210\347\262\276\346\240\241\357\274\211/Redis.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/07.Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260\357\274\210\347\262\276\346\240\241\357\274\211/Redis.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/07.Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260\357\274\210\347\262\276\346\240\241\357\274\211/Redis.png" deleted file mode 100644 index 43dfbf4c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/07.Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260\357\274\210\347\262\276\346\240\241\357\274\211/Redis.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/08.Springboot\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/springboot\345\255\246\344\271\240\347\254\224\350\256\260.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/08.Springboot\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/springboot\345\255\246\344\271\240\347\254\224\350\256\260.pdf" deleted file mode 100644 index b9dc61f2..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/08.Springboot\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/springboot\345\255\246\344\271\240\347\254\224\350\256\260.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/09.Spring\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/Spring\345\255\246\344\271\240\347\254\224\350\256\260.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/09.Spring\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/Spring\345\255\246\344\271\240\347\254\224\350\256\260.pdf" deleted file mode 100644 index 56efbe91..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/09.Spring\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/Spring\345\255\246\344\271\240\347\254\224\350\256\260.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/09.Spring\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/Spring\345\255\246\344\271\240\347\254\224\350\256\260.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/09.Spring\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/Spring\345\255\246\344\271\240\347\254\224\350\256\260.png" deleted file mode 100644 index cbd38e71..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/09.Spring\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/Spring\345\255\246\344\271\240\347\254\224\350\256\260.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266\357\274\210\347\262\276\346\240\241\357\274\211/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266\357\274\210\347\262\276\346\240\241\357\274\211/.DS_Store" deleted file mode 100644 index e60144bf..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266\357\274\210\347\262\276\346\240\241\357\274\211/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266\357\274\210\347\262\276\346\240\241\357\274\211/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266\357\274\210\347\262\276\346\240\241\357\274\211/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266.pdf" deleted file mode 100644 index 7caf9869..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266\357\274\210\347\262\276\346\240\241\357\274\211/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266\357\274\210\347\262\276\346\240\241\357\274\211/algorithm.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266\357\274\210\347\262\276\346\240\241\357\274\211/algorithm.xmind" deleted file mode 100755 index 561896dd..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/11.\346\225\260\346\215\256\347\273\223\346\236\204\347\237\245\350\257\206\346\241\206\346\236\266\357\274\210\347\262\276\346\240\241\357\274\211/algorithm.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/12.\346\223\215\344\275\234\347\263\273\347\273\237\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\223\215\344\275\234\347\263\273\347\273\237.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/12.\346\223\215\344\275\234\347\263\273\347\273\237\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\223\215\344\275\234\347\263\273\347\273\237.pdf" deleted file mode 100644 index 3bf6ce20..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/12.\346\223\215\344\275\234\347\263\273\347\273\237\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\223\215\344\275\234\347\263\273\347\273\237.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/C++\350\257\255\346\263\225.JPG" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/C++\350\257\255\346\263\225.JPG" deleted file mode 100755 index f31376e2..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/C++\350\257\255\346\263\225.JPG" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/C++\350\257\255\346\263\2251.JPG" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/C++\350\257\255\346\263\2251.JPG" deleted file mode 100755 index 028e9c46..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/C++\350\257\255\346\263\2251.JPG" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/cpp.md" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/cpp.md" deleted file mode 100755 index 8b137891..00000000 --- "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/cpp.md" +++ /dev/null @@ -1 +0,0 @@ - diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/14.c++\345\237\272\347\241\200\345\222\214API\350\256\276\350\256\241 \357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/15.Hadoop\350\266\205\350\257\246\347\273\206\357\274\210\347\262\276\346\240\241\357\274\211/Hadoop.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/15.Hadoop\350\266\205\350\257\246\347\273\206\357\274\210\347\262\276\346\240\241\357\274\211/Hadoop.pdf" deleted file mode 100644 index b0807cd6..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/15.Hadoop\350\266\205\350\257\246\347\273\206\357\274\210\347\262\276\346\240\241\357\274\211/Hadoop.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/16.linux\345\237\272\347\241\200\347\237\245\350\257\206\357\274\210\347\262\276\346\240\241\357\274\211/linux\345\237\272\347\241\200\347\237\245\350\257\206.pdf" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/16.linux\345\237\272\347\241\200\347\237\245\350\257\206\357\274\210\347\262\276\346\240\241\357\274\211/linux\345\237\272\347\241\200\347\237\245\350\257\206.pdf" deleted file mode 100644 index 03c32791..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/16.linux\345\237\272\347\241\200\347\237\245\350\257\206\357\274\210\347\262\276\346\240\241\357\274\211/linux\345\237\272\347\241\200\347\237\245\350\257\206.pdf" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/17.js\347\237\245\350\257\206\345\255\246\344\271\240\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/17.js\347\237\245\350\257\206\345\255\246\344\271\240\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/18.Vue\346\241\206\346\236\266\346\200\235\347\273\264\345\257\274\345\233\276\347\254\224\350\256\260\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/18.Vue\346\241\206\346\236\266\346\200\235\347\273\264\345\257\274\345\233\276\347\254\224\350\256\260\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/19.CSS\345\222\214HTML\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/19.CSS\345\222\214HTML\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/20.28\345\274\240 \346\236\266\346\236\204\345\270\210\346\212\200\350\203\275\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/20.28\345\274\240 \346\236\266\346\236\204\345\270\210\346\212\200\350\203\275\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/21.\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\350\266\205\345\205\250\345\255\246\344\271\240\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/21.\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\350\266\205\345\205\250\345\255\246\344\271\240\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/22.MySQL\351\253\230\347\272\247\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/22.MySQL\351\253\230\347\272\247\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/23.MySQL\345\237\272\347\241\200\344\270\216\346\200\247\350\203\275\344\274\230\345\214\226\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/23.MySQL\345\237\272\347\241\200\344\270\216\346\200\247\350\203\275\344\274\230\345\214\226\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/24.\346\225\260\345\255\246\350\266\205\345\205\250\345\257\274\345\233\276\345\220\210\351\233\206\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/24.\346\225\260\345\255\246\350\266\205\345\205\250\345\257\274\345\233\276\345\220\210\351\233\206\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/25.NPDP \347\237\245\350\257\206\344\275\223\347\263\273\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/25.NPDP \347\237\245\350\257\206\344\275\223\347\263\273\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/26.JAVA\351\235\242\350\257\225\346\200\235\347\273\264\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/26.JAVA\351\235\242\350\257\225\346\200\235\347\273\264\345\257\274\345\233\276\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/27.\346\267\261\345\272\246\345\255\246\344\271\240\345\233\276\345\203\217\347\256\227\346\263\225\351\235\242\350\257\225\351\242\230\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/27.\346\267\261\345\272\246\345\255\246\344\271\240\345\233\276\345\203\217\347\256\227\346\263\225\351\235\242\350\257\225\351\242\230\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/28.\345\260\217\347\231\275\347\232\204\345\211\215\347\253\257\345\257\274\345\233\276\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/28.\345\260\217\347\231\275\347\232\204\345\211\215\347\253\257\345\257\274\345\233\276\346\261\207\346\200\273\357\274\210\347\262\276\346\240\241\357\274\211/\346\226\207\344\273\266\350\277\207\345\244\247,\344\270\213\346\226\271\351\223\276\346\216\245\344\270\213\350\275\275.txt" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\345\216\213\345\212\233\346\265\213\350\257\225.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\345\216\213\345\212\233\346\265\213\350\257\225.xmind" deleted file mode 100755 index b71a7613..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\345\216\213\345\212\233\346\265\213\350\257\225.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\345\216\213\345\212\233\346\265\213\350\257\225\345\234\272\346\231\257.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\345\216\213\345\212\233\346\265\213\350\257\225\345\234\272\346\231\257.xmind" deleted file mode 100755 index f4921698..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\345\216\213\345\212\233\346\265\213\350\257\225\345\234\272\346\231\257.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\346\265\213\350\257\225\347\237\245\350\257\206\344\275\223\347\263\273.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\346\265\213\350\257\225\347\237\245\350\257\206\344\275\223\347\263\273.xmind" deleted file mode 100755 index 88ab620d..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\346\265\213\350\257\225\347\237\245\350\257\206\344\275\223\347\263\273.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\347\247\273\345\212\250\345\256\242\346\210\267\347\253\257\351\200\232\347\224\250\346\265\213\350\257\225.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\347\247\273\345\212\250\345\256\242\346\210\267\347\253\257\351\200\232\347\224\250\346\265\213\350\257\225.xmind" deleted file mode 100755 index 20a9c9b5..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/29.\346\265\213\350\257\225\347\233\270\345\205\263/\347\247\273\345\212\250\345\256\242\346\210\267\347\253\257\351\200\232\347\224\250\346\265\213\350\257\225.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/30.Security\345\256\211\345\205\250\347\233\270\345\205\263/\345\256\211\345\205\250.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/30.Security\345\256\211\345\205\250\347\233\270\345\205\263/\345\256\211\345\205\250.xmind" deleted file mode 100755 index 2b0c0d39..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/30.Security\345\256\211\345\205\250\347\233\270\345\205\263/\345\256\211\345\205\250.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/Redis.md" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/Redis.md" deleted file mode 100755 index 8b137891..00000000 --- "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/Redis.md" +++ /dev/null @@ -1 +0,0 @@ - diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/Redis\345\206\205\345\255\230.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/Redis\345\206\205\345\255\230.png" deleted file mode 100755 index a5a180e3..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/Redis\345\206\205\345\255\230.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/redis\345\206\205\345\255\230\344\274\230\345\214\226.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/redis\345\206\205\345\255\230\344\274\230\345\214\226.png" deleted file mode 100755 index 957035e2..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/redis\345\206\205\345\255\230\344\274\230\345\214\226.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\345\223\250\345\205\265.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\345\223\250\345\205\265.png" deleted file mode 100755 index 68d78bbc..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\345\223\250\345\205\265.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\345\244\215\345\210\266.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\345\244\215\345\210\266.png" deleted file mode 100755 index 962fa6c9..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\345\244\215\345\210\266.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\346\214\201\344\271\205\345\214\226.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\346\214\201\344\271\205\345\214\226.png" deleted file mode 100755 index a16eeb39..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\346\214\201\344\271\205\345\214\226.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\347\274\223\345\255\230\350\256\276\350\256\241.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\347\274\223\345\255\230\350\256\276\350\256\241.png" deleted file mode 100755 index dd622280..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\347\274\223\345\255\230\350\256\276\350\256\241.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\351\230\273\345\241\236.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\351\230\273\345\241\236.png" deleted file mode 100755 index 4668fa00..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/31.Redis\347\233\270\345\205\263/\351\230\273\345\241\236.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/32.Zookeeper\347\233\270\345\205\263/Zookeeper.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/32.Zookeeper\347\233\270\345\205\263/Zookeeper.xmind" deleted file mode 100755 index 2eaefb03..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/32.Zookeeper\347\233\270\345\205\263/Zookeeper.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/.DS_Store" deleted file mode 100644 index 5454207d..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/1.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/1.jpg" deleted file mode 100755 index c049cd6d..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/1.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/2.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/2.jpg" deleted file mode 100755 index d1f2970f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/2.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/3.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/3.jpg" deleted file mode 100755 index 5d80eedf..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/3.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/4.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/4.jpg" deleted file mode 100755 index b0ab407b..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/4.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/5.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/5.jpg" deleted file mode 100755 index 2a287e72..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/5.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/6.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/6.jpg" deleted file mode 100755 index 27a2adec..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/6.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/Docker\347\256\200\344\273\213\345\222\214\345\237\272\346\234\254\346\246\202\345\277\265.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/Docker\347\256\200\344\273\213\345\222\214\345\237\272\346\234\254\346\246\202\345\277\265.png" deleted file mode 100755 index 166cb4a3..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/Docker\347\256\200\344\273\213\345\222\214\345\237\272\346\234\254\346\246\202\345\277\265.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/docker.md" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/docker.md" deleted file mode 100755 index 8b137891..00000000 --- "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/docker.md" +++ /dev/null @@ -1 +0,0 @@ - diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/\345\205\266\344\273\226.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/\345\205\266\344\273\226.png" deleted file mode 100755 index 043533cb..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/\345\205\266\344\273\226.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/\351\225\234\345\203\217\344\270\216\345\256\271\345\231\250.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/\351\225\234\345\203\217\344\270\216\345\256\271\345\231\250.png" deleted file mode 100755 index 61e90362..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Docker/\351\225\234\345\203\217\344\270\216\345\256\271\345\231\250.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Microservice" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Microservice" deleted file mode 100755 index 8b137891..00000000 --- "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/33.\345\276\256\346\234\215\345\212\241\347\233\270\345\205\263/Microservice" +++ /dev/null @@ -1 +0,0 @@ - diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/34.IO\346\265\201\347\233\270\345\205\263/IO Pattern.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/34.IO\346\265\201\347\233\270\345\205\263/IO Pattern.xmind" deleted file mode 100755 index 5ad0178f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/34.IO\346\265\201\347\233\270\345\205\263/IO Pattern.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/Git_V2.16.2.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/Git_V2.16.2.png" deleted file mode 100755 index 77433ffa..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/Git_V2.16.2.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git \346\223\215\344\275\234\346\211\213\345\206\214.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git \346\223\215\344\275\234\346\211\213\345\206\214.xmind" deleted file mode 100755 index 4fb6209f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git \346\223\215\344\275\234\346\211\213\345\206\214.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git \347\232\204\344\275\277\347\224\250.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git \347\232\204\344\275\277\347\224\250.xmind" deleted file mode 100755 index 533f95e3..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git \347\232\204\344\275\277\347\224\250.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git1.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git1.png" deleted file mode 100755 index b3fd11e6..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git1.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git\345\210\206\346\224\257\347\256\241\347\220\206\346\250\241\345\236\213.JPG" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git\345\210\206\346\224\257\347\256\241\347\220\206\346\250\241\345\236\213.JPG" deleted file mode 100755 index 3d6fd78c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git\345\210\206\346\224\257\347\256\241\347\220\206\346\250\241\345\236\213.JPG" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git\350\217\234\345\215\225.pptx" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git\350\217\234\345\215\225.pptx" deleted file mode 100755 index 97b50bbe..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/35.Git\347\233\270\345\205\263/git\350\217\234\345\215\225.pptx" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/36.Distributed/distributed.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/36.Distributed/distributed.xmind" deleted file mode 100755 index 5fa1206e..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/36.Distributed/distributed.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/37.Javascript \347\233\270\345\205\263/JavaScript.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/37.Javascript \347\233\270\345\205\263/JavaScript.xmind" deleted file mode 100755 index 181ca191..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/37.Javascript \347\233\270\345\205\263/JavaScript.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/37.Javascript \347\233\270\345\205\263/JavaScript\347\224\237\346\200\201\347\263\273\347\273\237.PNG" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/37.Javascript \347\233\270\345\205\263/JavaScript\347\224\237\346\200\201\347\263\273\347\273\237.PNG" deleted file mode 100755 index e53a8376..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/37.Javascript \347\233\270\345\205\263/JavaScript\347\224\237\346\200\201\347\263\273\347\273\237.PNG" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/38.Linux \347\233\270\345\205\263/Linux Security Coaching.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/38.Linux \347\233\270\345\205\263/Linux Security Coaching.png" deleted file mode 100755 index fcf9a683..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/38.Linux \347\233\270\345\205\263/Linux Security Coaching.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/38.Linux \347\233\270\345\205\263/Linux\345\255\246\344\271\240.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/38.Linux \347\233\270\345\205\263/Linux\345\255\246\344\271\240.xmind" deleted file mode 100755 index 4f19fd6c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/38.Linux \347\233\270\345\205\263/Linux\345\255\246\344\271\240.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/39.SEO \347\233\270\345\205\263/SEO\347\231\276\347\247\221.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/39.SEO \347\233\270\345\205\263/SEO\347\231\276\347\247\221.xmind" deleted file mode 100755 index da3902c5..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/39.SEO \347\233\270\345\205\263/SEO\347\231\276\347\247\221.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/39.SEO \347\233\270\345\205\263/SEO\347\233\270\345\205\263.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/39.SEO \347\233\270\345\205\263/SEO\347\233\270\345\205\263.xmind" deleted file mode 100755 index da1d2400..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/39.SEO \347\233\270\345\205\263/SEO\347\233\270\345\205\263.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/40.javaweb \345\272\224\347\224\250\345\256\211\345\205\250/JavaWeb\345\272\224\347\224\250\345\256\211\345\205\250.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/40.javaweb \345\272\224\347\224\250\345\256\211\345\205\250/JavaWeb\345\272\224\347\224\250\345\256\211\345\205\250.xmind" deleted file mode 100755 index 7a04e8d8..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/40.javaweb \345\272\224\347\224\250\345\256\211\345\205\250/JavaWeb\345\272\224\347\224\250\345\256\211\345\205\250.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/40.javaweb \345\272\224\347\224\250\345\256\211\345\205\250/nmap\346\200\235\347\273\264\345\257\274\345\233\276.zip" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/40.javaweb \345\272\224\347\224\250\345\256\211\345\205\250/nmap\346\200\235\347\273\264\345\257\274\345\233\276.zip" deleted file mode 100755 index 9f181680..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/40.javaweb \345\272\224\347\224\250\345\256\211\345\205\250/nmap\346\200\235\347\273\264\345\257\274\345\233\276.zip" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/41.Nodejs \347\233\270\345\205\263/Nodejs.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/41.Nodejs \347\233\270\345\205\263/Nodejs.xmind" deleted file mode 100755 index d9b29b70..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/41.Nodejs \347\233\270\345\205\263/Nodejs.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/.DS_Store" deleted file mode 100644 index a3d7637e..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/Java.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/Java.xmind" deleted file mode 100755 index f8ff1629..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/Java.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/NoSQL \351\235\236\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/NoSQL \351\235\236\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223.xmind" deleted file mode 100755 index 6f46f2a8..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/NoSQL \351\235\236\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/RESTful.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/RESTful.xmind" deleted file mode 100755 index 524087b7..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/RESTful.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java NIO,socket.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java NIO,socket.xmind" deleted file mode 100755 index dd504ede..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java NIO,socket.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\345\210\206\345\270\203\345\274\217\347\263\273\347\273\237.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\345\210\206\345\270\203\345\274\217\347\263\273\347\273\237.xmind" deleted file mode 100755 index f20cacad..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\345\210\206\345\270\203\345\274\217\347\263\273\347\273\237.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\345\271\266\345\217\221(\345\220\253volatile,\345\215\225\344\276\213,\347\272\277\347\250\213\346\261\240,\346\266\210\346\201\257\351\230\237\345\210\227,\344\272\213\345\212\241).xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\345\271\266\345\217\221(\345\220\253volatile,\345\215\225\344\276\213,\347\272\277\347\250\213\346\261\240,\346\266\210\346\201\257\351\230\237\345\210\227,\344\272\213\345\212\241).xmind" deleted file mode 100755 index 77563bd7..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\345\271\266\345\217\221(\345\220\253volatile,\345\215\225\344\276\213,\347\272\277\347\250\213\346\261\240,\346\266\210\346\201\257\351\230\237\345\210\227,\344\272\213\345\212\241).xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\346\212\200\346\234\257\350\267\257\347\272\277.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\346\212\200\346\234\257\350\267\257\347\272\277.xmind" deleted file mode 100755 index 9783f823..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\346\212\200\346\234\257\350\267\257\347\272\277.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\346\234\215\345\212\241\347\253\257\350\204\232\346\211\213\346\236\266.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\346\234\215\345\212\241\347\253\257\350\204\232\346\211\213\346\236\266.xmind" deleted file mode 100755 index df6a76f3..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\346\234\215\345\212\241\347\253\257\350\204\232\346\211\213\346\236\266.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\346\236\266\346\236\204\347\233\270\345\205\263.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\346\236\266\346\236\204\347\233\270\345\205\263.xmind" deleted file mode 100755 index 70b5ca84..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/java\346\236\266\346\236\204\347\233\270\345\205\263.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/jvm\347\233\270\345\205\263.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/jvm\347\233\270\345\205\263.xmind" deleted file mode 100755 index 0c175d1c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/jvm\347\233\270\345\205\263.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/log.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/log.xmind" deleted file mode 100755 index 9270afc7..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/log.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/log4j.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/log4j.xmind" deleted file mode 100755 index 45c9441b..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/log4j.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/spring-shiro \347\233\270\345\205\263.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/spring-shiro \347\233\270\345\205\263.xmind" deleted file mode 100755 index b58bc2b5..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/spring-shiro \347\233\270\345\205\263.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\343\200\220Shiro-\346\265\201\347\250\213\343\200\221\345\256\211\345\205\250\346\241\206\346\236\266&cas\345\215\225\347\202\271\347\231\273\345\275\225.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\343\200\220Shiro-\346\265\201\347\250\213\343\200\221\345\256\211\345\205\250\346\241\206\346\236\266&cas\345\215\225\347\202\271\347\231\273\345\275\225.xmind" deleted file mode 100755 index cc291f51..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\343\200\220Shiro-\346\265\201\347\250\213\343\200\221\345\256\211\345\205\250\346\241\206\346\236\266&cas\345\215\225\347\202\271\347\231\273\345\275\225.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\343\200\220Shiro-\351\205\215\347\275\256\343\200\221\345\256\211\345\205\250\346\241\206\346\236\266&cas\345\215\225\347\202\271\347\231\273\345\275\225.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\343\200\220Shiro-\351\205\215\347\275\256\343\200\221\345\256\211\345\205\250\346\241\206\346\236\266&cas\345\215\225\347\202\271\347\231\273\345\275\225.xmind" deleted file mode 100755 index 8f0eb40a..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\343\200\220Shiro-\351\205\215\347\275\256\343\200\221\345\256\211\345\205\250\346\241\206\346\236\266&cas\345\215\225\347\202\271\347\231\273\345\275\225.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\344\272\213\345\212\241\347\233\270\345\205\263.xlsx" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\344\272\213\345\212\241\347\233\270\345\205\263.xlsx" deleted file mode 100755 index 1cd08375..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\344\272\213\345\212\241\347\233\270\345\205\263.xlsx" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\345\212\240\345\257\206 \350\247\243\347\240\201.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\345\212\240\345\257\206 \350\247\243\347\240\201.xmind" deleted file mode 100755 index ef54d0fc..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\345\212\240\345\257\206 \350\247\243\347\240\201.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\345\256\211\345\205\250-\345\257\206\347\240\201.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\345\256\211\345\205\250-\345\257\206\347\240\201.xmind" deleted file mode 100755 index c3ffd75f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\345\256\211\345\205\250-\345\257\206\347\240\201.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\346\216\250\351\200\201\346\212\200\346\234\257,\346\234\215\345\212\241\347\253\257push,\345\256\236\346\227\266\345\214\226.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\346\216\250\351\200\201\346\212\200\346\234\257,\346\234\215\345\212\241\347\253\257push,\345\256\236\346\227\266\345\214\226.xmind" deleted file mode 100755 index 46dd28a0..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\346\216\250\351\200\201\346\212\200\346\234\257,\346\234\215\345\212\241\347\253\257push,\345\256\236\346\227\266\345\214\226.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263.xmind" deleted file mode 100755 index 6f8d7d43..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\346\245\274\345\256\207\346\231\272\350\203\275\345\214\226\350\277\220\347\273\264\347\263\273\347\273\237-\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\346\245\274\345\256\207\346\231\272\350\203\275\345\214\226\350\277\220\347\273\264\347\263\273\347\273\237-\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.xmind" deleted file mode 100755 index 7f2255c9..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\346\245\274\345\256\207\346\231\272\350\203\275\345\214\226\350\277\220\347\273\264\347\263\273\347\273\237-\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\211\251\350\201\224\347\275\221\347\233\270\345\205\263\350\277\220\347\273\264\347\263\273\347\273\237.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\211\251\350\201\224\347\275\221\347\233\270\345\205\263\350\277\220\347\273\264\347\263\273\347\273\237.xmind" deleted file mode 100755 index a735bf47..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\211\251\350\201\224\347\275\221\347\233\270\345\205\263\350\277\220\347\273\264\347\263\273\347\273\237.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\225\214\351\235\242&\345\220\216\345\217\260\347\232\204\345\220\210\345\271\266\344\270\216\345\210\206\347\246\273.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\225\214\351\235\242&\345\220\216\345\217\260\347\232\204\345\220\210\345\271\266\344\270\216\345\210\206\347\246\273.xmind" deleted file mode 100755 index 1eed9da8..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\225\214\351\235\242&\345\220\216\345\217\260\347\232\204\345\220\210\345\271\266\344\270\216\345\210\206\347\246\273.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\274\223\345\255\230\346\234\215\345\212\241\346\212\200\346\234\257.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\274\223\345\255\230\346\234\215\345\212\241\346\212\200\346\234\257.xmind" deleted file mode 100755 index 59d863a2..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\274\223\345\255\230\346\234\215\345\212\241\346\212\200\346\234\257.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\275\221\347\273\234\347\274\226\347\250\213.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\275\221\347\273\234\347\274\226\347\250\213.xmind" deleted file mode 100755 index 8de8ccfd..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\347\275\221\347\273\234\347\274\226\347\250\213.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217-23.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217-23.xmind" deleted file mode 100755 index de091447..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217-23.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217\350\256\244\350\257\206.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217\350\256\244\350\257\206.xmind" deleted file mode 100755 index b98ad039..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217\350\256\244\350\257\206.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\350\272\253\344\273\275\350\256\244\350\257\201.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\350\272\253\344\273\275\350\256\244\350\257\201.xmind" deleted file mode 100755 index 835b395a..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/42.Java\346\212\200\346\234\257\347\233\270\345\205\263/\345\220\216\347\253\257/\350\272\253\344\273\275\350\256\244\350\257\201.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/43.\344\270\255\351\227\264\344\273\266\347\233\270\345\205\263/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/43.\344\270\255\351\227\264\344\273\266\347\233\270\345\205\263/.DS_Store" deleted file mode 100644 index 399d1e9c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/43.\344\270\255\351\227\264\344\273\266\347\233\270\345\205\263/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/43.\344\270\255\351\227\264\344\273\266\347\233\270\345\205\263/Kafka.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/43.\344\270\255\351\227\264\344\273\266\347\233\270\345\205\263/Kafka.xmind" deleted file mode 100755 index 879d6a34..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/43.\344\270\255\351\227\264\344\273\266\347\233\270\345\205\263/Kafka.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/43.\344\270\255\351\227\264\344\273\266\347\233\270\345\205\263/MQ.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/43.\344\270\255\351\227\264\344\273\266\347\233\270\345\205\263/MQ.xmind" deleted file mode 100755 index 17359f6d..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/43.\344\270\255\351\227\264\344\273\266\347\233\270\345\205\263/MQ.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/44.\347\233\221\346\216\247\347\233\270\345\205\263/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/44.\347\233\221\346\216\247\347\233\270\345\205\263/.DS_Store" deleted file mode 100644 index f452010c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/44.\347\233\221\346\216\247\347\233\270\345\205\263/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/44.\347\233\221\346\216\247\347\233\270\345\205\263/monitor.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/44.\347\233\221\346\216\247\347\233\270\345\205\263/monitor.xmind" deleted file mode 100755 index a27a592c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/44.\347\233\221\346\216\247\347\233\270\345\205\263/monitor.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/.DS_Store" deleted file mode 100644 index 0e39063b..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261465529.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261465529.jpg" deleted file mode 100755 index 0eac00f3..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261465529.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261467755.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261467755.jpg" deleted file mode 100755 index 6c11ef21..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261467755.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261471948.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261471948.jpg" deleted file mode 100755 index e78a8a7f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261471948.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261475857.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261475857.jpg" deleted file mode 100755 index 5c97cdb9..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261475857.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261479530.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261479530.jpg" deleted file mode 100755 index 7b7cbc7e..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261479530.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261484177.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261484177.jpg" deleted file mode 100755 index 4f813c68..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261484177.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261487767.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261487767.jpg" deleted file mode 100755 index ada092e3..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261487767.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261490937.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261490937.jpg" deleted file mode 100755 index 176200ae..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261490937.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261494981.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261494981.jpg" deleted file mode 100755 index 455c43e6..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261494981.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261498535.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261498535.jpg" deleted file mode 100755 index 049b306a..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261498535.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261502948.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261502948.jpg" deleted file mode 100755 index d1dd4762..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261502948.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261506823.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261506823.jpg" deleted file mode 100755 index 4a875de0..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261506823.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261510612.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261510612.jpg" deleted file mode 100755 index bdc1f509..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261510612.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261514286.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261514286.jpg" deleted file mode 100755 index 6d1b8373..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261514286.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261518395.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261518395.jpg" deleted file mode 100755 index df23dfae..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/mmexport1508261518395.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/readme.md" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/readme.md" deleted file mode 100755 index 8b137891..00000000 --- "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/readme.md" +++ /dev/null @@ -1 +0,0 @@ - diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Dict\345\222\214Set\347\261\273\345\236\213.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Dict\345\222\214Set\347\261\273\345\236\213.jpg" deleted file mode 100755 index 0bf69ed7..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Dict\345\222\214Set\347\261\273\345\236\213.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/List\345\222\214Tuple\347\261\273\345\236\213.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/List\345\222\214Tuple\347\261\273\345\236\213.jpg" deleted file mode 100755 index 285cb416..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/List\345\222\214Tuple\347\261\273\345\236\213.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\345\207\275\346\225\260.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\345\207\275\346\225\260.jpg" deleted file mode 100755 index e83e9482..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\345\207\275\346\225\260.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\345\210\207\347\211\207.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\345\210\207\347\211\207.jpg" deleted file mode 100755 index ac3e86b8..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\345\210\207\347\211\207.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\345\210\227\350\241\250\347\224\237\346\210\220\345\274\217.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\345\210\227\350\241\250\347\224\237\346\210\220\345\274\217.jpg" deleted file mode 100755 index 5dd75663..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\345\210\227\350\241\250\347\224\237\346\210\220\345\274\217.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\347\224\237\346\210\220\345\231\250.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\347\224\237\346\210\220\345\231\250.jpg" deleted file mode 100755 index cf01605f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\347\224\237\346\210\220\345\231\250.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\350\257\255\346\263\225\345\233\276.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\350\257\255\346\263\225\345\233\276.jpg" deleted file mode 100755 index 78d4f0c7..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\350\257\255\346\263\225\345\233\276.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\350\277\224\345\233\236\345\207\275\346\225\260\345\222\214\351\227\255\345\214\205.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\350\277\224\345\233\236\345\207\275\346\225\260\345\222\214\351\227\255\345\214\205.jpg" deleted file mode 100755 index 5428611e..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\350\277\224\345\233\236\345\207\275\346\225\260\345\222\214\351\227\255\345\214\205.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\350\277\255\344\273\243.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\350\277\255\344\273\243.jpg" deleted file mode 100755 index 43fd5c38..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\350\277\255\344\273\243.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\351\253\230\351\230\266\345\207\275\346\225\260.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\351\253\230\351\230\266\345\207\275\346\225\260.jpg" deleted file mode 100755 index 32dcf3b4..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/Python\351\253\230\351\230\266\345\207\275\346\225\260.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/readme.md" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/readme.md" deleted file mode 100755 index 8b137891..00000000 --- "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/readme.md" +++ /dev/null @@ -1 +0,0 @@ - diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/\345\217\230\351\207\217\345\222\214\346\225\260\346\215\256\347\261\273\345\236\213.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/\345\217\230\351\207\217\345\222\214\346\225\260\346\215\256\347\261\273\345\236\213.jpg" deleted file mode 100755 index cb740b0a..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/\345\217\230\351\207\217\345\222\214\346\225\260\346\215\256\347\261\273\345\236\213.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/\345\276\252\347\216\257\350\257\255\345\217\245.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/\345\276\252\347\216\257\350\257\255\345\217\245.jpg" deleted file mode 100755 index 4d0105dd..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/45.python\347\233\270\345\205\263/\350\237\222\350\233\207\345\237\272\347\241\200/\345\276\252\347\216\257\350\257\255\345\217\245.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/46.\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\357\274\210\345\210\206\345\272\223\345\210\206\350\241\250\357\274\211/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/46.\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\357\274\210\345\210\206\345\272\223\345\210\206\350\241\250\357\274\211/.DS_Store" deleted file mode 100644 index 4e7e47fd..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/46.\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\357\274\210\345\210\206\345\272\223\345\210\206\350\241\250\357\274\211/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/46.\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\357\274\210\345\210\206\345\272\223\345\210\206\350\241\250\357\274\211/db.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/46.\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\357\274\210\345\210\206\345\272\223\345\210\206\350\241\250\357\274\211/db.xmind" deleted file mode 100755 index 1b0839d5..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/46.\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\357\274\210\345\210\206\345\272\223\345\210\206\350\241\250\357\274\211/db.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/47.NetworkProtocol/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/47.NetworkProtocol/.DS_Store" deleted file mode 100644 index c46f6173..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/47.NetworkProtocol/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/47.NetworkProtocol/Network Protocol.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/47.NetworkProtocol/Network Protocol.xmind" deleted file mode 100755 index 0412afe9..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/47.NetworkProtocol/Network Protocol.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/48.MYSQL \347\233\270\345\205\263/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/48.MYSQL \347\233\270\345\205\263/.DS_Store" deleted file mode 100644 index 950e40c9..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/48.MYSQL \347\233\270\345\205\263/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/48.MYSQL \347\233\270\345\205\263/MySql.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/48.MYSQL \347\233\270\345\205\263/MySql.xmind" deleted file mode 100755 index 8542c65d..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/48.MYSQL \347\233\270\345\205\263/MySql.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/.DS_Store" deleted file mode 100644 index 3c5a47c2..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/Ajax.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/Ajax.jpg" deleted file mode 100755 index 610e56bf..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/Ajax.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/DOM\346\223\215\344\275\2340.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/DOM\346\223\215\344\275\2340.jpg" deleted file mode 100755 index 0a406f96..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/DOM\346\223\215\344\275\2340.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/DOM\346\223\215\344\275\2341.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/DOM\346\223\215\344\275\2341.jpg" deleted file mode 100755 index 30ef4af7..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/DOM\346\223\215\344\275\2341.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/Jquery\344\270\255\345\277\203\344\270\273\351\242\230.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/Jquery\344\270\255\345\277\203\344\270\273\351\242\230.jpg" deleted file mode 100755 index 79753d88..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/Jquery\344\270\255\345\277\203\344\270\273\351\242\230.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/call,apply,bind.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/call,apply,bind.xmind" deleted file mode 100755 index 5a666385..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/call,apply,bind.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/cookie & session.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/cookie & session.xmind" deleted file mode 100755 index 1e30d776..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/cookie & session.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/css\345\256\232\344\275\215.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/css\345\256\232\344\275\215.xmind" deleted file mode 100755 index 62efe76f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/css\345\256\232\344\275\215.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/generator-gulp-angular,Gulp.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/generator-gulp-angular,Gulp.xmind" deleted file mode 100755 index da8f7f7c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/generator-gulp-angular,Gulp.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript Html jsp \346\223\215\347\272\265\345\205\263\347\263\273.txt" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript Html jsp \346\223\215\347\272\265\345\205\263\347\263\273.txt" deleted file mode 100755 index 864fe3a4..00000000 --- "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript Html jsp \346\223\215\347\272\265\345\205\263\347\263\273.txt" +++ /dev/null @@ -1,95 +0,0 @@ -javaScript 可以操纵html -jsp(EL,<%>,标签库)可以动态嵌入到html,javaScript - -jsp -tomcat解释-> 静态存在与html中 -> javaScript与Html同时存在客户端->javaScript可动态操纵Html - -jsp九大内置对象、四种作用域 - -JSP中九大内置对象为: - 1、request 请求对象  类型 javax.servlet.ServletRequest 作用域 Request - 2、response 响应对象 类型 javax.servlet.SrvletResponse 作用域 Page - 3、pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page - 4、session 会话对象 类型 javax.servlet.http.HttpSession 作用域 Session - 5、application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application - 6、out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page - 7、config 配置对象 类型 javax.servlet.ServletConfig 作用域 Page - 8、page 页面对象 类型 javax.lang.Object 作用域 Page - 9、exception 例外对象 类型 javax.lang.Throwable 作用域 page - -page:当前页面,也就是只要跳到别的页面就失效了 -request:一次会话,简单的理解就是一次请求范围内有效 -session:浏览器进程,只要当前页面没有被关闭(没有被程序强制清除),不管怎么跳转都是有效的 -application:服务器,只要服务器没有重启(没有被程序强制清除),数据就有效 - - -JavaScript 参考手册 -本部分提供完整的 JavaScript 参考手册: -JavaScript 本地对象和内置对象 -Browser 对象(BOM) -HTML DOM 对象 -JavaScript 对象参考手册 -本参考手册描述每个对象的属性和方法,并提供实例。 -Array -Boolean -Date -Math -Number -String -RegExp -Global -Browser 对象参考手册 -本参考手册描述每个对象的属性和方法,并提供实例。 -Window -Navigator -Screen -History -Location -HTML DOM 对象参考手册 -本参考手册描述每个对象的属性和方法,并提供实例。 -Document -Anchor -Area -Base -Body -Button -Canvas -Event -Form -Frame -Frameset -IFrame -Image -Input Button -Input Checkbox -Input File -Input Hidden -Input Password -Input Radio -Input Reset -Input Submit -Input Text -Link -Meta -Object -Option -Select -Style -Table -TableCell -TableRow -Textarea -相关页面 -如需更多有关 JavaScript 对象的知识,请阅读 JavaScript 高级教程中的相关内容: -面向对象技术 -对象应用 -对象类型 -对象作用域 -定义类或对象 -修改对象 -如需更多有关 DOM 的知识,请访问 W3School 提供的 XML DOM 教程: -XML DOM 教程 -XML DOM 参考手册 -如需更多有关 jQuery 的知识,请访问 W3School 提供的 jQuery 教程: -jQuery 教程 -jQuery 参考手册 -注释:jQuery 是一个 JavaScript 库,它极大地简化了 JavaScript 编程。 \ No newline at end of file diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/BOM\345\222\214DOM\347\232\204\347\273\223\346\236\204\345\205\263\347\263\273\347\244\272\346\204\217\345\233\276.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/BOM\345\222\214DOM\347\232\204\347\273\223\346\236\204\345\205\263\347\263\273\347\244\272\346\204\217\345\233\276.jpg" deleted file mode 100755 index f857a95f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/BOM\345\222\214DOM\347\232\204\347\273\223\346\236\204\345\205\263\347\263\273\347\244\272\346\204\217\345\233\276.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javaScript\350\277\220\347\256\227\347\254\246.gif" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javaScript\350\277\220\347\256\227\347\254\246.gif" deleted file mode 100755 index 824da05a..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javaScript\350\277\220\347\256\227\347\254\246.gif" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\207\275\346\225\260\345\237\272\347\241\200.gif" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\207\275\346\225\260\345\237\272\347\241\200.gif" deleted file mode 100755 index 81053564..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\207\275\346\225\260\345\237\272\347\241\200.gif" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\217\230\351\207\217.gif" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\217\230\351\207\217.gif" deleted file mode 100755 index 05246695..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\217\230\351\207\217.gif" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\237\272\347\241\200DOM\346\223\215\344\275\234.gif" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\237\272\347\241\200DOM\346\223\215\344\275\234.gif" deleted file mode 100755 index 6fd30d14..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\237\272\347\241\200DOM\346\223\215\344\275\234.gif" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\255\227\347\254\246\344\270\262\345\207\275\346\225\260.gif" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\255\227\347\254\246\344\270\262\345\207\275\346\225\260.gif" deleted file mode 100755 index e452c1fb..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\345\255\227\347\254\246\344\270\262\345\207\275\346\225\260.gif" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\346\225\260\347\273\204.gif" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\346\225\260\347\273\204.gif" deleted file mode 100755 index 1178da72..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\346\225\260\347\273\204.gif" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.gif" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.gif" deleted file mode 100755 index 386fd6ad..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.gif" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\346\265\201\347\250\213\350\257\255\345\217\245.gif" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\346\265\201\347\250\213\350\257\255\345\217\245.gif" deleted file mode 100755 index 8a921b3f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/javascript\346\265\201\347\250\213\350\257\255\345\217\245.gif" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/window\345\257\271\350\261\241.gif" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/window\345\257\271\350\261\241.gif" deleted file mode 100755 index 8ff9f0d7..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/window\345\257\271\350\261\241.gif" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/\346\223\215\344\275\234HTML jQuery.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/\346\223\215\344\275\234HTML jQuery.png" deleted file mode 100755 index 31d703ab..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/\346\223\215\344\275\234HTML jQuery.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/\346\223\215\344\275\234HTML javascript Dom.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/\346\223\215\344\275\234HTML javascript Dom.png" deleted file mode 100755 index 1f988701..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript-png/\346\223\215\344\275\234HTML javascript Dom.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript.xmind" deleted file mode 100755 index 09431492..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript\344\272\213\344\273\266.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript\344\272\213\344\273\266.xmind" deleted file mode 100755 index e2cd1caf..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript\344\272\213\344\273\266.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript\345\216\237\345\236\213\351\223\276.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript\345\216\237\345\236\213\351\223\276.xmind" deleted file mode 100755 index ea16bfa3..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/javaScript\345\216\237\345\236\213\351\223\276.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/js jsp html \345\205\263\347\263\273.pptx" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/js jsp html \345\205\263\347\263\273.pptx" deleted file mode 100755 index e554e03a..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/js jsp html \345\205\263\347\263\273.pptx" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/readme.md" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/readme.md" deleted file mode 100755 index 8b137891..00000000 --- "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/readme.md" +++ /dev/null @@ -1 +0,0 @@ - diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/web\350\267\250\345\237\237.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/web\350\267\250\345\237\237.xmind" deleted file mode 100755 index 0541752a..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/web\350\267\250\345\237\237.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\345\256\211\345\205\250 \350\256\244\350\257\201.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\345\256\211\345\205\250 \350\256\244\350\257\201.xmind" deleted file mode 100755 index 1137d326..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\345\256\211\345\205\250 \350\256\244\350\257\201.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-all.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-all.xmind" deleted file mode 100755 index 48f45ccf..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-all.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-lib.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-lib.xmind" deleted file mode 100755 index a9dfc3e8..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-lib.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-\345\270\270\350\257\206.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-\345\270\270\350\257\206.xmind" deleted file mode 100755 index 507c5206..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-\345\270\270\350\257\206.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-\345\272\224\347\224\250.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-\345\272\224\347\224\250.xmind" deleted file mode 100755 index 7008fa68..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-\345\272\224\347\224\250.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-\346\241\206\346\236\266.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-\346\241\206\346\236\266.xmind" deleted file mode 100755 index ffa96fcc..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\212\200\346\234\257-\346\241\206\346\236\266.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\241\206\346\236\266\351\200\211\345\236\213.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\241\206\346\236\266\351\200\211\345\236\213.xmind" deleted file mode 100755 index a7f2a79c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\211\215\347\253\257\346\241\206\346\236\266\351\200\211\345\236\213.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\212\250\346\200\201this\345\200\274.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\212\250\346\200\201this\345\200\274.xmind" deleted file mode 100755 index 82ba5c70..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\345\212\250\346\200\201this\345\200\274.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\351\200\211\346\213\251\345\231\250.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\351\200\211\346\213\251\345\231\250.jpg" deleted file mode 100755 index b681a3be..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/49.\345\211\215\347\253\257\347\233\270\345\205\263/\351\200\211\346\213\251\345\231\250.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/.DS_Store" deleted file mode 100644 index a0dccf0f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/ABP\346\241\206\346\236\266\347\232\204\345\255\246\344\271\240\350\267\257\347\272\277\345\233\276-\347\276\244\345\217\213\347\211\210.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/ABP\346\241\206\346\236\266\347\232\204\345\255\246\344\271\240\350\267\257\347\272\277\345\233\276-\347\276\244\345\217\213\347\211\210.xmind" deleted file mode 100755 index dab9efc3..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/ABP\346\241\206\346\236\266\347\232\204\345\255\246\344\271\240\350\267\257\347\272\277\345\233\276-\347\276\244\345\217\213\347\211\210.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/App Store\346\234\200\346\226\260\345\256\241\346\240\270\346\214\207\345\215\227.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/App Store\346\234\200\346\226\260\345\256\241\346\240\270\346\214\207\345\215\227.xmind" deleted file mode 100755 index 002cf89d..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/App Store\346\234\200\346\226\260\345\256\241\346\240\270\346\214\207\345\215\227.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Asp.net Core Architecture.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Asp.net Core Architecture.png" deleted file mode 100755 index e166163e..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Asp.net Core Architecture.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/C Sharp\347\274\226\350\257\221.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/C Sharp\347\274\226\350\257\221.png" deleted file mode 100755 index bb10b608..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/C Sharp\347\274\226\350\257\221.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/C#\345\205\250\346\240\210.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/C#\345\205\250\346\240\210.png" deleted file mode 100755 index 6df65cf0..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/C#\345\205\250\346\240\210.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Computer.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Computer.xmind" deleted file mode 100755 index cb780e20..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Computer.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/DB(sql server).png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/DB(sql server).png" deleted file mode 100755 index 9f90750c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/DB(sql server).png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Development Stack.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Development Stack.png" deleted file mode 100755 index c9aa13ae..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Development Stack.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/JavaWeb\345\272\224\347\224\250\345\256\211\345\205\250.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/JavaWeb\345\272\224\347\224\250\345\256\211\345\205\250.png" deleted file mode 100755 index 1e938567..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/JavaWeb\345\272\224\347\224\250\345\256\211\345\205\250.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Nmap \346\200\235\347\273\264\345\257\274\345\233\276.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Nmap \346\200\235\347\273\264\345\257\274\345\233\276.png" deleted file mode 100755 index 7f78aae4..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Nmap \346\200\235\347\273\264\345\257\274\345\233\276.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/PHP\344\273\243\347\240\201\345\256\241\350\256\241\350\204\221\345\233\276.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/PHP\344\273\243\347\240\201\345\256\241\350\256\241\350\204\221\345\233\276.png" deleted file mode 100755 index 6b543f20..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/PHP\344\273\243\347\240\201\345\256\241\350\256\241\350\204\221\345\233\276.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Redis.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Redis.png" deleted file mode 100755 index 1e23033a..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Redis.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/SQLmap\350\204\221\345\233\276.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/SQLmap\350\204\221\345\233\276.jpg" deleted file mode 100755 index deae31d6..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/SQLmap\350\204\221\345\233\276.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/SSRF\350\204\221\345\233\276.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/SSRF\350\204\221\345\233\276.jpg" deleted file mode 100755 index 8a3670ac..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/SSRF\350\204\221\345\233\276.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/WPF\344\275\223\347\263\273\347\273\223\346\236\204.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/WPF\344\275\223\347\263\273\347\273\223\346\236\204.png" deleted file mode 100755 index f78c4ed8..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/WPF\344\275\223\347\263\273\347\273\223\346\236\204.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Web Front End Stack.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Web Front End Stack.png" deleted file mode 100755 index 172b9d05..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Web Front End Stack.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Web\345\272\224\347\224\250\345\256\211\345\205\250(By Neeao).jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Web\345\272\224\347\224\250\345\256\211\345\205\250(By Neeao).jpg" deleted file mode 100755 index 25520a94..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/Web\345\272\224\347\224\250\345\256\211\345\205\250(By Neeao).jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/XML\345\256\211\345\205\250\346\261\207\346\200\273.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/XML\345\256\211\345\205\250\346\261\207\346\200\273.png" deleted file mode 100755 index 98960186..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/XML\345\256\211\345\205\250\346\261\207\346\200\273.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/XSS2.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/XSS2.png" deleted file mode 100755 index ce9210d1..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/XSS2.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/XSS\350\204\221\345\233\276.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/XSS\350\204\221\345\233\276.png" deleted file mode 100755 index 7432cedd..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/XSS\350\204\221\345\233\276.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/aspnetcore-developer-roadmap.zh-Hans.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/aspnetcore-developer-roadmap.zh-Hans.png" deleted file mode 100755 index 02e2da49..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/aspnetcore-developer-roadmap.zh-Hans.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/backend.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/backend.png" deleted file mode 100755 index 15c10724..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/backend.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/devops.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/devops.png" deleted file mode 100755 index d0cc3d3f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/devops.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/frontend-v2.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/frontend-v2.png" deleted file mode 100755 index e44ca81e..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/frontend-v2.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/iOS\347\211\210\350\267\257\347\272\277\345\233\276.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/iOS\347\211\210\350\267\257\347\272\277\345\233\276.png" deleted file mode 100755 index 3fbc1a3c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/iOS\347\211\210\350\267\257\347\272\277\345\233\276.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/iOS\350\257\201\344\271\246&\346\211\223\345\214\205&\344\270\212\346\236\266.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/iOS\350\257\201\344\271\246&\346\211\223\345\214\205&\344\270\212\346\236\266.xmind" deleted file mode 100755 index 08dd2557..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/iOS\350\257\201\344\271\246&\346\211\223\345\214\205&\344\270\212\346\236\266.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/nmap\346\270\227\351\200\217\346\265\213\350\257\225\346\214\207\345\215\227.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/nmap\346\270\227\351\200\217\346\265\213\350\257\225\346\214\207\345\215\227.png" deleted file mode 100755 index 59192218..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/nmap\346\270\227\351\200\217\346\265\213\350\257\225\346\214\207\345\215\227.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/xss virus 1.0.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/xss virus 1.0.png" deleted file mode 100755 index 42fdbb7c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/xss virus 1.0.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\344\270\232\345\212\241\345\256\211\345\205\250top10.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\344\270\232\345\212\241\345\256\211\345\205\250top10.png" deleted file mode 100755 index f34287e4..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\344\270\232\345\212\241\345\256\211\345\205\250top10.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\344\273\243\347\240\201\345\256\241\350\256\241\347\232\204\346\272\242\345\207\272\350\204\221\345\233\276.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\344\273\243\347\240\201\345\256\241\350\256\241\347\232\204\346\272\242\345\207\272\350\204\221\345\233\276.png" deleted file mode 100755 index c46cc106..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\344\273\243\347\240\201\345\256\241\350\256\241\347\232\204\346\272\242\345\207\272\350\204\221\345\233\276.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\344\274\201\344\270\232\345\256\211\345\205\250\351\230\262\345\276\241\346\200\235\347\273\264\345\257\274\345\233\276.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\344\274\201\344\270\232\345\256\211\345\205\250\351\230\262\345\276\241\346\200\235\347\273\264\345\257\274\345\233\276.png" deleted file mode 100755 index b08a9349..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\344\274\201\344\270\232\345\256\211\345\205\250\351\230\262\345\276\241\346\200\235\347\273\264\345\257\274\345\233\276.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\205\245\351\227\250\344\272\214\350\277\233\345\210\266\346\274\217\346\264\236\345\210\206\346\236\220\350\204\221\345\233\276.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\205\245\351\227\250\344\272\214\350\277\233\345\210\266\346\274\217\346\264\236\345\210\206\346\236\220\350\204\221\345\233\276.png" deleted file mode 100755 index e45f636d..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\205\245\351\227\250\344\272\214\350\277\233\345\210\266\346\274\217\346\264\236\345\210\206\346\236\220\350\204\221\345\233\276.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\256\211\345\205\250\350\277\220\347\273\264\350\204\221\345\233\276.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\256\211\345\205\250\350\277\220\347\273\264\350\204\221\345\233\276.png" deleted file mode 100755 index 8b81abb8..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\256\211\345\205\250\350\277\220\347\273\264\350\204\221\345\233\276.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\257\206\347\240\201\346\211\276\345\233\236\351\200\273\350\276\221\346\274\217\346\264\236.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\257\206\347\240\201\346\211\276\345\233\236\351\200\273\350\276\221\346\274\217\346\264\236.png" deleted file mode 100755 index 414f2995..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\257\206\347\240\201\346\211\276\345\233\236\351\200\273\350\276\221\346\274\217\346\264\236.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\272\224\347\224\250\345\256\235QQ,APP\344\270\213\350\275\275\345\274\225\345\257\274\346\265\201\347\250\213.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\272\224\347\224\250\345\256\235QQ,APP\344\270\213\350\275\275\345\274\225\345\257\274\346\265\201\347\250\213.xmind" deleted file mode 100755 index 69058897..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\272\224\347\224\250\345\256\235QQ,APP\344\270\213\350\275\275\345\274\225\345\257\274\346\265\201\347\250\213.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\272\224\347\224\250\345\256\235\345\276\256\344\277\241,APP\344\270\213\350\275\275\345\274\225\345\257\274\346\265\201\347\250\213.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\272\224\347\224\250\345\256\235\345\276\256\344\277\241,APP\344\270\213\350\275\275\345\274\225\345\257\274\346\265\201\347\250\213.xmind" deleted file mode 100755 index 164cf3f1..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\272\224\347\224\250\345\256\235\345\276\256\344\277\241,APP\344\270\213\350\275\275\345\274\225\345\257\274\346\265\201\347\250\213.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\274\200\346\272\220\351\241\271\347\233\256&\347\275\221\347\253\231\346\250\241\346\235\277.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\274\200\346\272\220\351\241\271\347\233\256&\347\275\221\347\253\231\346\250\241\346\235\277.xmind" deleted file mode 100755 index f9bf5f57..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\345\274\200\346\272\220\351\241\271\347\233\256&\347\275\221\347\253\231\346\250\241\346\235\277.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\203\205\346\212\245\346\224\266\351\233\206\350\204\221\345\233\276.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\203\205\346\212\245\346\224\266\351\233\206\350\204\221\345\233\276.png" deleted file mode 100755 index 85fa2dc9..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\203\205\346\212\245\346\224\266\351\233\206\350\204\221\345\233\276.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\212\200\346\234\257\346\240\210.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\212\200\346\234\257\346\240\210.xmind" deleted file mode 100755 index b835cf31..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\212\200\346\234\257\346\240\210.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\225\260\346\215\256\345\272\223\351\224\201.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\225\260\346\215\256\345\272\223\351\224\201.png" deleted file mode 100755 index ef22a564..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\225\260\346\215\256\345\272\223\351\224\201.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.xmind" deleted file mode 100755 index 56ec6a58..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\265\217\350\247\210\345\231\250\345\256\211\345\205\250\346\200\235\347\273\264\345\257\274\345\233\276.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\265\217\350\247\210\345\231\250\345\256\211\345\205\250\346\200\235\347\273\264\345\257\274\345\233\276.jpg" deleted file mode 100755 index be24000f..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\265\217\350\247\210\345\231\250\345\256\211\345\205\250\346\200\235\347\273\264\345\257\274\345\233\276.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\270\227\351\200\217\346\265\213\350\257\225.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\270\227\351\200\217\346\265\213\350\257\225.png" deleted file mode 100755 index fa895920..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\270\227\351\200\217\346\265\213\350\257\225.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\270\227\351\200\217\347\232\204\350\211\272\346\234\257.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\270\227\351\200\217\347\232\204\350\211\272\346\234\257.jpg" deleted file mode 100755 index d5ec10f2..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\346\270\227\351\200\217\347\232\204\350\211\272\346\234\257.jpg" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\347\247\273\345\212\250\345\274\200\345\217\221\350\267\257\347\272\277\345\233\276.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\347\247\273\345\212\250\345\274\200\345\217\221\350\267\257\347\272\277\345\233\276.png" deleted file mode 100755 index 65b4c266..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\347\247\273\345\212\250\345\274\200\345\217\221\350\267\257\347\272\277\345\233\276.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-Android.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-Android.xmind" deleted file mode 100755 index 86aa132b..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-Android.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-Java.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-Java.xmind" deleted file mode 100755 index 4a984279..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-Java.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-\344\270\252\344\272\272 v2.0 .xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-\344\270\252\344\272\272 v2.0 .xmind" deleted file mode 100755 index ebd52acc..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-\344\270\252\344\272\272 v2.0 .xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-\344\270\252\344\272\272.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-\344\270\252\344\272\272.xmind" deleted file mode 100755 index b976046c..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\201\214\350\203\275\345\234\260\345\233\276-\344\270\252\344\272\272.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\344\273\266\350\277\207\347\250\213(\346\262\203\350\265\233).mpp" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\344\273\266\350\277\207\347\250\213(\346\262\203\350\265\233).mpp" deleted file mode 100755 index 7abf1148..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\344\273\266\350\277\207\347\250\213(\346\262\203\350\265\233).mpp" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\344\273\266\350\277\207\347\250\213-\351\233\206\346\210\220\346\265\213\350\257\225\350\277\207\347\250\213.mpp" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\344\273\266\350\277\207\347\250\213-\351\233\206\346\210\220\346\265\213\350\257\225\350\277\207\347\250\213.mpp" deleted file mode 100755 index 558672ea..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\344\273\266\350\277\207\347\250\213-\351\233\206\346\210\220\346\265\213\350\257\225\350\277\207\347\250\213.mpp" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\344\273\266\350\277\207\347\250\213\346\226\207\346\241\243.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\344\273\266\350\277\207\347\250\213\346\226\207\346\241\243.xmind" deleted file mode 100755 index b0361103..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\344\273\266\350\277\207\347\250\213\346\226\207\346\241\243.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\350\200\203-\344\277\241\346\201\257\347\263\273\347\273\237\351\241\271\347\233\256\347\256\241\347\220\206\345\270\210.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\350\200\203-\344\277\241\346\201\257\347\263\273\347\273\237\351\241\271\347\233\256\347\256\241\347\220\206\345\270\210.xmind" deleted file mode 100755 index 4b360d0b..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\350\200\203-\344\277\241\346\201\257\347\263\273\347\273\237\351\241\271\347\233\256\347\256\241\347\220\206\345\270\210.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\350\200\203-\347\263\273\347\273\237\345\210\206\346\236\220\345\270\210.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\350\200\203-\347\263\273\347\273\237\345\210\206\346\236\220\345\270\210.xmind" deleted file mode 100755 index dfbf3154..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\275\257\350\200\203-\347\263\273\347\273\237\345\210\206\346\236\220\345\270\210.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\277\220\347\273\264\345\256\211\345\205\250.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\277\220\347\273\264\345\256\211\345\205\250.png" deleted file mode 100755 index bf936927..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\277\220\347\273\264\345\256\211\345\205\250.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\277\220\347\273\264\345\267\245\344\275\234.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\277\220\347\273\264\345\267\245\344\275\234.xmind" deleted file mode 100755 index 9f1b1fc8..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\350\277\220\347\273\264\345\267\245\344\275\234.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\351\230\277\351\207\214\344\272\221\347\233\276.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\351\230\277\351\207\214\344\272\221\347\233\276.xmind" deleted file mode 100755 index df81bebf..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\351\230\277\351\207\214\344\272\221\347\233\276.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\351\235\242\345\220\221\345\257\271\350\261\241\345\210\206\346\236\220\345\222\214\350\256\276\350\256\241.xmind" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\351\235\242\345\220\221\345\257\271\350\261\241\345\210\206\346\236\220\345\222\214\350\256\276\350\256\241.xmind" deleted file mode 100755 index 4568269e..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/99.\345\205\266\344\273\226\350\204\221\345\233\276 100 \345\274\240/\351\235\242\345\220\221\345\257\271\350\261\241\345\210\206\346\236\220\345\222\214\350\256\276\350\256\241.xmind" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/README.md" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/README.md" deleted file mode 100644 index 0b96e963..00000000 --- "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/README.md" +++ /dev/null @@ -1,74 +0,0 @@ -# Github 最全技术类思维导图 🇨🇳🇨🇳🇨🇳 中国人,来个star - -大家好,我们是 xmindcn,整理了 120 多张高清思维导图。都是很大很全的精品导图,绝对没有那种几十 k 忽悠人的,随意展示一张: - -[![图片过大,点击查看](img/demo.png)](https://www.geekxh.com/demo-1.png) - -如果想查看 pdf 文件,可以直接进入目录学习。 - -如果想下载源文件,可以通过下方链接获取 - -当然,如果你想一次性下载所有的脑图,扫码下方任意二维码关注后回复 **999** 即可。 - -小浩算法 polarisxu - -## 分类下载 - -1. Docker学习 [点击下载](https://pan.baidu.com/s/157SurspsgNXUKNF0kCQKOg) 密码:yu9m - -2. Git基础 [点击下载](https://pan.baidu.com/s/1-LNv0GvFGFOiuRaO6kB5VA) 密码:s2iq - -3. Java并发体系 [点击下载](https://pan.baidu.com/s/1loK6-Pce4dj6OcI8XKSDKw) 密码:3ixn - -4. JVM和性能调优 [点击下载](https://pan.baidu.com/s/1dJFt-pRn0bh-bHTJEV4eNQ) 密码:dmpg - -5. Kafka [点击下载](https://pan.baidu.com/s/1WCXeBPU5jQx8UHmD2nWZhQ) 密码:pigv - -6. Mysql优化 [点击下载](https://pan.baidu.com/s/1WCXeBPU5jQx8UHmD2nWZhQ) 密码:pigv - -7. Redis设计与实现 [点击下载](https://pan.baidu.com/s/1zSj6Tn5vQRyQ5W0kvH7Wbw) 密码:d7t8 - -8. Springboot汇总 [点击下载](https://pan.baidu.com/s/161cwUpTImZBxulwpqfzQmg) 密码:c5nf - -09. Spring汇总 [点击下载](https://pan.baidu.com/s/1NrLXcU7r1g3bUEysxDL7zA) 密码:sypi - -10. Python14张导图 [点击下载](https://pan.baidu.com/s/1NrLXcU7r1g3bUEysxDL7zA) 密码:sypi - -11. 数据结构知识框架 [点击下载](https://pan.baidu.com/s/1yXO8PSWuZwR9fUAOFiZJxg) 密码:1obz - -12. 操作系统导图 [点击下载](https://pan.baidu.com/s/1_clSc3TZgmJKs7oNG-nwSQ) 密码:txb7 - -13. Java基础14张 [点击下载](https://pan.baidu.com/s/1xI5H4MErSbhySyz3zbL87w) 密码:8glg - -14. C++基础和 API 设计 [点击下载](https://pan.baidu.com/s/1rHsPZDAYuZFhkvVgpxLhjg) 密码:b1bj - -15. Hadoop超详细 [点击下载](https://pan.baidu.com/s/1pQI3b8r2u_wC8UA8fHpnPQ) 密码:sad6 - -16. linux基础知识 [点击下载](https://pan.baidu.com/s/1G3THmZ-Is8ALSih4X1qVhg) 密码:462z - -17. js知识学习 [点击下载](https://pan.baidu.com/s/1Z22SH4TVBF1BUHvbGP06pg) 密码:hgkm - -18. Vue框架思维导图笔记 [点击下载](https://pan.baidu.com/s/1Z22SH4TVBF1BUHvbGP06pg) 密码:hgkm - -19. CSS和HTML导图(质量一般)[点击下载](https://pan.baidu.com/s/1Pj3R60NHTxjKo5RvjeV2yg) 密码:bq15 - -20. 28张 架构师技能导图 [点击下载](https://pan.baidu.com/s/19Q4Q1XQtOGXsjsVecgzYgQ) 密码:zp7n - -21. 计算机网络超全学习导图 [点击下载](https://pan.baidu.com/s/17XmSOYGv5-Vww-gzN_XqcA) 密码:cqfu - -22. MySQL高级 [点击下载](https://pan.baidu.com/s/1wp8EWDf3DBR0leQwxw7T1g) 密码:mivx - -23. MySQL基础与性能优化(资料有点旧,但是可以用)[点击下载](https://pan.baidu.com/s/1KAmO4l8xaQ4ui4hYsqwHhw) 密码:tuh5 - -24. 数学超全导图合集 [点击下载](https://pan.baidu.com/s/1oDoh-mMN8DtB5TxgZvolDg) 密码:3dqh - -25. NPDP 知识体系 [点击下载](https://pan.baidu.com/s/1oDoh-mMN8DtB5TxgZvolDg) 密码:3dqh - -26. JAVA面试思维导图(旧)[点击下载](https://pan.baidu.com/s/17CIL9lbPwj0QHfy8nE3Ckg) 密码:ga8v - -27. 深度学习图像算法面试题 [点击下载](https://pan.baidu.com/s/1aXzcU00wTLoIJtynbvemSw) 密码:k2e1 - -28. 小白的前端导图汇总 [点击下载](https://pan.baidu.com/s/1NTKYFyXohTK-ZNPDQigjyA) 密码:rh57 - -29. SpringCloud思维导图 [点击下载](https://pan.baidu.com/s/1EQLQWTvJMUyIxct8FE7LhA) 密码:15xz - diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/.DS_Store" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/.DS_Store" deleted file mode 100644 index fd75b9ec..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/.DS_Store" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/1.json" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/1.json" deleted file mode 100644 index b23e14ba..00000000 --- "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/1.json" +++ /dev/null @@ -1 +0,0 @@ -{ "applyId": "30815023", "contractNo": "10004846945", "customerId": "1024924300", "dearteType": "减免测试方案", "overduePeriodNum": 1, "DearteReason": "JM006", "jieqing": "1", "productDepart": "其他", "dearteTypeC": "减免正常", "BPMdeartePeriod": 1, "BPMrepayDate": "2020-06-23" \ No newline at end of file diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/code.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/code.png" deleted file mode 100644 index 14bab389..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/code.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/demo.png" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/demo.png" deleted file mode 100644 index c65b7f63..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/demo.png" and /dev/null differ diff --git "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/polarisxu-qrcode-m.jpg" "b/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/polarisxu-qrcode-m.jpg" deleted file mode 100644 index be466d72..00000000 Binary files "a/\350\266\205\346\270\205\346\200\235\347\273\264\345\257\274\345\233\276 100 \345\274\240/img/polarisxu-qrcode-m.jpg" and /dev/null differ