- 博客(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 二叉搜索树迭代器
使用栈模拟中序遍历(左-根-右),从而实现按从小到大的顺序逐步访问节点。初始化时,构造函数将从根节点一路向左,将所有左子节点压入栈中,确保栈顶始终是当前最小的节点。每次调用 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 删除排序链表中的重复元素Ⅱ
先将链表元素依次存入数组中,然后使用计数器统计每个元素的出现次数。仅保留在数组中出现次数为 1 的元素用于重新构建链表,最后返回新链表的头节点即可。
2025-07-09 09:33:36
196
原创 面试150 删除链表的倒数第n个节点
思路2:采用快慢指针法:首先让快指针先前进 n 步,然后创建一个空节点指向头节点,并将慢指针指向该空节点。接着,同时移动快慢指针,直到快指针到达链表末尾。此时,慢指针正好位于需要删除节点的前一位置。修改慢指针的 next 指向以跳过目标节点,最后返回头节点的下一节点即可。思路1:使用数组存储,然后把对应index所在的元素给弹出,然后进行新建链表操作即可。
2025-07-09 09:25:25
214
原创 面试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 简化路径
通过栈的思路去实现,首先对字符串用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关注的人