自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【LeetCode学习记录236】——二叉树的最近公共祖先

要找到给定节点p、q的根节点,就是要看否一个节点的左右子树是否存在与节点p,q等价的节点。换句话说,如果我们发现一个节点的左子结点刚好为p,而右子节点刚好为q,则该节点肯定是p、q的最近公共祖先。同理,如果右子树下没有节点能匹配到p或者q,就从左子树的根作为起点开始看向下递归,不用看右子树了;在示例中,根节点的左子树是5,右子树是1,左右子树都匹配到了p,q,所以答案要直接返回根节点3。所以我们从根节点开始递归向下遍历左右两侧的子树,当某一层的左子树等于p或q,将这个。

2024-05-01 14:19:47 322 1

原创 【LeetCode学习记录】437、路径总和III

所以,我们还要在外面实现一层递归,先让二叉树的根节点执行rootSum()方法,求得从根节点开始能找到多少条路径,然后让左右子节点执行rootSum()方法,把根节点开始的路径数左右子节点开始获得的路径数相加,向下递归直到所有的节点都执行完成rootSum()方法。假设根节点的值比目标整数小(如果根节点值比目标整数的值大,那么子节点就需要是负数),我们遍历该节点的子节点(同时遍历左和右),并告诉子节点距离目标整数还差多少,和等于 8 的路径有 3 条,如图所示。

2024-05-01 00:42:23 430

原创 【LeetCode学习记录105】——从前序与中序遍历序列构造二叉树

从前序遍历中取出根节点,并在中序遍历中获取到它的位置(第一次调用的时候leftp传入0,代表此时二叉树根节点是preorder[0]),由此可以获得在中序遍历数组中确定根节点的位置。将该节点的值(3)作为二叉树根节点的值,然后通过“inorder_root - lefti”获取到这棵二叉树左子树的区间(9)和右子树的区间(15,20,7)。1.先从前序遍历中获取二叉树的根节点3,然后在中序遍历中找到根节点的位置(第二个),此时能确定9是左子树中的节点,而15、20、7是右子树中的节点。

2024-04-26 00:29:17 857

原创 【LeetCode学习记录114】——二叉树展开为链表

输入二叉树的左子树和右子树,先让左右子树都转化为链表格式,再让右子树作为左子树最下层节点的右子树,最后将转化后的左子树+右子树作为输入二叉树根节点的右子树。3、把右子树(5,6)作为左子树(2,3,4)最下层节点(4)的右子树,再把变化后的左子树+右子树(2,3,4,5,6)作为根节点(1)的右子树。在上一层递归中,让某一层节点的左子树的右子树等于该节点的右子树,然后将新的左子树作为该节点的右子树,再把该节点的左子树移除。必须是返回递归转换后的左子树最最下方的节点,才能让递归转换后的右子树接上。

2024-04-24 00:12:57 947

原创 【Leetcode题目记录199】——二叉树的右视图

最后取出子节点的子节点的子节点的......子节点的子节点,放入出子节点的子节点的子节点的......子节点的子节的子节点........每一次取出,都把取出的节点值放在一个列表中,记录为这颗二叉树这一层中的值,然后将最后一个值放入最后要作为答案返回的列表中。即创建一个队列Queue,将二叉树放入队列中,此时可以直接从队列中获取到根节点的值。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。在之后,继续从队列中把之前放入的子节点都取出,再放入子节点的子节点...

2024-04-21 23:52:13 215 4

原创 【LeetCode学习记录98】——验证二叉搜索树

要递归(深度优先)地验证二叉搜索树,就说明每一个节点,都会被遍历到,那么在遍历每一个节点时,都要确定该节点是否符合二叉搜索树的条件,所以对于每一个节点,都应该有一个上界和下界,如果任何一个节点的值超过了对应的上界或下界,那么这一棵树不会是二叉搜索树。这道题的题目乍一看,能想到要使用递归,就是拿到某个节点后,与左子节点和右子节点进行大小比较,然后继续用子节点和它更子的节点继续进行比较,也就是递归。对于右边的7,它(7)的上界是父节点(8),它(7)的下界与父节点(8)的下界是一样的,都是根节点(6)

2024-04-21 23:35:19 430

原创 【LeetCode学习记录230】——二叉树中第K小的元素

所以在红色节点获取到父节点后,会继续获取紫色的节点的黄色节点——紫色节点——蓝色节点,蓝色节点获取完之后,这可树的整个左子树都已经获取完了,如果K的值还没有减少到0,就会继续遍历整棵树的根节点——然后再从整棵树的右子树开始...中序遍历的顺序是左-根-右,由于搜索二叉树的排序是左节点

2024-04-21 21:45:34 357

