自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构绪论--数据结构相关知识点

数据结构是一门研究非数值计算的程序设计问题的操作对象以及它们之间的关系和操作的学科。程序设计=数据结构+算法什么是数据数据:描述客观事物的**符号**,是计算机可以操作的对象,是能被计算机识别,并输入给计算机处理的符号的集合。什么是数据元素数据元素:是数据的基本单位,在计算机程序通常作为一个整体考虑和处理一个数据元素可以又若干个数据项组成(注意:数据项是数据的不可分割的最小单位)什么是数据对象是性质相同的**数据元素**的集合,是数据的一个子集四类基本结构(1)集合 (2)线

2020-09-14 22:44:49 545 2

原创 前端基础知识--实现图片到网页的跳转

如何点击图片跳转到另外一个网页如何实现图片到网页跳转// An highlighted block<a href="选择跳转的页面的地址"><img src="图片的地址"></a>题目思考来源–菜鸟教程(“https://www.runoob.com/”)...

2020-06-14 22:07:29 939

原创 面试150 二叉树的锯齿层次遍历

通过层序遍历,队列去实现。只需要加多一个变量去控制是否要逆转即可。

2025-07-16 09:13:29 43

原创 面试150 二叉树的层序遍历

【代码】面试150 二叉树的层序遍历。

2025-07-16 09:02:29 22

原创 面试150 二叉树的层平均值

使用层序遍历,每一层进行求和,当遍历到最后一个节点的时候计算平均值,并将该结果存到res中,最后进行返回res即可。

2025-07-16 08:54:29 49

原创 面试150 二叉树的右视图

层序遍历出发,每一层遍历到最后一个节点的时候,将该节点的值存储到res中,最后返回即可。

2025-07-16 08:49:55 35

原创 面试150 二叉树的最近公共祖先

采用后序遍历的方式,分别递归遍历左右子树,从下往上去传递。

2025-07-15 09:50:35 78

原创 面试150 完全二叉树的节点数

使用中序遍历,递归计算左子树和右子树节点的值,最后相加返回即可。

2025-07-15 09:40:08 56

原创 面试150 二叉搜索树迭代器

使用栈模拟中序遍历(左-根-右),从而实现按从小到大的顺序逐步访问节点。初始化时,构造函数将从根节点一路向左,将所有左子节点压入栈中,确保栈顶始终是当前最小的节点。每次调用 next(),就弹出栈顶节点,并在该节点存在右子树的情况下,将右子树的左边路径压入栈中;hasNext() 则判断栈是否为空,从而确定是否还有未遍历的节点。这种做法能够在保持中序遍历顺序的同时,实现较高的空间和时间效率。

2025-07-15 09:25:16 92

原创 面试150 二叉树中的最大路径和

采用自底向上的递归方式(后序遍历)计算二叉树中的最大路径和。对于每个节点,递归地求出其左右子树可以提供的最大贡献值(若为负则置为0),然后以该节点为“路径的最高点”计算一次完整路径的和,并尝试更新全局最大路径和。每次递归返回当前节点向上可延续的最大单边路径,用于父节点的计算。通过这种方式,能全面考虑所有路径组合,最终得到整棵树中任意路径的最大和。

2025-07-14 20:29:13 103

原创 面试150 根节点到叶子节点数字之和

联想回溯法,分别设置全局变量result和path,用于收集结果和路径。先序遍历出发,遍历到根节点将根节点的值加入当前路径,如果遍历到叶子节点,此时收集结果。如果不是则分别递归左右子树,递归结束后需要进行栈的弹出,实现回溯。

2025-07-14 20:04:47 111

原创 面试150 路径总和

在进行先序遍历时,首先判断递归终止的条件:若当前节点为空,则返回 False;若当前节点为叶子节点,且其值等于目标和,则返回 True。递归的核心逻辑是:分别对左右子树进行递归遍历,并在过程中更新目标和。

2025-07-14 19:53:45 107

原创 面试150 二叉树展开为链表

思路:使用列表存储先序遍历的相关节点。然后遍历列表,分别获取前驱节点和当前节点,将前驱节点的左指针指向空,前驱节点的右指针指向当前节点。

2025-07-13 15:11:13 208

原创 面试150 填充每个节点的下一个右侧节点指针Ⅱ

采用层序遍历的方式来连接二叉树中同一层的节点。首先将根节点加入队列,然后按层处理节点:每一层依次从队列中取出节点,并将其 next 指针指向该层中的下一个节点(即队列中的下一个节点);若是该层最后一个节点,则不进行连接。遍历过程中,如果当前节点存在左右子节点,则将其加入队列以供下一层处理。最终返回连接完毕的根节点。

