刷题
文章平均质量分 73
budaniao__
这个作者很懒,什么都没留下…
展开
-
循环不变量:以leetcode106. 从中序与后序遍历序列构造二叉树为例
给定两个整数数组inorder和postorder,其中inorder是二叉树的中序遍历,postorder是同一棵树的后序遍历,请你构造并返回这颗二叉树。[-1]题目根据两个顺序构造唯一的二叉树。如果用两个序列可以很直观的看出来:那么代码该如何写呢说到一层一层切割,就应该想到了递归。来看一下一共分几步:首先需要创建一个表来存数据和对应下标。第一步:如果数组大小为零的话,说明是空节点了。第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。原创 2023-10-31 20:56:34 · 70 阅读 · 1 评论 -
leetcode513.找树左下角的值与leetcode17.电话号码的字母组合
对于电话号码的这道题。不像二叉树这种天然的二分树,这道题需要自己拆分循环次数,因此在递归前应该先找到循环次数,对于这道题,循环次数就是当前数字对应的字母字符个数。进入循环后即需要添加当前的字符而后进入递归,递归需要弹出递归前加入的字符。对于左下角的值,其实题目的本质就是求最大深度的最左边的值。参数为根节点和每次遍历的深度。再来看参数,参数指定是有题目中给的string digits,然后还要有一个参数就是int型的index。对于电话号码这道题目,当记录的num长度和传入的字符串长度相同时,递归结束。原创 2023-10-30 22:08:09 · 64 阅读 · 1 评论 -
leetcode257.二叉树的所有路径
2、递归终止条件:由于是遍历到叶节点就结束遍历,所以终止条件是遍历到叶子节点,但是处理节点的前提是要先将节点添加到路径中。1、递归返回值和传入参数,这里不用返回具体的变量,直接对全局变量处理,传入参数则是节点,路径和最终答案。根据二叉树很容易想到递归,而每次递归到的路径要记录因此似乎不得不使用递归。为什么要回溯的逻辑已经在上文中讲了,现在讲讲在哪儿回溯。,返回所有从根节点到叶子节点的路径。3、一次递归(回溯)的逻辑。给你一个二叉树的根节点。是指没有子节点的节点。递归的话则要考虑三步。原创 2023-10-29 22:51:06 · 58 阅读 · 1 评论 -
leetcode 104.二叉树的最大深度
给定一个二叉树root,返回其最大深度。二叉树的是指从根节点到最远叶子节点的最长路径上的节点数。32[0, 104],所以本题中我们通过后序求的根节点高度来求的二叉树最大深度。求深度:前序遍历(中左右)求高度:后序遍历(左右中)原创 2023-10-28 23:25:04 · 50 阅读 · 1 评论 -
回溯:以leetcode.77 组合为例的统一写法(三步)
回溯法亦可以称做回溯搜索法,是一种搜索的方式。在二叉树中,DFS的算法中对回溯有着许多应用。如果想让回溯法更加高效,可以通过一些剪枝的操作。那么既然回溯法并不高效为什么还要用它呢?:因为没得选,一些问题能暴力搜出来就不错了,撑死了再剪枝一下,还没有更高效的解法。原创 2023-10-28 21:28:16 · 44 阅读 · 1 评论 -
718.最长重复子数组
给两个整数数组nums1和nums2,返回两个数组中、长度最长的子数组的长度。3长度最长的公共子数组是 [3,2,1]。5。原创 2023-10-25 23:24:32 · 38 阅读 · 2 评论 -
leetcode.739 每日温度-单调栈
单调栈(Monotonic Stack)是一种数据结构,通常用于解决与单调性相关的问题。它是一个栈(Stack)的变种。单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。更直白来说,就是用一个栈来记录我们遍历过的元素,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。原创 2023-10-23 21:25:20 · 88 阅读 · 0 评论 -
leetcode-300. 最长递增子序列
这是因为在大多数动态规划问题中,我们都习惯于从小到大遍历状态,因为小的状态常常是计算大的状态所必需的。如果改为从大到小遍历,可能会让人感到困惑,尤其是在复杂的动态规划问题中。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。动态规划的基本思想是将问题分解为相互重叠的子问题,并存储子问题的解,避免重复计算。为结尾的递增子序列后面,形成一个更长的递增子序列。因此,理论上来说,内层遍历是可以从右到左进行的,即从。为结尾的最长递增子序列的长度。为结尾的最长递增子序列的长度。原创 2023-10-22 22:47:03 · 47 阅读 · 1 评论 -
leetcode102.二叉树层序遍历(BFS)
是一种用于遍历或搜索树或图的算法。这种算法从图的某一节点(根)开始,访问其所有相邻的节点,然后对每一个相邻节点,再查看它们未被访问过的相邻节点,如此继续,直到所有的节点都被访问过。因此,BFS是以层次为单位进行访问的,先访问的节点离根节点更近。(即逐层地,从左到右访问所有节点)。首先看一下这个题目的代码及解释。原创 2023-10-18 23:37:49 · 54 阅读 · 1 评论 -
leetCode53.最大子数组和,超详细解剖(动态规划)
是动态规划问题的核心部分,它定义了问题的状态之间的关系,用于描述如何从一个状态转移到另一个状态。:动态规划通常用于具有重叠子问题性质的问题,即问题可以被分解成相似的子问题,这些子问题会多次出现在解决过程中。转移方程:若dp【i-1】原创 2023-10-11 14:30:49 · 283 阅读 · 1 评论 -
leetcode5.最长回文子串(动态规划+填表)
上文的所有讨论是建立在子串长度大于 2 的前提之上的,我们还需要考虑动态规划中的边界条件,即子串的长度为 1 或 2。对于长度为 1 的子串,它显然是个回文串;对于长度为 2 的子串,只要它的两个字母相同,它就是一个回文串。也就是说,只有 s[i+1:j−1] 是回文串,并且 s 的第 i 和 j 个字母相同时,s[i:j]才会是回文串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。从长度较短的字符串向长度较长的字符串进行转移的。中,j-i+1(即子串长度)的最大值。注意:P是布尔类型。原创 2023-10-13 17:53:43 · 57 阅读 · 0 评论 -
Leetcode15.三数之和超详细解剖理解
这行代码是用来创建一个列表,该列表可以包含其他列表,其中每个内部列表都包含整数。此处用到了while()迭代的方式作为去重nums[i]、nums[j]的值,然后才检查是否与下一个元素相同。是确保在处理重复元素时的正确选择,以保持算法的准确性。,这可能会导致跳过不同的元素,从而影响代码的正确性。,然后检查相等性,从而跳过相同的元素。此处nums[k]也是有可能重复的。,它会首先检查相等性,然后再增加。在这段代码中,我们需要首先增加。更合适的原因,因为它会先增加。答案中不可以包含重复的三元组。原创 2023-10-10 13:47:36 · 84 阅读 · 1 评论