自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2025-05-28 23:33:47 85

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

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

2025-05-27 09:00:03 165

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

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

2025-05-26 14:50:14 267

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

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

2025-05-25 15:08:27 249

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

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

2025-05-24 14:41:59 312

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

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

2025-05-23 10:35:37 275

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

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

2025-05-22 12:30:49 326

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

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

2025-05-21 10:50:18 383

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

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

2025-05-20 10:07:35 302

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

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

2025-05-19 15:52:30 503

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

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

2025-05-06 15:17:14 424

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

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

2025-05-05 22:28:49 625

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

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

2025-05-04 22:05:40 554

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

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

2025-05-03 21:45:37 428

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

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

2025-05-02 21:33:35 818

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

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

2025-05-01 21:11:14 290

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

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

2025-04-30 21:16:49 270

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

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

2025-04-29 19:22:28 191

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

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

2025-04-28 16:19:16 215

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

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

2025-04-27 11:20:43 191

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

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

2025-04-26 12:59:32 234

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

采取快慢指针。

2025-04-25 11:12:34 174

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

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

2025-04-24 11:55:28 831

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

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

2025-04-23 11:43:11 228

原创 力扣面试150题--有效的括号和简化路径

首先对于这个给出的字符串,有用的信息即为文件名(包括。),我的想法是创建一个栈,依次取出文件名加入到栈中,依次弹出栈后单独处理/即可。:此题难点在于如何处理返回上一级文件夹,而且可能出现/d/c/./b/。/a这种情况,需要连续返回两个文件夹.(结果应该返回/d/a)

2025-04-22 11:14:54 321

原创 力扣面试150题--插入区间和用最少数量的箭引爆气球

初次思路:借鉴一下昨天题解的思路,将插入的区间与区间数组作比较,插入到升序的数组中,其他的和(合并区间)做法一样。注意需要特殊处理一下情况,插入区间比数组中最后一个区间的起始点大,这种情况,在循环中不会计算到插入区间,单独处理一下。问题:时间复杂度比较高,虽然通过了做法:注意题目条件,给定的区间数组中的区间是不重叠的,那么我们需要插入一个新的区间,只需要找到这个与这个插入区间有重叠的区间,合并成一个大区间即可。题目描述首先我们来中翻中一下:这题所谓的最少数量的箭,可以理解为多个区间中的重叠的区间,

2025-04-21 14:27:05 345

原创 力扣150题-- 汇总区间和合并区间

按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的。如果当前区间的左端点在数组 merged 中最后一个区间的右端点之后,那么它们不会重合,我们可以直接将这个区间加入数组 merged 的末尾;否则,它们重合,我们需要用当前区间的右端点更新数组 merged 中最后一个区间的右端点,将其置为二者的较大值。:对于两个范围是否能够合并,有以下几种情况用范围(a,b)和(a1,b1)表示。

2025-04-20 13:54:12 290

原创 力扣面试150题-- 存在重复元素 II和最长连续序列

以上做法,虽然通过,但是我的时间复杂度很高,我感觉原因在于TreeSet的插入和遍历效率太低了,看过。

2025-04-19 15:10:15 515

原创 力扣面试150题--两数之和 和 快乐数

这题我并没有很好的解法,直接Set记录每次的平方和,如果出现重复且不为1,那么就不能得到结果为1。

2025-04-18 11:20:45 311

原创 力扣面试150题--有效的字母异位词和字母异位词分组

比较的是两个字符串,那么直接将每个字符串按照字符顺序排序,使用equals比较即可。

2025-04-17 14:58:52 190

原创 力扣面试150题-同构字符串和单词规律

见代码。

2025-04-16 10:20:51 223

原创 力扣面试150题--生命游戏和赎金信

题目要求原地完成更新,那么就存在问题,假如一个元素更新时,它周围的八个元素中存在从活到死或者从死到活的更新,就很导致该元素的更新错误,于是根据分析题目的四种更新策略,可以这么定于:活->死 用3来表示活->活 用1表示死->活 用4来表示死->死 用0来表示在判断某元素更新时,如果周围元素为1或者为3都说明这个元素是活的,如果周围元素不存在或者为0,4说明这个元素是死的。最后整体更新,将数组中的3变为1,4变为0即可。

2025-04-15 11:13:49 406

原创 力扣面试150题—旋转图像和矩阵置零

矩阵转置 在将列反转1 2 34 5 67 8 9转置1 4 72 5 83 6 9反转7 4 18 5 29 6 3。

2025-04-14 22:10:16 593

原创 力扣面试150题--螺旋矩阵

根据题目描述,我们需要顺时针输出矩阵元素,顺时针说明有四种输出状态,横向从左到右和从右到左,纵向从上到下和从下到上,唯一的难点在于,输出完成一层后,如何进入内层,我是这么做的: (这里的叙述比较繁琐,看代码清晰一点。

2025-04-13 13:45:56 319

原创 力扣面试150题--有效的数独

其实还挺简单的,主要的难点在于如何判断每个小数独是否满足要求。

2025-04-12 10:02:00 249

原创 力扣面试150题--最小覆盖子串

假如第一轮取出的起始点为B,那么ADOBEC就会变成BEC,对于新的字符串而言,是不是我们向后再找到一个A就可以了。:每一轮取得的起始点,都是上一次已经遍历过的值,如果接着向后进行遍历,是一个重复的过程。下一轮遍历的起始点是:B 得到的字符串为BECODEBA。下一轮遍历的起始点是:C 得到的子串为:CODEBA。下一轮遍历的起始点是:A 得到的子串为ANC 结束。下一轮遍历的起始点是: B 得到的子串为:BANC。那存在什么问题导致了时间运行过长呢?第一次得到的子串是:ADOBEC。

2025-04-11 16:06:11 460

原创 力扣面试150题--无重复字符的最长字串和串联所有单词的字串

利用。

2025-04-10 15:07:54 312

原创 力扣面试150题--三数之和 和 长度最小的子数组

这里就不介绍暴力做法了(因为我试了一上午都超时了)此题的难点有两个:1 时间复杂度 2 如何去重。

2025-04-09 13:31:07 320

原创 力扣面试150题--两数之和 II - 输入有序数组和盛最多水的容器

,那么直接遍历下一个元素。

2025-04-08 11:18:54 329

原创 力扣面试150题-验证回文串和判断子序列

首先理清楚题目,非数字和字母不参与比较。

2025-04-07 13:17:14 295

空空如也

空空如也

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

TA关注的人

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