原创 【LeetCode学习记录102】——二叉树的层序遍历

而为了取到节点的val,我们就需要有一个队列queue,用来放当前遍历层中所有的节点,用的时候从这个队列取出当前这一层的节点,然后将从下一层开始的节点放回去,用于下一次遍历。既然题目要求的是层序遍历,那么更适合的方法是广度优先,即先遍历二叉树的第一层根节点,然后遍历整个二叉树的第二层,第二层全部遍历完成后遍历整个二叉树的第三层,以此类推...。根据示例的返回答案,我们返回的是一个二维列表,该列表中的第n个元素,代表了该二叉树第n层。题目:给你二叉树的根节点 root ,返回其节点值的 层序遍历。

2024-04-18 23:04:30 570

原创 【Leetcode题目记录894】——所有可能的真二叉树

再往下推以下,由于真二叉树下的子树也是真二叉树,因此每个节点都会保持0个子节点或者2个子节点,假设总共的节点数为n,根节点的左子树占用j个节点(j必然小于n),那么根节点右子树总共会占用n-1-j个节点。要找到节点数为n下所有可能的真二叉树,那么就要先遍历左子树节点数为1(dp[1])、3(dp[3])、...、n-2(dp[n-2])的情况,找到分别对应的右子树节点数为n-2(dp[n-2])、...、3(dp[3])、1(dp[1])的情况,再分别组合起来放入列表中。我根据答案的思路回顾一下。

2024-04-15 18:30:56 343

原创 通过java的延迟队列(DelayQueue)对数据提交进行性能优化

DelayQueue优化视频网站记录用户播放进度的思路:每次需要记录用户的播放进度时,现将当前进度的数据记录到redis而不是直接放入数据库,保证redis永远保存最新的播放进度数据,同时将当前的进度放入队列中,并设定等待时间为20毫秒。当到达等待时间后,将队列中的进度拿出并对比redis记录的最新播放进度,如果两个记录一致,有一段时间没有向redis提交新记录了,此时可向数据库提交更新,否则说明当前用户仍然在观看视频,无需去数据库更新记录。缓存中的对象,超过了空闲时间,需要从缓存中移出。

2024-04-15 18:25:20 177

原创 【Leetcode题目记录11】——盛水最多的容器

执行代码,成功运行,准备提交收工,此时发现并没有通过leetcode的所有测试用例,由于此方法会遍历两次数组,所以时间复杂度比较高,为O(n²),当数组的数量非常非常大时,无法在合理的时间内计算结果。在示例1中,当分别取值为8和7的两条线时,两条线的距离为7(在height数组中8的下标为1,7的下标为8,所以距离是7),高只能取较矮的线的高,因此面积为7X7=49。原因是左边指针的值更小,而更小的这个值决定了长方形的高,所以右边的指针不管怎么移动,面积都不会更大。返回容器可以储存的最大水量。

2024-04-15 18:24:46 332

原创 【LeetCode学习记录438】——找到字符串中所有的异位词

而现在我们需要的是字符串s中的bae在sCount中的表示,其中ba已经计算过了,e还没有计算过,只需要把e出现的这一次加上去,预期返回的sCount是[1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]。每次取到子串后,将子串转为数组排序,然后再将字符串p转为数组后排序,当完成步骤2后,sCount=[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],这是我们比较了字符串s中abc的结果,

2024-04-15 18:24:03 1319

原创 【LeerCode题目记录3】——无重复字符的最长子串

对于一般的字符串,这个方法是完全OK的,但是根据前面几次被捶打的经验,在Leetcode上使用双重For循环这种复杂度为O(n²)的方法是100%无法通过提交的,因为LeetCode的测试用例一定会给你一个巨变态的超长数组,对于超长数组使用两层For循环的时间复杂度太高了,一定会超时的。做这道题的时候,我第一次想到的双重for循环思路,也就是定义一个int i,再定义一个int j,分别作为数组s最左侧的指针和最右侧的指针组成滑窗,不断获取s的第i个元素到第j-1个元素组成的子串。

2024-04-15 18:22:44 304

原创 【LeetCode题目记录73】——矩阵置零

2. 遍历这个matrix的行和列,如果发现第i行j列是0,就将narray的i行内所有元素赋值为0,再将每一行的第j个元素赋值为0。输入:int[][] matrix = new int[][]{{0,1,2,0},{3,4,5,2},{1,3,1,5}};题目:给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。,在输出的二维数组中,第二行内的所有元素全是0,第一、三行内的第二个元素是0,其他元素保持原有的数字不变。然后对于该数组内的其他元素,每个元素内的。

2024-04-15 18:21:52 531

空空如也

空空如也

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

TA关注的人

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