自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 二叉搜索树的迭代遍历方式

二叉搜索树是一种特殊的二叉树,有许多性质每个节点都有一个键(和一个相关联的值),并且每个节点的键都是唯一的。对于树中的每个节点X,其左子树中的所有键都小于X的键,其右子树中的所有键都大于X的键。每个左右子树也都是二叉搜索树。这些性质使得二叉搜索树在进行查找、插入和删除等操作时能够提供良好的性能,平均情况下可以在O(log n)时间内完成这些操作(这里n是树中节点的数量)。

2023-11-06 20:28:04 65

原创 循环不变量:以leetcode106. 从中序与后序遍历序列构造二叉树为例

给定两个整数数组inorder和postorder,其中inorder是二叉树的中序遍历,postorder是同一棵树的后序遍历,请你构造并返回这颗二叉树。[-1]题目根据两个顺序构造唯一的二叉树。如果用两个序列可以很直观的看出来:那么代码该如何写呢说到一层一层切割,就应该想到了递归。来看一下一共分几步:首先需要创建一个表来存数据和对应下标。第一步:如果数组大小为零的话,说明是空节点了。第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。

2023-10-31 20:56:34 58 1

原创 leetcode513.找树左下角的值与leetcode17.电话号码的字母组合

对于电话号码的这道题。不像二叉树这种天然的二分树,这道题需要自己拆分循环次数,因此在递归前应该先找到循环次数,对于这道题,循环次数就是当前数字对应的字母字符个数。进入循环后即需要添加当前的字符而后进入递归,递归需要弹出递归前加入的字符。对于左下角的值,其实题目的本质就是求最大深度的最左边的值。参数为根节点和每次遍历的深度。再来看参数,参数指定是有题目中给的string digits,然后还要有一个参数就是int型的index。对于电话号码这道题目,当记录的num长度和传入的字符串长度相同时,递归结束。

2023-10-30 22:08:09 50 1

原创 leetcode257.二叉树的所有路径

2、递归终止条件:由于是遍历到叶节点就结束遍历,所以终止条件是遍历到叶子节点,但是处理节点的前提是要先将节点添加到路径中。1、递归返回值和传入参数,这里不用返回具体的变量,直接对全局变量处理,传入参数则是节点,路径和最终答案。根据二叉树很容易想到递归,而每次递归到的路径要记录因此似乎不得不使用递归。为什么要回溯的逻辑已经在上文中讲了,现在讲讲在哪儿回溯。,返回所有从根节点到叶子节点的路径。3、一次递归(回溯)的逻辑。给你一个二叉树的根节点。是指没有子节点的节点。递归的话则要考虑三步。

2023-10-29 22:51:06 44 1

原创 leetcode 104.二叉树的最大深度

给定一个二叉树root,返回其最大深度。二叉树的是指从根节点到最远叶子节点的最长路径上的节点数。32[0, 104],所以本题中我们通过后序求的根节点高度来求的二叉树最大深度。求深度:前序遍历(中左右)求高度:后序遍历(左右中)

2023-10-28 23:25:04 36 1

原创 回溯:以leetcode.77 组合为例的统一写法(三步)

回溯法亦可以称做回溯搜索法,是一种搜索的方式。在二叉树中,DFS的算法中对回溯有着许多应用。如果想让回溯法更加高效,可以通过一些剪枝的操作。那么既然回溯法并不高效为什么还要用它呢?:因为没得选,一些问题能暴力搜出来就不错了,撑死了再剪枝一下,还没有更高效的解法。

2023-10-28 21:28:16 28 1

原创 718.最长重复子数组

给两个整数数组nums1和nums2,返回两个数组中、长度最长的子数组的长度。3长度最长的公共子数组是 [3,2,1]。5。

2023-10-25 23:24:32 27 2

原创 leetcode.739 每日温度-单调栈

单调栈(Monotonic Stack)是一种数据结构,通常用于解决与单调性相关的问题。它是一个栈(Stack)的变种。单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。更直白来说,就是用一个栈来记录我们遍历过的元素,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。

2023-10-23 21:25:20 60

原创 leetcode-300. 最长递增子序列

这是因为在大多数动态规划问题中,我们都习惯于从小到大遍历状态,因为小的状态常常是计算大的状态所必需的。如果改为从大到小遍历,可能会让人感到困惑,尤其是在复杂的动态规划问题中。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。动态规划的基本思想是将问题分解为相互重叠的子问题,并存储子问题的解,避免重复计算。为结尾的递增子序列后面,形成一个更长的递增子序列。因此,理论上来说,内层遍历是可以从右到左进行的,即从。为结尾的最长递增子序列的长度。为结尾的最长递增子序列的长度。

