自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣面试150题--最大子数组和

比较简单,我们从左向右遍历一次,记录当前元素的前一个元素之前的最大子序列和leftbe和目前已遍历元素的最大子序列和leftmax,首先获取新的leftbe,即取max(leftbe+当前元素,当前元素)判断更新后的leftbe是否大于leftmax,大于就更新。最后返回leftmax。

2025-07-18 10:05:30 66

原创 力扣面试150题--合并K个升序链表

这题显然是一个分治合并的算法,我们将数组中的链表两两配对,合并。:每次取出所有链表中的最小值,插入结果链表中,返回头节点即可。首先分治的做法,不断进行二分,直到每个段只有1个或0个链表。:时间复杂较高并且还需要额外开辟一个链表存放结果。递归合并右半部分lists[mid+1…递归合并左半部分lists[l…最后合并两个有序链表。

2025-07-17 09:51:08 224

原创 力扣面试150题--建立四叉树

*如果数组中所有元素都是1或者0,说明这就是个叶子节点,**它的值为1或者0(看数组中的值,记得转化为boolean)我们需要的参数有二维数组(grid),左上第一个元素的坐标(x,y),这个快数组的长宽(size)那么如果不是叶子节点,那么就得分为四块,这不就是递归关系,因此有以下代码。这题的意思是:一个n*n的二维数组,n取的都是2的次方(方便分块)接下来,我们来考虑,这肯定是一个递归的关系,那么首先思考。,那就继续分块,最终分为所有元素相同的数组或者就一块。对我而言,简单的事情是,我们。

2025-07-16 10:02:41 220

原创 力扣面试150题--排序链表

分析一下,还是选择排序太慢了 O(n方),所以还是得从那几个O(nlogn)的算法入手。:我们可以采取归并排序的方式来解决这个问题。

2025-07-15 15:56:31 214

原创 力扣面试150题--将有序数组转化为二叉搜索树

由于给出的是一个有序的递减数组,因此组成选取任意一个节点作为根节点都是一个二叉搜索树,那么如何保证搜索树两边平衡呢?选取中间的节点作为根节点即可,于是采取递归不断选取中间节点作为父节点即可。

2025-07-14 09:11:33 218

原创 力扣面试150题--单词搜索

*优化思路:**修改上方寻找相邻元素的做法,传入坐标后,只判断相邻是否有目标字母。

2025-07-13 10:05:04 289

原创 力扣面试150题--括号生成

第二部分式常见题 这里不赘述了,以下说明如何获取不重复的括号组合。:提交后发现时间复杂度很高 ,就去翻题解了。第一个部分,获取不重复的括号组合。第二个部分,判断这个组合是否合法。

2025-07-12 10:58:02 213

原创 力扣面试150题--组合总和

这里在上面代码的基础上进行修改,出现重复的原因在于,由于本题不限制元素使用次数,并且元素不重复,因此在我们首次进入递归循环一次时,就获取了第一个元素所有组合总和的情况了。首先是终止条件,当我们获取到的总和值大于等于target的时候就可以终止了(由于限制了元素值都是正整数),这里只有等于target才将其加入到结果集。同理我们聚焦到最高层递归的第二个循环,这里回溯还回到第一个元素,那就会出现重复的情况。其次进入循环,这里回溯前后,有两步要做,第一步添加元素到临时集,第二步总和值增加。进入主要的函数代码,

2025-07-11 09:27:26 176

原创 力扣面试150题--全排列

我们聚焦到数组的序号first,我们需要不重复的往这个first填数(并且不重复,考虑从左往右依次填入值),抽象到图里的意思是该空格的元素,依次和空格后的元素交换次序(还有一个不交换的情况)。首先我们需要确定back函数的参数,res和te肯定需要,我们需要得到空格的位置吧 x,我们需要知道数组的长度吧 n。对于te我们需要提前往里面填入nums的值,因为我们需要不停交换嘛。最后看,循环条件,我们需要从空格位置和其后每个元素交换位置,操作就很明显了就是交换,撤销就是换回来就行,back()移动空格处理。

2025-07-10 20:40:46 255

原创 力扣面试150题--组合

回溯的本质就是一个多叉树。

2025-06-27 11:57:40 194

原创 力扣面试150题--电话号码的字母组合

采取了回溯的做法,做法如下。

2025-06-26 11:11:53 176

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

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

2025-06-14 12:58:28 267

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

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

2025-06-13 11:37:12 239

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

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

2025-06-12 17:25:09 353

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

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

2025-06-10 11:07:58 343

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

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

2025-06-09 16:09:55 262

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

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

2025-06-08 16:02:55 444

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

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

2025-06-07 20:15:23 400

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

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

2025-06-06 16:40:53 337

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

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

2025-06-05 21:24:43 350

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

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

2025-06-04 13:17:38 219

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

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

2025-06-03 14:11:26 272

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

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

2025-06-02 10:19:14 202

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

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

2025-06-01 14:45:57 313

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

根据昨天代码进行修改。

2025-05-31 21:43:55 207

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

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

2025-05-30 15:23:56 463

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

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

2025-05-29 15:29:08 287

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

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

2025-05-28 23:33:47 439

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

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

2025-05-27 09:00:03 310

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

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

2025-05-26 14:50:14 345

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

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

2025-05-25 15:08:27 266

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

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

2025-05-24 14:41:59 369

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

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

2025-05-23 10:35:37 295

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

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

2025-05-22 12:30:49 336

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

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

2025-05-21 10:50:18 398

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

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

2025-05-20 10:07:35 315

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

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

2025-05-19 15:52:30 515

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

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

2025-05-06 15:17:14 434

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

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

2025-05-05 22:28:49 648

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

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

2025-05-04 22:05:40 562

空空如也

空空如也

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

TA关注的人

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