2025-07-13 15:00:57 125

原创 面试150 从中序与后序遍历构造二叉树

本题的突破口在于后序遍历。由于后序遍历的最后一个元素对应的是整棵树的根节点,因此我们可以首先根据该值创建根节点。接着,在中序遍历中定位该根节点的下标,并以此将中序遍历划分为左子树和右子树的部分。根据中序遍历中左右子树的长度,我们进一步划分后序遍历中对应的左右子树部分。最后,递归构建左右子树,并返回根节点即可完成整棵二叉树的构建。

2025-07-13 14:42:38 133

原创 面试150 从前序与中序遍历构造二叉树

本题要求根据前序遍历和中序遍历的结果构建一棵二叉树。首先,根据前序遍历的特性,其第一个元素一定是整棵树的根节点。我们可以通过该根节点的值,在中序遍历数组中找到对应的位置。这个位置将中序遍历数组分为左右两部分:左侧为左子树的中序遍历,右侧为右子树的中序遍历。接下来,根据左子树中序遍历的长度,可以确定前序遍历中左子树和右子树对应的部分。然后对左右子树分别递归执行同样的构建过程,最终即可还原整棵二叉树。

2025-07-13 14:31:10 114

原创 面试150 对称二叉树

联想递归三部曲:传入参数、遍历方式、返回什么。本题联想到先序遍历的方式,需要遍历整颗二叉树,最后返回的是一个布尔值。然后我们需要传入的是左子树和左子树的节点,然后分别进行比较。

2025-07-12 19:44:14 165

原创 面试150 翻转二叉树

采用先序遍历,可以通过新建根节点node,将原来root的右子树连到去node的左子树中,root的左子树连到去node的右子树中。

2025-07-12 19:32:58 134

原创 面试150 相同的树

通过递归法,联想先序遍历,根节点开始遍历,如果根节点的值都不相同,直接返回False,然后分别递归遍历左子树和右子树,进行比较即可。

2025-07-12 10:25:52 173

原创 基于Gradio以及Langchain搭建的简单知识库问答

运行该代码后,控制台会出现默认链接:http://127.0.0.1:7860,访问即可询问问题,以下是相关成功运行后的界面所示。2.huggingface下载m3e-base嵌入模型,支持中文,适用于文本相似度、检索聚类等任务。1.准备好相关知识库(txt文件)

2025-07-10 16:41:27 507

原创 面试150 二叉树的最大高度

考虑从递归出发,联想递归三部曲:返回什么、传入的参数是什么、遍历的方式是什么。此题现在需要我们整个树,并且需要从根节点出发,因此我们选择先序遍历即可。另一张办法,则是选择通过队列实现层次遍历,统计队列长度也就是树的最大深度。

2025-07-10 10:37:47 210

原创 面试150 LRU缓存

这里我们使用collections中的OrderedDict去维护。因为它提供了一种有序的字典数据结构,它对比普通字典,OrderedDict会严格按照键值对的顺序插入顺序存储的书,即使在插入后修改已有的键,顺序也不会改变。并且它提供的over_to_end方法,可将指定键移动到字典的末尾(last=True)或开头(last=False),支持popitem(last=True)方法,按顺序弹出最后一个(last=True)或第一个(last=False)键值对。

2025-07-10 10:08:28 264

原创 面试150分隔链表

通过数组法,一个数组存储小于x的节点的元素,一个数组存储大于等于x的节点的对应的元素,然后我们将两个数组合并在一起。使用虚拟节点的方式创建新链表,最后返回头节点即可。

2025-07-10 09:51:20 167

原创 面试150 旋转链表

数组法:我们使用数组去存储旋转后的位置,然后通过虚拟节点新建链表即可。

2025-07-10 09:41:40 250

原创 面试150 删除排序链表中的重复元素Ⅱ

先将链表元素依次存入数组中,然后使用计数器统计每个元素的出现次数。仅保留在数组中出现次数为 1 的元素用于重新构建链表,最后返回新链表的头节点即可。

2025-07-09 09:33:36 196

原创 面试150 删除链表的倒数第n个节点

思路2:采用快慢指针法:首先让快指针先前进 n 步,然后创建一个空节点指向头节点,并将慢指针指向该空节点。接着,同时移动快慢指针,直到快指针到达链表末尾。此时,慢指针正好位于需要删除节点的前一位置。修改慢指针的 next 指向以跳过目标节点,最后返回头节点的下一节点即可。思路1:使用数组存储,然后把对应index所在的元素给弹出,然后进行新建链表操作即可。