2023-10-22 22:47:03 36 1

原创 leetcode236. 二叉树的最近公共祖先

这个遍历的过程是为了找到节点p和q在二叉树中的位置,并通过这个过程找到它们的最低公共祖先。在这个过程中,如果左右子树的递归结果都不为空,说明在当前节点的两侧都找到了目标节点,因此当前节点就是最低公共祖先;如果两侧的递归结果都为空,说明当前节点的子树中不包含目标节点,递归返回null。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(因为根据定义最近公共祖先节点可以为节点本身。的最近公共祖先是节点。

2023-10-20 00:14:44 27 1

原创 普通二叉树的前中后三种遍历方式

二叉树(Binary Tree)是一种树状数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。每个节点包含一个值或数据元素,并可以包含指向其子节点的引用。二叉树的结构是由节点和节点之间的连接关系组成的。:二叉树的顶部节点,是整个树的起始点。:没有子节点的节点称为叶节点。:有子节点的节点称为父节点。:父节点的下级节点称为子节点。通常分为左子节点和右子节点。:节点的深度表示从根节点到该节点的路径长度,根节点的深度为0。:二叉树的高度表示树中最深的叶节点的深度。

2023-10-19 23:05:02 40 1

原创 leetcode102.二叉树层序遍历(BFS)

是一种用于遍历或搜索树或图的算法。这种算法从图的某一节点(根)开始,访问其所有相邻的节点,然后对每一个相邻节点,再查看它们未被访问过的相邻节点,如此继续,直到所有的节点都被访问过。因此,BFS是以层次为单位进行访问的,先访问的节点离根节点更近。(即逐层地,从左到右访问所有节点)。首先看一下这个题目的代码及解释。

2023-10-18 23:37:49 39 1

原创 Java-创建同步代码块、同步方法

锁的名字为obj,当三个线程抢到票后会立即把门锁住,知道线程内部执行完成。锁打开后,t1、t2、t3重新争夺cpu。

2023-10-18 23:27:08 172 1

原创 StringTable(串池)详解

对于上述代码,由于JDK1.6版本中是复制了一个对象,并放入串池中,所以s在堆中,x是串池中常量,所以不等。在1.8版本中把对象放入了放入了串池中,所以x虽然也是在串池中,但是其地址是指向s,所以是true。对于上述代码,无论在JDK1.8/1.6环境下运行返回值都是true/flase。

2023-10-14 22:38:07 83 1

原创 JVM入门-内存结构

记住下一条程序指令每个线程运行时需要的内存,称为虚拟机栈每个栈由多个栈帧(Frame)组成,对应每次方法调用时所以占用的内存每个线程只能有一个活动栈帧(顶栈帧),对应着当前正在执行的那个方法。

2023-10-13 23:20:58 34

原创 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 41

原创 leetCode53.最大子数组和,超详细解剖(动态规划)

是动态规划问题的核心部分,它定义了问题的状态之间的关系,用于描述如何从一个状态转移到另一个状态。:动态规划通常用于具有重叠子问题性质的问题,即问题可以被分解成相似的子问题,这些子问题会多次出现在解决过程中。转移方程:若dp【i-1】

2023-10-11 14:30:49 168 1

原创 Leetcode15.三数之和超详细解剖理解

这行代码是用来创建一个列表,该列表可以包含其他列表,其中每个内部列表都包含整数。此处用到了while()迭代的方式作为去重nums[i]、nums[j]的值,然后才检查是否与下一个元素相同。是确保在处理重复元素时的正确选择,以保持算法的准确性。,这可能会导致跳过不同的元素,从而影响代码的正确性。,然后检查相等性,从而跳过相同的元素。此处nums[k]也是有可能重复的。,它会首先检查相等性,然后再增加。在这段代码中,我们需要首先增加。更合适的原因,因为它会先增加。答案中不可以包含重复的三元组。

2023-10-10 13:47:36 54 1

原创 Java项目 - reggeie - 文件上传和文件下载

Spring框架在Spring-web包中对文件上传进行了封装。浏览器文件下载=本质上是服务端文件以流的形式传输。文件上传时,对页面的form表单有要求。服务端接收客户端上传的文件。文件下载-从服务器到本地。文件上传代码示例(前端)

2023-08-04 14:14:08 29 1

原创 Python_bool&比较

初学者

2022-12-24 11:14:38 181

原创 Pyhton初学者-input语句学习

初学python

2022-12-24 10:39:23 170 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除