自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣面试150题--添加与搜索单词 - 数据结构设计

遍历当前节点的所有非空子节点,对每个子节点递归调用 find 函数,处理剩余字符(start + 1)。如果所有子节点都无法匹配,返回 false。只要找到一条有效路径,立即返回 true。

2025-06-14 12:58:28 24

原创 力扣面试150题--实现Trie(前缀树)

前缀树的作用在于快速检索字符串的前缀,插入一个字符串,即为从根一次插入孩子节点,将字符串最后一个字符对应的节点标记结束节点,再插入另外一个相同前缀但最后n个字符不一样的字符串,那么在相同前缀的部分,不需要插入新的节点,直到第一个不同的字符,添加一个新的子节点。这样做的好处,我们如果要获取两个字符串的前缀,只需要从根节点向下遍历,比较两个字符串,只要到某个节点出现了分支,则这个节点之前的节点就是两个字符的公共前缀。:此时还不了解什么是前缀树,尝试自己实现一下。

2025-06-13 11:37:12 125

原创 力扣面试150题--单词接龙

分析一下,我们进行两两比较字符串的目的是为了找到能一步到达的字符串,那么换种思路,对于一个单词而言,从头到尾修改任意一个字母,都算一步能到达的字符串,于是想到了通配符。双向bfs算法,在之前代码的基础上,不仅从起点往终点搜索,同时从终点向起始搜索,记录变化的距离,直到两者变化到同一种情况,将距离相加即可,结果出现问题了,发现超时了,经过分析后,发现在于构造graph时,每个单词进行两两比较,花费时间过多,因此针对这个点进行优化。t(替换第 2 个字符为!(替换第 3 个字符为!

2025-06-12 17:25:09 304

原创 力扣面试150题--最小基因变化

目的就是将startgene序列转变为endgene序列,每次只能变化一个字符并且变化出来的结果必须是bank里面的结果。

2025-06-10 11:07:58 321

原创 力扣面试150题--蛇梯棋

其他的感觉没啥好说的就是一个简单的宽搜,需要注意的点是,梯子和蛇会跨越传送,这里不一定只往大的值去传送,所以我们需要考虑会不会出现环的问题(这类问题就通过visited数组来记录即可,不要重复访问)。这题的难点在于我们需要将值转化为坐标(蛇形),专门写了一个函数Tohanglie来做这个事情。

2025-06-09 16:09:55 249

原创 力扣面试150题--课程表

初始时,所有入度为 0 的节点都被放入队列中,它们就是可以作为拓扑排序最前面的节点,并且它们之间的相对顺序是无关紧要的。:本质就是将所有前置课程和后置课程作为一个有向图(前者指向后者),判断这个图是否是一个有向无环图(即是否存在拓扑排序)(本质做法是dfs)我们移除 u 的所有出边,也就是将 u 的所有相邻节点的入度减少 1。如果某个相邻节点 v 的入度变为 0,那么我们就将 v 放入队列中。如果答案中包含了这 n 个节点,那么我们就找到了一种拓扑排序,否则说明图中存在环,也就不存在拓扑排序了。

2025-06-08 16:02:55 435

原创 力扣面试150题--除法求值

【代码】力扣面试150题--除法求值。

2025-06-07 20:15:23 394

原创 力扣面试150题--克隆图

【代码】力扣面试150题--克隆图。

2025-06-06 16:40:53 332

原创 力扣面试150题--被围绕的区域

根据以上中译中,我们可以逆向思维,从边缘的O开始找到与其相连的O,这种岛屿是不需要修改为X,我们将其修改为1,在最后再统一处理,将1改为O,将O改为X。此题的目的在于找到被X包围的O,没有被完全包围(指与边缘的O相连)不算,将完全包围的O变成X。具体找到i相连的岛屿,可以通过深度搜索实现。

2025-06-05 21:24:43 341

原创 力扣面试150题--岛屿数量

一个岛屿是只要1上下左右连接,典型的深搜,如果具体见代码,主要就是得到一个岛屿后,就将1改为2,这样可以节约时间,遍历这个1的上下左右,确定岛屿数量就是通过找1的数目,因为之前为一个岛屿的都改为2了。

2025-06-04 13:17:38 212

原创 力扣面试150题--二叉搜索树中第k小的元素

直接采取中序遍历,不过我们将k参与到中序遍历中,遍历到第k个元素就结束。

2025-06-03 14:11:26 267

原创 力扣面试150题--二叉搜索树的最小绝对差

根据以上简单复习,那么对于这道题而言就很简单了,只需要简单的中序遍历,每个数与前一个数相减(由于性质必为正数),记录下最小的差值即可。(初始差值设置为一个大数字,根节点前设置一个很小的数字,这样根节点前的数就不会影响结果)二叉搜索树是一种特殊的二叉树数据结构,其设计目的是高效地支持数据的搜索、插入和删除操作。它通过对节点值的有序性约束,使得树的结构具有可预测性,从而优化了查找效率。

2025-06-02 10:19:14 192

原创 力扣面试150题--二叉树的锯齿形层序遍历

锯齿形就是一层是从左向右,一层是从右向左,那么我们可以分析样例,对于第奇数层是从左向右,第偶数层是从右向左,于是可以采取一个计数器,采取链表方式,从左向右就是正常插入到链表后面,从右向左就是插入到链表前面。

2025-06-01 14:45:57 305

原创 力扣面试150题--二叉树的层序遍历

根据昨天代码进行修改。

2025-05-31 21:43:55 201

原创 力扣面试150题--二叉树的层平均值

使用两个队列,一个队列存放树的节点,一个队列存放对应节点的高度,使用x存放上一个节点,highb存放上一个节点的高度,sum存放当前层的节点值之和,num存放当前层的节点数。当出现x节点与队列顶部的节点高度不同时,说明遍历到该层的最后一个元素,计算平均值放入结果集res,清空sum和num。将x指向队列顶部元素,highb指向队列顶部元素的高度,弹出两个队列顶部元素,将x的左右子树放入队列,直到队列为空。当出现x节点与队列顶部的节点高度相同时。以上是判断时做的,以下是判断完做的。

2025-05-30 15:23:56 459

原创 力扣面试150题--二叉树的右视图

采取层序遍历,利用一个high的队列来保存每个节点的高度,highb和y记录上一个节点的高度和节点,在队列中,如果队列中顶部元素的高度大于上一个节点的高度,说明上一个节点就是上一层中最右边的元素,加入数组即可,同时最后需要处理最后一个元素,因为最后一个元素没有能比较的了,需要手动加入数组。

2025-05-29 15:29:08 277

原创 力扣面试150题--二叉树的最近公共祖先

我们可以用哈希表存储所有节点的父节点,然后我们就可以利用节点的父节点信息从 p 结点开始不断往上跳,并记录已经访问过的节点,再从 q 节点开始不断往上跳,如果碰到已经访问过的节点,那么这个节点就是我们要找的最近公共祖先。初次思路:转化为中序和后序来找祖先,具体见代码。

2025-05-28 23:33:47 431

原创 力扣面试150题--完全二叉树的节点个数

2. 如果不等说明右子树是深度小于左子树的满二叉树, 然后进一步判断左子树的节点数(最后一层最后出现的节点必然在左子树中。1. 如果相等说明左子树是满二叉树, 然后进一步判断右子树的节点数(最后一层最后出现的节点必然在右子树中)

2025-05-27 09:00:03 303

原创 力扣面试150题--二叉搜索树迭代器

迭代做法,我们知道取得中序遍历可以通过栈来实现,那么就把中序遍历采取非递归写法,每次获取下一个节点,就从栈中取出一个节点,并且处理它后面需要压入栈的节点处理了。这样就满足了进阶的空间复杂度。:想的比较简单,在构造这个类的时候,直接求出中序遍历,存放在一个数组中,维护一个序号,当然这个不满足进阶做法的空间复杂度,因为需要保存中序遍历的所有值。

2025-05-26 14:50:14 342

原创 力扣面试150题-- 二叉树中的最大路径和

感觉和我思路差不多,只是更加精炼一点。:采取两个递归函数的方式。

2025-05-25 15:08:27 264

原创 力扣面试150题--求根节点到叶节点数字之和

我们利用sum这个全局变量来保存总和值,递归函数sum来计算每个根到叶子节点路径所代表的数,由于我们需要遍历到每条根到叶子节点的路径,所有我采取了前序遍历,如果不是叶子节点,就计算到该节点代表的值,就是qian*10+当前节点的值,qian的意思就是根到这个节点路径上的值(代表的数),到根节点就先获取到这个值,然后加到sum即可。

2025-05-24 14:41:59 367

原创 力扣面试150题--路径总和

这题比较简单,我们只需要判断从该节点出发,向他的左孩子和右孩子遍历,如果节点为null,就返回false,每遍历一层,就将目标值减去当前节点的值,如果到叶子节点正好减为0,就返回true,其他情况需要判断递归左边和递归右边是否有返回true,能返回一个true就算成功。

2025-05-23 10:35:37 288

原创 力扣面试150题-- 二叉树展开为链表

对于当前节点,如果其左子节点不为空,则在其左子树中找到最右边的节点,作为前驱节点,将当前节点的右子节点赋给前驱节点的右子节点,然后将当前节点的左子节点赋给当前节点的右子节点,并将当前节点的左子节点设为空。对当前节点处理结束后,继续处理链表中的下一个节点,直到所有节点都处理结束。

2025-05-22 12:30:49 334

原创 力扣面试150题--填充每个节点的下一个右侧节点指针 II

如果我们采取前序遍历,在遍历到第四层的0这个点时,需要指向右边第一个节点,也就是8,但是此时它的父亲节点指向9,但是9并没有指向1,原因在于,我们并没有遍历到右子树的9号节点,因此此时0的next会指向null。所以我们考虑遍历顺序变为根右左,先处理右子树,这样处理的好处是,由于每个节点都是不断指向右边的节点,先处理右子树,就会先处理好右子树的next,不会出现以上情况。:直接采取层序遍历(居然没想到)

2025-05-21 10:50:18 392

原创 力扣面试150题-- 从中序与后序遍历序列构造二叉树

(左子树)(右子树)(根),那么我们直接修改昨天的代码即可。前序是从前向后找根,后序我们就从后向前找根。

2025-05-20 10:07:35 312

原创 力扣面试150题--从前序与中序遍历序列构造二叉树

由于我们取得根节点的值很容易,但是在中序遍历中找到这个根节点的序号很困难,于是事先用一个map(indexmap)存放每个节点对应的序号(这里主要是无重复元素)。首先复习一下前序遍历和中序遍历,好的这道题理解到这点就够,

2025-05-19 15:52:30 511

原创 力扣面试150题--对称二叉树

原理:拆分为根节点的左右两棵子树,比较左子树的右和右子树的左,左子树的左和右子树的右。

2025-05-06 15:17:14 429

原创 力扣面试150题-- 翻转二叉树

【代码】力扣面试150题-- 翻转二叉树。

2025-05-05 22:28:49 640

原创 力扣面试150题--相同的树

【代码】力扣面试150题--相同的树。

2025-05-04 22:05:40 558

原创 力扣面试150题--二叉树的最大深度

【代码】力扣面试150题--二叉树的最大深度。

2025-05-03 21:45:37 437

原创 力扣面试150题--分隔链表

遍历链表,每一个点与值比较,比值小就继续,比值大就放到链表尾部即可。

2025-05-02 21:33:35 831

原创 力扣面试150题--旋转链表

【代码】力扣面试150题--旋转链表。

2025-05-01 21:11:14 291

原创 力扣面试150题--删除排序链表中的重复元素 II

【代码】力扣面试150题--删除排序链表中的重复元素 II。

2025-04-30 21:16:49 272

原创 力扣面试150题--删除链表的倒数第 N 个结点

【代码】力扣面试150题--删除链表的倒数第 N 个结点。

2025-04-29 19:22:28 196

原创 力扣面试150题--K 个一组翻转链表

【代码】力扣面试150题--K 个一组翻转链表。

2025-04-28 16:19:16 218

原创 力扣面试150题--反转链表 II

首先解释一下如何原地反转链表,就题目所示。1-》4-》3-》2-》5,就完成了反转。然后将1指向4 2指向5。将2,3,4进行反转。

2025-04-27 11:20:43 194

原创 力扣面试150题--合并两个有序链表和随机链表的复制

常规题目,比较list1和list2节点的值,取出较小值扩展链表,最后其中一个遍历完直接拼接另外一个即可(归并排序)

2025-04-26 12:59:32 240

原创 力扣面试150题--环形链表和两数相加

采取快慢指针。

2025-04-25 11:12:34 181

原创 力扣面试150题--基本计算器

具体思路就是展开所有的括号,由于只有±两个运算符号,它们拆开括号的效果如下,比如1+(1+2)=1+1+2;1-(1+2)=1-1-2,所以可以使用1和-1来表示加和减,具体做法如下。我的做法如下:根据前面逆波兰表达式求值,可以考虑将这个正常的表达式先转化为逆波兰表达式,再用逆波兰表达式进行求值。:代码阅读性差,并且时间复杂度比较高。:此题我遇到了几个难点。

2025-04-24 11:55:28 839

原创 力扣面试150题--最小栈和逆波兰表达式求值

经典题目,当出现数字时,压入栈,出现运算符号,弹出栈顶两个元素,计算后再压入栈,直到遍历完字符串数组,栈顶元素就是计算结果。由于是字符串数组,直接使用Integer.parseInt()转化为整型即可。

2025-04-23 11:43:11 232

空空如也

空空如也

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

TA关注的人

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