![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 77
爪哇缪斯
这个作者很懒,什么都没留下…
展开
-
图解LeetCode——437. 路径总和 III
的方式进行解题,因为前缀和适合解答那种连续、累积和这类题目。我们可以以下图为例,如果有4个节点,分别是。:采用前序遍历计算树节点的前缀和,难免会出现重复节点计算的情况,这个怎么办?不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。”——根据这条信息,我们可以确定遍历操作方向;】和等于 8 的路径有 3 条,如图所示。的方式,将值还原到上一步,避免重复计算。了解了前缀和之后,我们就可以从树的。,求该二叉树里节点值之和等于。原创 2023-06-16 17:24:50 · 118 阅读 · 0 评论 -
图解LeetCode——209. 长度最小的子数组
那么以上就是本题的解题思路了,为了便于大家理解,我们一下以输入。随着遍历结束,我们返回满足上述条件中最小长度即可;写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。”这个关键点,我们很容易就会想到能否采用滑动窗口来解决这道题。为例,看一下具体的操作流程是怎么样的。如果不存在符合条件的子数组,返回。】子数组 [4,3] 是该条件下的长度最小的子数组。而题目中的另一个关键点——连续子数组其和需要大于等于。个正整数的数组和一个正整数。】如果连续子数组其和。】如果连续子数组其和。原创 2023-06-16 11:12:09 · 117 阅读 · 0 评论 -
图解LeetCode——200. 岛屿数量
以上就是判断一个岛屿的方式,当我们将整个数组都遍历完毕后,就可以统计出来一共有多少的岛屿数目了。'(水)组成的的二维网格,请你计算网格中岛屿的数量。在遍历过程中,由于我们是针对每一个格子都进行上下左右四个方向的遍历,所以,写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。为例,看一下具体的操作流程是怎么样的。此外,你可以假设该网格的四条边均被水包围。,才继续遍历,否则终止该方向的遍历;(防止重复遍历值为1的格子);进行遍历,来判断每个岛屿了。】遍历到的格子如果是。】只要遍历到的格子是。原创 2023-06-15 15:49:47 · 205 阅读 · 0 评论 -
图解LeetCode——994. 腐烂的橘子
由于腐烂的橘子可以将好的橘子也变腐烂,所以,我们需要采用某种方式,将这种橘子腐烂的轮次模拟计算出来。】左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。那么,需要补充一点的就是,当我们计算矩阵中腐烂橘子的同时,也可以同时获得新鲜的橘子的个数。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。以上就是本题的解题思路。的新鲜橘子都会腐烂。中,准备作为后续下一轮需要操作的烂橘子。腐烂的橘子之后,我们会将该烂橘子的。中存储的腐烂橘子的个数。原创 2023-06-13 18:47:08 · 165 阅读 · 0 评论 -
图解LeetCode——20. 有效的括号
那么,对于这种字符“配对”的题目,我们就很容易能够想到,可以采用堆栈的方式进行解题。好了,以上就是本题的解题思路了,为了方便大家理解,我们以输入s =写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。是否是有效字符串,这里的“有效”就是通过是否是完整括号来决定的(为例,看一下其具体的执行过程是怎么样的。' 的字符串 s ,判断字符串是否有效。来提供堆栈能力的支持,由于在LeetCode的执行效率中,基本的解题思想确定了之后,我们就可以通过遍历。根据题目描述,我们需要校验给定的字符串。原创 2023-06-13 11:16:49 · 263 阅读 · 0 评论 -
图解LeetCode——230. 二叉搜索树中第K小的元素
中寻找第K小的元素。,当我们找到了第K小的元素之后,将该节点的值赋值给result,那么在后续的遍历过程中,小的元素了之后,如果让后续的遍历可以快速结束呢,我们还可以通过创建一个全局变量。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。以上就是本题的解题思路,为了便于理解,我们以输入为root =所以,我们可以采用中序遍历的方式,因为。的元素,我们需要创建一个全局的计数器。,请你设计一个算法查找其中第。根据题目描述,我们要在题目给定的。,最终输出的就是一个。那么如果我们找到了第。原创 2023-06-05 13:30:31 · 166 阅读 · 0 评论 -
图解LeetCode——199. 二叉树的右视图
给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。原创 2023-06-05 11:56:10 · 194 阅读 · 0 评论 -
图解LeetCode——114. 二叉树展开为链表
根据题目描述,需要我们根据给定的二叉树,然后对其进行先序遍历/前序遍历,从而拼装出一条链表。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。那么,了解了先序遍历方式之后,就可以通过遍历一次二查树,将树节点。中,然后再针对List进行遍历操作,从而构造一条先序顺序的链表。上面就是本题的解题思路,为了方便理解,下面我们以root =为例,看一下具体的处理过程是怎么样的。指针处,然后再重复第三步骤,直至整棵树遍历完毕;】创建两个指针,分别为遍历用的指针。遍历的下一个节点时,都是将。原创 2023-06-05 11:01:41 · 108 阅读 · 0 评论 -
图解LeetCode——98. 验证二叉搜索树
那么如果这个二叉树是二叉搜索树,原创 2023-06-01 13:20:50 · 87 阅读 · 0 评论 -
图解LeetCode——108. 将有序数组转换为二叉搜索树
的方式进行“数组拆分”操作。那么寻找中心点mid也就自然而然的采用“方式2”了。此时,将原有数组拆分为两部分,分别为。通过以上的解题思路,我们在编码时,就可以通过递归调用方式进行解题了。二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。】[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。,然后再分别针对这两部分数组再次执行上面操作即可。为例,看一下具体的解题过程。根据题目要求,我们要根据题目给出的。原创 2023-06-01 11:49:02 · 316 阅读 · 0 评论 -
图解LeetCode——102. 二叉树的层序遍历
那么每一层我们将其保存到一个List中,然后所有二叉树节点都遍历完毕后,就输出。,那么就无法区分哪些是一层的了。以上就是深度优先遍历的解题思路,为了便于理解,下面我们以输入root =写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。方式,去输出每个节点,处理方式就是首先我们来创建一个队列。的方式获得这个层级的节点值集合。,用于暂存遍历的节点。中没有创建该层集合,则创建,然后将节点的。根据题目要求,我们要实现二叉树的。为例,看一下具体的处理过程。为例,看一下具体的处理过程。原创 2023-05-31 18:10:00 · 380 阅读 · 0 评论 -
图解LeetCode——543. 二叉树的直径
了,从叶子节点开始统计,一直统计到根节点,并且每次都要进行直径的计算和比较,当遍历到根节点时,最大直径也就计算出来了。那么,因为二叉树也并不只有3个节点,如果节点很多的话,那么这个二叉树的层级也就会越深,那么下面我们其实如果能找到。根据题目描述,我们要获得二叉树中任意两个节点的最大直径。以上就是本题的解题思路,为了便于大家更加深入的理解,下面我们以输入root =】3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。的最大值(或最深路径),那么相加必然就是本题所要求解的最大直径了。原创 2023-05-31 13:25:53 · 123 阅读 · 0 评论 -
图解LeetCode——146. LRU 缓存
那么针对第二个问题,我们可以采用。原创 2023-05-31 11:59:31 · 179 阅读 · 0 评论 -
图解LeetCode——138. 复制带随机指针的链表
根据题目描述,如果仅仅是单向链表,我们可以非常方便的通过在遍历旧的链表的同时来构建新的链表,但是本题中的一个难点是,存在一个属性是。,它用来表示随机的一个指针,执行链表中的任意节点,甚至是空节点。如上就是思路2的解题思路了,为了方便大家理解,我们下面还是以图解的方式演示一下这3个步骤的操作方式。那么,在思路2中,我们就是采用在原有链表修改的方式进行解题的。指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。原创 2023-05-25 18:09:52 · 232 阅读 · 0 评论 -
图解LeetCode——24. 两两交换链表中的节点
然后将最终交换后的链表的头节点返回回来。那么第一个解题思路就是我们通过遍历链表中的节点,然后进行交换操作。为了方便起见,我们可以在原链表的头节点前面再创建一个虚拟节点。进行解题,其实具体思路跟思路1是极其相似的,只是写法的差异而已,此处就不再赘述和画图了,具体的解题请见下方实现2的代码部分即可。,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。节点),这样,我们就可以通过一下逻辑实现节点交换了,以输入。以上就是本题的解题思路,为了方便大家理解,我们以输入为。原创 2023-05-25 13:31:04 · 337 阅读 · 0 评论 -
图解LeetCode——19. 删除链表的倒数第 N 个结点
移动,当p2指向了链表中的最后一个节点的时候,我们就可以停止p1与p2的移动操作了。那么此时我们会发现p1指向的节点正好是倒数第4个节点,而p1.next就是我们要删除的节点。)的方式,即:还是以一共有6个节点,我们要删除倒数第3个节点为例。,这样加入要删除倒数第6个节点,即:头结点的话,我们也更方便操作。,我们可以通过遍历先计算整个链表中的节点的个数,比如一共有。个节点的话,我们其实就是要删除从头结点开始计算的第。以上就是解题思路了,为了便于理解,我们以输入。那么由于要删除倒数第3个节点,我们可以。原创 2023-05-20 21:56:21 · 96 阅读 · 0 评论 -
图解LeetCode——142. 环形链表 II
那么我们来分析一下这个链表,以下图为例,我们将其拆分为。】slow行走1步,fast行走2步,当fast与slow相遇的时候,就是slow的行走距离,也就是。根据题目描述,我们需要返回链表开始入环的第一个节点。】此时将fast指针指向head头节点,然后fast变为每次只行走1步,那么当fast。以上就是本题的解题思路了,在下图中,通过举例的方式,一步一步的演示其执行逻辑,如下是。,返回链表开始入环的第一个节点。,则表示找到了入环的第一个节点,返回该节点即可。】链表中有一个环,其尾部连接到第一个节点。原创 2023-05-19 11:38:33 · 296 阅读 · 0 评论 -
图解LeetCode——141. 环形链表
以上就是解题思路,在下图中,我们以一个环形链表的例子,看一下具体的判断流程。,即:当slow指针指向的节点等于fast指针指向的节点时,就表示交汇了。指针再次到达,则链表中存在环。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。时,则表示该链表已经遍历完毕了。那么,最容易想到的解题方式就是,我们创建一个。】链表中有一个环,其尾部连接到第二个节点。】链表中有一个环,其尾部连接到第一个节点。集合去存储遍历节点的路径,那么,我们能用。,所以要注意非空的判断。了,那么就说明这个链表是环形链表。原创 2023-05-18 14:04:36 · 169 阅读 · 0 评论 -
图解LeetCode——206. 反转链表
这么做的目的就是为了继续可以向后去执行遍历操作。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。针对链表反转操作,我们首先可以选择采用迭代的方式进行转换,即,” ~ \(^o^)/ ~ 「干货分享,每天更新」根据题目描述,我们要将原链表执行翻转操作。,此处需要注意的是,由于我们要修改。更多技术干货,欢迎大家关注公众号“的时候,就可以进行两个节点之间的。节点作为方法的入参进行传递。,并返回反转后的链表。,则直接返回该节点。原创 2023-05-16 18:22:03 · 147 阅读 · 0 评论 -
图解LeetCode——160. 相交链表
请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。所以,根据以上描述,我们只会关心情况1中的相交。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。的位置处相交了,那么如果是这种链表相交的情况话,返回的结果但就是。原创 2023-05-15 13:13:29 · 210 阅读 · 0 评论 -
图解LeetCode——240. 搜索二维矩阵 II
这两个出发点才是我们解题的关键,因为这两个点在水平方向移动和在垂直方向移动分别是递增或者递减的;那么我们可以比较明显得感知到这两个特性就会是我们解开这个题的关键所在了。那么我们以示例一的矩阵作为例子,如果我们。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。上面就是具体的解题思路了,那么下面我们以输入:matrix =为例,来看一下具体的处理逻辑。那么,通过上面我们的分析,可以发现。根据题目描述,我们需要在矩阵。target】那么就向。target】那么就向。target】那么返回。原创 2023-05-15 01:16:19 · 280 阅读 · 0 评论 -
图解LeetCode——48. 旋转图像
所以上面的解法就不适合去解答这道题了。二维矩阵顺时针旋转90度。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。其中,比较容易想到就是先创建一个相同大小的二维矩阵。旋转图像,这意味着你需要直接修改输入的二维矩阵。为例,来看一下具体的操作流程。根据题目描述,我们要将题目给出的二维矩阵。经过上面两个步骤,我们就可以实现将。使用另一个矩阵来旋转图像。第1行的时候,就将其赋值为。第2行的时候,就将其赋值为。第3行的时候,就将其赋值为。但是,题目有一个要求,就是。的旋转,然后返回旋转后。原创 2023-05-12 01:33:08 · 211 阅读 · 0 评论 -
图解LeetCode——238. 除自身以外数组的乘积
这种遍历方式,我们可以来计算右上角的数字乘积(用temp保存),然后与左下角再执行相乘操作;所以,为了解决这个问题,我们可以看下面这个图,在这个图中。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。好了,如上就是本题的解题思路了,为了便于大家理解,我们以。但是如果按照上面计算我们会发现一个问题,就是会出现很多。这种遍历方式,我们可以来计算左下角的数字乘积;为例,看一下具体的操作过程。针对上面的分析,我们可以分为两部分对数组。中,每个元素除自己之外的乘积值,即假设。,那么正好可以分割为。原创 2023-05-11 01:56:44 · 271 阅读 · 0 评论 -
图解LeetCode——189. 轮转数组
但是由于nums的数组长度是有限的,所以被移动越界的数组就会被移动到原数组的头部位置。,然后按位映射进行元素的复制操作。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。看做是一个无限长的数组的话,其实这种轮转操作,就相当于。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]通过上面解法,我们发现必须要创建一个同等长的数组。的值去轮转数组,如果我们将数组。,将数组中的元素向右轮转。原创 2023-05-10 13:39:55 · 46 阅读 · 0 评论 -
图解LeetCode——56. 合并区间
排序完毕之后,我们就可以开始执行重叠区间的合并操作了。进行排序,即:根据每个区间中的左区间来进行排序操作。,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。,用于存储合并重叠区间后的最新区间。如上就是这道题的解题思路了,为了便于理解,我们以输入为。为例,看一下具体的执行操作是怎么样的。表示若干个区间的集合,其中单个区间为。,那么我们为了便于操作,首先可以将数组。】否则,说明区间并未发生重叠,则将。排在后面元素的开始区间。原创 2023-05-09 19:38:06 · 62 阅读 · 0 评论 -
图解LeetCode——53. 最大子数组和
为例,来看一下按照模拟拆分子数组的情况下,怎么能够计算出来最大连续子数组的和。数组中元素较少时是没问题的,但是如果元素很多,则执行效率就会非常低。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。状态转移方程也就是我们在上面结论中所描述的,那么,下面我们还是以nums =那么在当前这一个子数组中,最大数组和就是。那么在当前这两个子数组中,最大数组和就是。那么在当前这三个子数组中,最大数组和就是。为结尾的所有子数组中的最大数组和pre;但是,对于上面的这种模拟分组计算来说,原创 2023-05-07 02:19:04 · 67 阅读 · 0 评论 -
图解LeetCode——560. 和为 K 的子数组
其实就是当我们需要计算集合a[0]、a[1]、a[2]……、a[i]中子序列之和时,有如下规律:。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的?那么假设我们的子序列不是从第一个元素开始的呢。如果存在,则获取到相应的。以上就是本题的解题思路了,为了便于理解,我们以输入参数。但是,这种计算方式时间复杂度较高,我们其实还可以采用。的值,然后返回符合以上两个条件的所有子序列。值,就是我们还缺少的子序列总和(我们假设是。,并计算下标i对应的前缀和。中的元素都遍历完毕之后,原创 2023-05-04 18:06:53 · 90 阅读 · 0 评论 -
图解LeetCode——438. 找到字符串中所有字母异位词
好了,上面就是整道题的解题逻辑,我们还是通过举例来加深本题的理解。,那么就说明我们找到了p的异位词子串,则将head复制给结果List即可。起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。的子串,返回这些子串的起始索引。原创 2023-05-03 19:55:02 · 115 阅读 · 0 评论 -
图解LeetCode——15. 三数之和
以上就是本题的解题思路,我们可以通过一个示例来看一下具体的操作过程,由于篇幅问题,如下我仅画出了部分的计算逻辑,但是并不影响整体的逻辑判断。除了上面的逻辑,我们还需要注意去重的操作,也就是说,当我们移动i指针、p指针或q指针的时候,写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。,因为这样q会变小,整体的sum值也会变小更加趋近于0;,因为这样p会变大,整体的sum值也会变大更加趋近于0;去遍历整个排序后的数组,与此同时,我们创建两个指针。的计算逻辑,并以此类推,直到遍历完整个数组。原创 2023-05-02 22:28:05 · 85 阅读 · 0 评论 -
图解LeetCode——128. 最长连续序列
的算法解决此问题,那么排序的做法我们就无法实现了。对于非最大值,我们也不用处理,这样就可以加快查找速度了。是连续序列的最大值,那么我们执行倒序查找set中的元素,即:依次寻找。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。不是连续序列的最大值,那么我们继续向下遍历,不用做任何操作;值,那么最终结果就是本题要求的——最长数字连续序列长度了。根据本题的描述,一般来说,最容易想到的就是先将。以上就是本题的解题思路了,还是按照惯例,我们以。,然后再从排序后的数组头部开始遍历,原创 2023-05-02 13:42:53 · 62 阅读 · 0 评论 -
图解LeetCode——49. 字母异位词分组
我们创建Map数据结构的变量,以“aet”作为key,以List存储原始字符串为value,存储到Map结构中。是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。关于第一个问题的解决办法,我们可以通过对一个字符串的所有字符进行排序,即通过。其实本题的难点之一就是对于这个“字母异位词”的理解。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。,以上面的“eat”为例,所有的6个字母异位词排序后都为“字符串数组之后,就完成了对每个字符串元素进行的分组操作了。原创 2023-05-02 10:33:06 · 63 阅读 · 0 评论 -
图解LeetCode——283. 移动零
此处需要注意的是,除了当我们发现数字0的时候,需要对zeros赋值之外,写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。数组遍历完毕后,就是最终本题的结果啦。” ~ \(^o^)/ ~ 「干货分享,每天更新」那么,当所有的非0数字都被移动到左侧之后,首先,第一个解题思路就是,我们记录一下。以上就是思路1的解题逻辑,下面我们以。更多技术干货,欢迎大家关注公众号“出现的位置,我们创建一个数组。的方式,即:我们创建一个指针。,编写一个函数将所有。在思路2中,我们采用。原创 2023-05-01 15:26:34 · 79 阅读 · 0 评论 -
图解LeetCode——剑指 Offer 49. 丑数
1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。如上就是本题的解题思路了,下面我们还是依照惯例,通过例子来演示一下。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。,不过对于整体解题思路的理解是没有任何影响的。” ~ \(^o^)/ ~ 「干货分享,每天更新」(x,y,z分别表示数字2、3、5的出现次数);更多技术干货,欢迎大家关注公众号“,所以,当我们创建待返回结果数组。针对以上逻辑,我们就针对。根据题意,我们要获取。针对上面的逻辑计算,原创 2023-04-28 12:17:34 · 42 阅读 · 0 评论 -
图解LeetCode——剑指 Offer 31. 栈的压入、弹出序列
我们可以按以下顺序执行:push(1), push(2), push(3), push(4), pop() -> 4,push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1。如上就是这道题的解题思路了,下面我们还是举例来加深一下对这道题的理解。这个双向队列来模拟堆栈操作,当然也是可以选择Stack的,只是在提交后的执行效率会降低不少。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。是该压栈序列对应的一个弹出序列,但。原创 2023-04-27 14:32:48 · 78 阅读 · 0 评论 -
图解LeetCode——剑指 Offer 60. n个骰子的点数
那么上面介绍完解题思想了之后,我们还是通过示例来加深对这道题的理解。下面我们以两个骰子为例,计算其投掷值总和的概率。的这11个点(因为一个骰子的点数是从1~6)。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。关于投出附加骰子的其他数值,依次类推即可,我就不一一列出来了……那么我们也可以将其作为“两个骰子”来计算,即:(个骰子总和点数的概率集合,那么我们就从最简单的。个骰子扔在地上,所有骰子朝上一面的点数之和为。其投掷的总和的值就在从。的所有可能的值出现的概率。的概率(0.16667)原创 2023-04-26 10:19:33 · 78 阅读 · 0 评论 -
图解LeetCode——剑指 Offer 59 - II. 队列的最大值
从上面的规律中,我们可以看到,无论移除任意元素,最大值都不会是1,原因就是数字1肯定是先于数字7被移除掉了。其实我们可以考虑一个例子,假设我们要分别插入。这种很显然是满足题目要求的,但是明显时间复杂度和空间复杂度都不高。解题思路就如上面所述,下面我们还是按照惯例,举例演示:我们要插入数字。方法的话,那么本题我们就会非常的简单,就是实现一个简单的队列即可。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。得到队列里的最大值,要求函数。方法的实现,因为它表示的是。很显然,不满足题目需求。原创 2023-04-25 02:22:08 · 45 阅读 · 0 评论 -
图解LeetCode——剑指 Offer 67. 把字符串转换成整数
而且,根据题目的提示,最终数值有可能会超出int的最大范围或最小范围,那么,我们怎么判断呢?号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。】假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。】 转换截止于数字 '3' ,因为它的下一个字符不为数字。’,如果是,则表示是负数,我们以变量。那么,当我们开始遍历的时候,当发现了。原创 2023-04-24 00:53:37 · 47 阅读 · 0 评论 -
图解LeetCode——剑指 Offer 62. 圆圈中最后剩下的数字
这个数字排成一个圆圈,从数字开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如:这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是,因此最后剩下的数字是3。根据题目描述,我们会得到一个长度为的数组,然后这个数组会首尾相接从而组成一个圆圈。那么我们每次从这个圆圈里删除第m个数字,从而求出最后剩余的那个数字。我们以数组为,为例,具体的执行逻辑此处就不赘述了,请见下图所示即可:那么,如果我们以模拟的方式去执行的话,由于的区间在,原创 2023-04-17 01:00:01 · 75 阅读 · 0 评论 -
图解LeetCode——剑指 Offer 57 - II. 和为s的连续正数序列
那么,我们就可以较为容易的想到采用“滑动窗口”方式进行解题。,那么满足条件后,我们需要将数字4踢出窗口,并增加数字6,那么此时我们发现,窗口里存在。,并且后续无论怎么滑动,窗口内的元素之和都是大于9的(题目要求窗口内至少含有两个数)。既然我们要采用滑动窗口进行解题,我们首先默认创建两个指针,即:指向窗口最前端的。的时候,就可以终止窗口滑动操作了。变量,用于记录滑动窗口中所有元素之和,它的默认值就是。,更新sum值(sum减去head值),执行。,并更新sum值(sum加上tail值);原创 2023-04-16 01:15:21 · 46 阅读 · 0 评论 -
图解LeetCode——剑指 Offer 29. 顺时针打印矩阵
上面就是本道题的解题思路了,我们还是按照惯例,举个例子来看一下具体的处理过程。写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。也就是说,根据题目描述的执行方式去采用编码的方式进行解题。首先,在遍历矩阵之前,我们先考虑好边界问题,因为要按照采用。,每当遍历完该行之后,会执行。,每当遍历完该行之后,会执行。,每当遍历完该行之后,会执行。,每当遍历完该行之后,会执行。,采用for循环的方式,依次。,采用for循环的方式,依次。,采用for循环的方式,依次。,采用for循环的方式,依次。原创 2023-04-11 12:11:18 · 50 阅读 · 0 评论