- 博客(57)
- 收藏
- 关注
原创 实现 Trie (前缀树)
关键字:26位长的children数组,每个字符与'a'相减,然后放在对应索引上作为children,查找的时候是插入的逆过程,每个字符与'a'相减,得出索引,看索引是否有值。是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。(发音类似 "try")或者说。
2025-12-27 23:20:53
80
原创 详解有向图
打个生活的比方:先穿内裤再穿裤子,先穿打底再穿外套,先穿衣服再戴帽子,是约定俗成的。内裤外穿、光着身子戴帽子等,都会有点奇怪。我们遵循穿衣的一条条先后规则,用一串 顺序行为,把衣服一件件穿上。这种存在先后关系的依赖,我们叫有向图,下面用个图说明一下。
2025-12-27 22:18:05
105
原创 leetcode课程表
解此题的关键把此题转化有向图,那些不依赖其他课程的入度就为0,从入度为0的入手,依次减少依赖此入度为0课程的入度,如果此依赖课程的入度也为0了,就看后面的依赖,直到所有的课程入度都为0。在选修某些课程之前需要一些先修课程。请你判断是否可能完成所有课程的学习?,表示如果要学习课程。
2025-12-27 22:03:44
114
原创 leetcode热题岛屿数量
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。
2025-12-25 23:17:57
191
原创 二叉树中的最大路径和
关键点:设置全局变量记录最大值,递归调用,在递归里做两件事,递归计算左右子节点的最大贡献值,根据返回的最大贡献值返回当前节点和左/右节点(谁大取谁, 如果都小于0,则取0)的和记为当前节点的最大贡献值计算出一个最大路径和,根节点+左最大贡献值+右最大贡献值,和全局最大路径取大者。被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42。最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。
2025-12-22 22:23:37
255
原创 二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(2.如果左子树找到,右子树未找到(直接写成右子树为null,因为走到这里左子树不为null了)1.如果左子树未找到,返回了null,则返回右子树找的结果(不管是否为Null)3.走到这里,最后左右子树都找到了p,q,那么他们的root节点就是最近公共祖先。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。的最近公共祖先是节点。
2025-12-15 22:37:16
225
原创 leetcode热题路径总和 III
不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。和等于 8 的路径有 3 条,如图所示。,求该二叉树里节点值之和等于。给定一个二叉树的根节点。
2025-12-14 11:29:26
233
原创 从前序与中序遍历序列构造二叉树
解题关键:构造中序hashMap<值,下标>, 前序列表中根节点的值在中序hashMap中得到中序下标,下标得出左子树的个数,右子树的个数,就可以确定左子树和右子树不断迭代的左右边界了。,请构造二叉树并返回其根节点。
2025-12-13 13:25:35
129
原创 leetcode验证二叉搜索树
先把最左节点压入栈,然后从最左节点中序遍历并比较大小,中序遍历是有序的。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。
2025-11-25 08:08:09
179
原创 将有序数组转换为二叉搜索树
关键点:确定数组中间元素为父节点,类似于二分法,递归以父节点构造左子节点和右子节点。排列,请你将其转换为一棵 平衡 二叉搜索树。
2025-11-20 21:16:34
178
原创 leetcode二叉树的直径
3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。这条路径可能经过也可能不经过根节点。是指树中任意两个节点之间最长路径的。给你一棵二叉树的根节点,返回该树的。由它们之间边数表示。
2025-11-17 22:24:24
104
原创 leetcode翻转二叉树
关键逻辑:队列先进先出,从上到小,先把根节点放入队列,然后取出弹出根节点,交换左右节点,然后把左右节点放入队列,不断迭代,直到队列里没有节点。,翻转这棵二叉树,并返回其根节点。给你一棵二叉树的根节点。
2025-11-16 16:25:50
177
原创 leetcode二叉树的最大深度
逻辑:先把每一层所有节点放入容器中,记录深度1,一个一个的弹出,弹出的时候把下一层的节点依次放入容器中,上一层的全部弹出,然后只剩下下一层的,接着进行下一次的迭代。关系:maxDepth = Math.max(左子树的最大深度,右子树的最大深度)+1。
2025-11-16 11:52:07
231
原创 手写LRU 缓存
初始容量,每添加一个节点,就记录当前已添加的个数,如果添加之后已超过容量,则移除尾部的节点和hashMap里面的节点。要有一个双向链表,实现实现最近或刚添加的节点在头节点,要有一个hashMap存储节点,实现o(1)的查找。
2025-11-15 19:10:20
342
原创 随机链表的复制
指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。个节点组成的链表来表示输入/输出中的链表。方法一: hash表构建原链表和新链表中每个元素的映射。的链表,每个节点包含一个额外增加的随机指针。,该指针可以指向链表中的任何节点或空节点。那么在复制链表中对应的两个节点。例如,如果原链表中有。返回复制链表的头节点。
2025-11-08 16:48:00
147
原创 K 个一组翻转链表
首先遍历出有多少个节点,然后用节点数/k,就得到该作多少次翻转,每一次反转要记录反转后的头,尾节点,用头尾指针把反转后的头连起来,再重新更新头尾指针。是一个正整数,它的值小于或等于链表的长度。方法二:先不用计算有多少个节点,在循环从当前节点往后推k个节点。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。自己写的笨方法,但是却没有超时。
2025-11-02 19:03:37
198
原创 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
2025-10-19 17:24:00
193
原创 删除链表的倒数第 N 个结点
先反转链表,再找到第n-1个结点。令Node(n-1).next = Node(n-1).next.next。先让指针一移动n,然后两个指针一起移动,当指针一到尾部的时候,两个指针中间就相差n个节点。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。
2025-10-12 18:30:37
201
原创 链表两数相加
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。
2025-10-12 16:30:50
164
原创 合并两个有序链表
递归的原理就是我们从最后一个节点开始往回看,首先必定有一个节点的next先到达null,那么不为null的那个就是倒数第二大的.next,然后把倒数第二大的返回上一层,然后通过if..else找到倒数第三的,然后倒数第三大.next = 倒数第二大的,以此向上递归。新链表是通过拼接给定的两个链表的所有节点组成的。用一个额外的指针来重新调节它们的next。将两个升序链表合并为一个新的。
2025-09-27 13:20:15
105
原创 环形链表 II返回开始入环的节点
指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。如果链表中有某个节点,可以通过连续跟踪。链表中有一个环,其尾部连接到第二个节点。,返回链表开始入环的第一个节点。来表示链表尾连接到链表中的位置(,仅仅是为了标识链表的实际情况。返回索引为 1 的链表节点。给定一个链表的头节点。如果链表无环,则返回。,则在该链表中没有环。
2025-09-23 22:59:12
151
原创 leetcode热题环形链表
方法一:hash表,每循环一次就把节点放入hash表,如果下一个节点已经存在hash表中,则有环。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。来表示链表尾连接到链表中的位置(索引从 0 开始)。// 快慢指针, 如果有环的话,快的一定会和慢的相遇。如果链表中有某个节点,可以通过连续跟踪。链表中有一个环,其尾部连接到第二个节点。仅仅是为了标识链表的实际情况。,判断链表中是否有环。给你一个链表的头节点。
2025-09-21 12:12:24
165
原创 leetcode热题相交链表
a+c+b=b+c+a, 则说明循环链表A、B,从头指针开始,然后分别循环对方的链表,则同时到达相交节点。,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回。假设链表A和链表B相交的部分为c, 不相交的部分长度分别为a,b。整个链式结构中不存在环。给你两个单链表的头节点。
2025-09-14 12:56:05
292
原创 搜索二维矩阵
因为此二维数组,从左到右和从上到下都是递增的,我们从右上角开始看,它左边的数比它小,右边(下边)的树比它在。编写一个高效的算法来搜索。
2025-09-07 12:44:57
137
原创 leetcode热题旋转图像
旋转图像,这意味着你需要直接修改输入的二维矩阵。请你将图像顺时针旋转 90 度。2 临时二维数组,先存各个下标转移后的数。使用另一个矩阵来旋转图像。
2025-09-06 22:06:20
194
原创 leetcode热题螺旋矩阵
思路:可以分成四部分,上,右,下,左,不断的上,下,右,左加入list中,直到达到跳出循环的条件,用四个变量记录各个面的开始索引,每循环一次就更新一次四个变量的值,同时判读4个变量是否已经达到跳出循环的条件(所有数的add进了list),返回矩阵中的所有元素。
2025-08-24 22:26:50
112
原创 leetcode热题矩阵置零
说明:首先我们想到的就是用2个变量记录行和列的下标,但用单个变量显然是不好记录的,所以我们可以用两个数组标记行和列为0的索引, 为什么要用两个数组呢,因为它们是相互独立的,比如说第一行标记为有0的了,但是是第几列呢,比如说是第三列,所以同时记录下第一行和第三列,循环到第二行了,行不满足,但第行的第个数,满足。,则将其所在行和列的所有元素都设为。的矩阵,如果一个元素为。
2025-08-23 17:19:49
342
原创 缺失的第一个正数
把数组的元素放入hash表中,然后循环1,2,3...n,如果不在hash表中,就是我们要找的值,如果循环完了还没有返回,那返回的就是n+1, n是数组的长度。,请你找出其中没有出现的最小的正整数。并且只使用常数级别额外空间的解决方案。范围 [1,2] 中的数字都在数组中。给你一个未排序的整数数组。方法二:将数组视为哈希表。请你实现时间复杂度为。
2025-08-14 22:06:17
112
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