2025-07-09 09:25:25 214

原创 面试150 K个一组反转链表

暴力法使用数组法,通过构建数组,然后数组内部每一组进行反转,反转之后重新构建新链表。

2025-07-09 09:05:31 529

原创 面试150 反转链表Ⅱ

同样将链表转为列表,然后通过列表的操作,先对指定位置的元素进行反转。然后对反转后的列表进行新建链表。

2025-07-08 10:27:41 222

原创 面试150 链表的复制

此外,新的想法就是我们采用字典去存储原节点—>复制后新的节点的映射关系。python可以使用调库法,使用深度拷贝。

2025-07-08 10:01:56 124

原创 面试150 合并两个有序链表

使用数组法,分别用系统存储两个链表的值,然后数组先合并,然后排序。然后对排序后的数组进行虚拟节点新建链表即可。

2025-07-08 09:55:52 173

原创 面试150 两数相加

另一种办法是通过遍历两个链表,模拟逐位加法的操作,使用一个虚拟头节点来构建结果链表,并维护一个进位变量 carry。在遍历过程中,逐位取出两个链表当前节点的值与进位相加,生成新节点加入结果链表,同时更新进位。即使两个链表长度不同或最终还有进位,也能正确处理,最终返回结果链表的头节点。整个过程高效且结构清晰,适用于任意长度的链表相加场景。两种方法,一种是最”暴力“的方法,将两个链表转为数组,转变为整数相加,然后通过虚拟节点新建链表即可。

2025-07-08 09:42:00 104

原创 面试150 环形链表

采用双指针法,slow指针每次走一步,fast指针每次走两步,如果相遇的情况下,slow指针回到开始的位置,此时快慢指针各走一步,当相遇的时候也就是说明链表中有环。

2025-07-08 09:08:25 131

原创 面试150 基本计算器

利用栈(stack)来保存进入括号前的计算状态(包括当前计算结果和符号),以便在括号结束后正确恢复计算上下文。代码通过遍历字符串,识别数字、加号、减号和括号。遇到数字时构造完整数值;遇到加减号时将上一个数与符号累加到当前结果中,并更新符号;遇到左括号时将当前结果和符号压栈,重置为括号内的新表达式;遇到右括号时将括号内结果乘以括号前符号并加到括号前的结果上。最终再将最后一个数加上,得到总结果。整个过程遵循从左到右、遇括号递归的求值逻辑。

2025-07-07 14:30:56 215

原创 面试150 逆波兰表达式求值

栈去模拟,按照数字进栈,遇到运算符号弹出栈内元素进行计算,最后返回栈内的元素即可。

2025-07-07 10:10:49 174

原创 面试150 最小栈

通过list的一系列操作进行实现。

2025-07-07 09:48:53 387

原创 面试150 简化路径

通过栈的思路去实现,首先对字符串用split函数以”/“进行划分,如果遍历到的字符串是空或者是.直接跳过,如果遇到…,说明需要回到上一层,如果栈里为空,弹出栈内元素,如果栈为空我们需要把相应的字符串加到栈里。最后将字符换进行拼接即可。

2025-07-07 09:39:03 120

原创 面试150 有效的括号

通过栈去模拟,如果是遇到左括号,右括号进栈,如果当前栈一直为空或者当前元素与栈顶元素不相同,则说明不是有效的括号,直接返回False,然后如果当前元素和栈顶元素匹配,则将栈内的元素弹出。最后如果栈为空,说明是有效的括号,反则不是。

2025-07-06 10:47:07 197

原创 面试150 用最少数量的箭引爆气球

对区间进行从小到大排序,如果当前区间的左端点大于前一个的右端点,count自增,如果区间重叠的时候,将当前端点的右区间的值更新为重叠区间的右边界最小值。

2025-07-06 10:38:51 105

原创 面试150 插入区间

将newInterval添加到intervals后对区间按起点升序排序后,初始化结果数组 res。遍历过程中,若当前区间起点大于 res 末尾区间的终点,直接追加;否则合并区间,更新终点为两者的较大值。

2025-07-06 10:23:40 109

原创 面试150 合并区间

对区间按起点升序排序后,初始化结果数组 res。遍历过程中,若当前区间起点大于 res 末尾区间的终点,直接追加;否则合并区间,更新终点为两者的较大值。

2025-07-06 10:15:52 161

空空如也

空空如也

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

TA关注的人

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