- 博客(62)
- 收藏
- 关注
原创 回溯算法的思路总结
你只相信 dfs 会把“以当前 path 为前缀的所有解”都找出来,只要处理好当前的选择问题,剩下的就不要考虑了。这种回溯类型的题目老是莫名其妙的可以做出来,但是不清楚具体的逻辑。,你只关心“我做了一个选择后,剩下的交给。同时最好画一下决策树,这样能够更有利于判断。写“循环 + 选择 + 递归 + 撤销”下次做回溯类型的题目可以画出这个决策树。写“终止条件” —— 什么时候停下来?一层层进去,看它怎么执行……面对回溯题,我应该如何思考。想清楚每一步要做什么选择,
2025-09-27 20:46:12
171
原创 leecode73 矩阵置零
这个题目不难,就是一句话,遍历这个矩阵的时候,当遇到0的时候就把该行该列改为0,同时为了不影响后续的遍历,我们可以将这个遍历和修改分为两个数组。使用mn的辅助空间如果使用m+n的辅助空间,我们可以使用set来使用,set可以去重其它思路没有找到灵神的题解,可能灵神觉得这个题目不值得研究吧。不过找到了一个只用了O(1)复杂度的大佬,看一下他的解法他的做法主要分为三步,利用第一行和第一列进行标记生成一个适合你的列表项目项目项目项目1项目2项目3 计划任务 完成任务
2025-09-15 16:01:01
793
原创 238 除自身以外数组的的乘积
问了下AI,这种题目我可以从什么方向入手,他提示我可以使用前缀积和后缀积的方法来做这道题。那么其前缀积是1,1,2,6,这个是第一轮中每个元素不包含自己左边所有元素的乘积。区别在于他使用了两个数组来分别存放前缀积和后缀积,我是直接一个数组就结束了。题目的主要难点是,如何通过这个线性运算得出所有的乘积和,同时不适用除法。灵神的思路和AI提示的思路是一样的,都是利用前缀积和后缀积进行计算的。之后我们在进行后缀积遍历24,12,8,6。好奇怪啊,这个题目,没什么思路。就比如说1,2,3,4。
2025-09-13 16:30:20
205
原创 leecode189 轮转数组
利用辅助数组存放两段区间,唯一需要注意的是这个k有可能会出现大于len的情况,此时我们需要对这个k进行取余。对于要求1,除了使用额外空间,我们还可以使用暴力解法,直接一个一个的进行移动即可。灵神的思路就很强,他并没有引入额外空间,并且时间复杂度还很低,他是利用了三次颠倒。这个题目本质上是移动数组,这种题目不难,本质上就是移动数组而已。2.在对前面的2个进行颠倒(5,6,4,3,2,1)。3.对剩下的进行颠倒(5,6,1,2,3,4)。
2025-09-13 15:59:01
428
原创 神经网络介绍
对于一个30 * 30的图像,输入给神经网络的有900个神经元,加入下一层有1000个神经元构成全连接层,那么就会有900000个参数,太大了,并且当图片产生了移动,变暗,这些参数又会全部变化,没有局部性,因此诞生了卷积。然后得到这个系数之后让其与v系数相乘,在相加得到A1矩阵看,这样A1中就包含,第一个词视角下 ,按照和它相似度大小(a1i),按权重(v矩阵)把每个词的词向量加到了一块,这就把全部上下文的信息都包含在第一个词当中了。有的时候只计算一次,灵活性太低,所以我们可以通过计算得到多组q,k,v。
2025-09-13 10:58:33
1232
原创 Mamba模型介绍
我们通过Transformer模型的学习可以知道,在最开始处理这个序列数据的时候是通过RNN和CNN来进行处理的,但是RNN由于自己不能够进行并行计算,同时会产生遗忘,所以引入了注意力机制,Transformer的创新就是引入了多头自注意力机制。而本文所要研究的Mamba模型和Transformer模型一样同样是处理序列数据的。可以利用这个模型处理一串有顺序信息的数据Mamba基于SSM或S4发展为S6这些概念不需要知道特别清楚,只需要知道。
2025-09-13 10:56:35
905
原创 leecode56 合并区间
最开始的时候,我是利用这个List获取新的数组,最后将这个list转化为二维数组,但是这种方法涉及到多次的装箱和拆箱工作,且占用额外的空间。他利用的是ans.get(m-1)[1]来获取的这个上一个区间的右端点,我是直接遍历的。后续我发现可以不用新建集合,直接在原有数组上进行操作即可。灵神的思路和我大体一致,有几点不同。
2025-09-13 10:55:11
310
原创 深度学习入门,基于python的理论与实现
感知机接收多个输入信号,输出一个信号。每个输入信号都有要给权重,权重越大,信号的重要性就越高具体的实例可以参考这个与非门输入0,0输出0,输入0,1输出0,输入1,0输出0,输入1,1输出1这个感知机就实现了类似于与非门的功能,将多个信号联系上权重,进行输出具体公式如下:利用Numpy来实现感知机b = -0.7if tmp>0:return 1else:return 0AND(1,1),AND(0,1),AND(1,0))
2025-08-30 13:41:25
971
原创 leecode153 寻找排序元素中的最小值
如果遍历循环还是没找到,说明这个数组是一个有序数组,并没有移动,或者移动之后又恢复了原样,我们直接返回nums[0]即可。利用上述性质我们将其与第一开始的元素进行比较,判断当前nums[middle]元素进行比较。我们注意到这个数组是两个有序的数组的拼接,所以我们要将这个窗口往拼接的位置上进行去靠进。我们还可以注意到,这个数组中的两个有序数组,有一个数组的最小值大于另一个数组的最大值。如果这个数即不大于右边的,又不小于左边的,说明我们需要改变窗口的位置。如果这个数大于它右边的数,那么这个右边的数是结果。
2025-08-22 12:57:36
256
原创 leecode162 寻找峰值
那么nums[middle+1]就不是峰值了,则这个nums[middle+2]肯定要大于nums[middle+1],不然的话这个nums[middle+1]就是峰值了,因为nums[middle]<nums[middle+1]>nums[middle+2]将middle处的元素与middle+1的位置元素进行相比,如果nums[middle]<nums[middle+1],那么肯定在下标 [middle+1,n−1] 中一定存在峰值。假设下标 [middle+1,n−1] 中没有峰值。
2025-08-22 12:25:34
252
原创 Transformer模型实战篇
命名实体识别(Named Entity Recognition,简称NER)是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。通常包括两部分:(1)实体边界识别(从哪里到哪里是一个实体);(2)确定实体类别(人名、地名、机构名或其他)eg 小明在北京上班实体类别实体地点北京人物小明。
2025-08-21 18:03:56
670
原创 leecode445 两数相加II
这个题目感觉非常不优雅,代码写的太多了,不过题目难度倒是不难,本质上就是先将两个链表翻转,然后逐个进行相加运算即可,重点在于需要定义一个尾指针,方便一个讲长的那个拼接到短的上。灵神是用递归来做的,不断调用这个addTwo方法。感觉 没有我的好明白。不过灵神的代码写的真优雅啊,我的代码就是一坨了,丑陋不堪。同时还需要注意如果两个链表等长,但是有进位,需要用尾指针进行新建节点,而不能用遍历的时候节点。
2025-08-20 12:09:19
187
原创 leecode25 K个一组翻转链表
这里相比92题也做了一部分的修改,我多加入了一个变量,用于记录这k个元素的最开始的元素,当翻转结束之后,这个元素成为这k个元素的最后一个元素,同时也是下一组的前一个pre元素。灵神的话,首先统计了这个节点的个数,然后利用这个节点的个数进行遍历循环。和我的主要区别在于,他并没有找这个last节点。本质上我和灵神的思路差不多,毕竟就是跟着他学的。这个题目是((20250817112352-w8vn3te ‘0092 反转链表II’)) 的延申题目,虽然难度上是困难,但实际上并不是很难。我的思路主要分为三步。
2025-08-20 10:59:58
187
原创 Transformer模型实战基础入门
将数据预处理,模型调用,结果后处理三部分组装成的流水线是我们能够直接输入文本便获得最终答案预处理就是将文本转化为ID,模型调用就是获取评分,结果后处理,就是得出结果主要工作就是数据预处理Step1分词:使用分词器对文本数据进行分词(字、字词);Step2构建词典:根据数据集分词的结果,构建词典映射(xx对应xx)(这一步并不绝对,如果采用预训练词向量(已经有人做好了词向量了),词典映射要根据词向量文件进行处理);
2025-08-17 15:39:06
806
原创 leecode92 反转链表II
需要注意的是这个ans不能够一开始指向pre.next,最后返回ans,只能够一开始指向pre,最后返回ans.next,因为如果一开始指向这个pre.next的话,那么这个ans和head指向的对象是一个。当后续对head进行修改的时候,这个ans也会发生变化。灵神思路和我的类似,区别在于灵神并没有找这个last节点,而是发现遍历之后temp指向的就是last节点的位置。这个比较简单,我们先找到这个需要反转的位置的前一个,以及找到反转位置的后一个。把这两个中间的进行反转。
2025-08-17 12:07:37
236
原创 leecode239 滑动窗口的最大值
灵神利用了滑动窗口和双端队列,利用双端队列记录本轮中最大值的位置,但是他不仅仅记录了这个最大值的位置,还记录了可能作为下一轮窗口最大值的位置(只要这个元素大于左边的元素,就有可能作为后续的最大值,如果这个元素小于左边的元素,那么就不会作为后续的最大值)先判断窗口中是否为空的,如果不为空,判断这个元素与队列中的最近添加的元素的大小关系,如果这个元素比较大 ,那么说明,它可能是后续窗口的最大值,队列中的最后一个元素就不可能是最大值了。更新答案,以数组为:4,1,6,7,4。滑动窗口三步走,进,出,记录答案。
2025-08-16 11:52:07
400
原创 leecode560 和为K的子数组
这个题我觉得难度挺高的,我刚开始以为这个题目时简单的滑动窗口的题型,想着用滑动窗口的思路去做这个题目,但是我做不出来,因为我不清楚这个滑动窗口窗口的移动条件是什么,原因如下正是上面的几个原因导致这个滑动窗口法无法解决问题,大概只能够解决34/93个案例。
2025-08-15 14:00:36
325
原创 leecode303 区域和检索 - 数组不可变
总结这个题目有点懵逼,第一次见这种题目这种题目的意思就是,我们通过这个函数名来调用函数,调用NumArrray就创建对象,调用sumRange就是返回这个区域的检索和。相比于自己调用函数,leecode的这个调用函数是传递函数名,和这个参数值来调用的,利用了Java的反射。先获取函数对象,然后传递参数调用。
2025-08-15 11:45:18
185
原创 leecode2439 最小化数组中的最大值
这个题没有做出来,我太菜了。我找不到这个查找的终止条件,即对这个数组进行操作,达到什么程度不能够获得比某个数更小的值了。
2025-08-12 17:04:08
322
原创 leecode875 爱吃香蕉的珂珂
题目的类型就是查找一个最小速度,即找出来一个速度k,使得当速度>=k的时候,这个珂珂就能够顺利吃掉所有的香蕉,而我们知道二分查找算法可以找到满足条件最小一个数,即>=k。确定这个二分查找算法的边界(使用左开右开,这样方便,不用对这个right和left的最后结果做判断了)此时我们需要遍历这个堆,然后计算此时的次数,这个地方涉及了一个整数向上取整。这个条件就是当我们使用这个k速度吃香蕉的时候,能否吃完。在二分查找的时候我们要判断当前的数是否满足条件。这个条件就是当速度为k的时候可以吃完这些香蕉。
2025-08-11 17:16:05
301
原创 leecode1658 将x减小到0的最小操作数
总结我觉得这个题目会的人会觉得很简单,不会的人会觉得很难,关键在于有没有想到反向思维,当正面思考考虑的情况有很多的时候我们需要进行反向思考我最开始就是正向思考的,没有做出来这个题。正向思考定义左右指针进行遍历的时候,当此时的x不满足情况后如何修改这个指针后来本来想看题解了,觉得自己做不出来了,我突然发现leecode竟然还有提示提示是,反向思考以下,与其用前缀和后缀,可以考虑去找这个最大子数组然后就想明白了反向思维思路代码如下。
2025-08-05 12:49:36
374
原创 leecode2962 统计最大元素出现至少K次的子数组
这个题型属于滑动窗口的题型,由于需要统计元素出现的次数,所以我们需要额外的数据结构map我的思路我首先找出了数组最大值之后我对这个数组进行遍历,直到找到此时我们对这个次数进行判断。我最开始的判断是直接写一个循环,从0开始,直到遍历出来的max元素大于已经添加到map集合的max元素个数减去k的时候停止,但这种方式有个问题就是时间复杂夫很高,只通过了622/634个,后续这个优化想了好久也没想到怎么优化的,就先放弃了。直接看题解了优化思路,把这个循环计数,转化为计数一次。
2025-08-03 12:56:54
204
原创 leecode2958 最多K个重复元素的最长子数组
这个题目比较简单,很明显的滑动窗口求子数组数量的问题对于滑动窗口的方法,我的理解是根据题目条件判断,确定用什么数据结构之后定义左右两个指针,右指针是用来遍历的指针,左指针是当右指针发现不满足条件之后,对窗口大小进行修改的指针。代码如下所示。
2025-08-03 12:56:02
203
原创 leecode3 无重复元素的最长子串
这个题目本身不难,我在想我怎么简化代码,我最初始的代码之所以这么复杂是因为我没有想到判断元素是否存在和移除元素是可以放在一起的。只要list中还存在这个元素,那么就已知移除。灵神的思路我大致看了一下,大体流程和我的相似,区别在于,我是利用list集合进行判断的,灵神使用一个长度为128的数组 进行判断,因为字母ASCII码可以当作这个数组的下标。关键是:定义一个集合,来判断这个窗口中的元素是否存在重复,如果存在重复的话,我发现我虽然解决问题了,但是我的思路不简洁,不明白。这个题本质上还是滑动窗口的问题。
2025-08-02 15:39:50
320
原创 leecode42 接雨水
总结这个题感觉好难,我想不到什么好的方法,刚开始想的和后续做的只能是暴力解法,虽然做出来了,但是时间复杂度很高,最后膜拜了这个灵神的做法,灵神还是太超模了,感觉和我这个菜鸟不在一个水平不过我虽然做的没有灵神巧妙,我的做法也是有一定的可取之处的,我的思路中最关键的一步就是对已经统计过的柱子进行抬高,防止下一轮重复。灵神的思路主要是通过单独设置一个左挡板和右挡板对每一个柱子进行计算,最后取和。
2025-08-01 12:26:03
269
原创 leecode611 有效三角形的个数
这个题感觉和前面不太一样了,双指针的变化规律我没有找出来,当判断出三角形之后我发现无论移动左指针,还是移动右指针,三角形都是成立的。一时半会没想到怎么解决,我就直接暴力破解了,直接遍历所有情况,就可以解决问题了。灵神就是强,当我还再纠结这个无法判断双指针移动方向的时候,灵神已经是另一个境界了,他并不是类似于传统的枚举最短的那一个,而是换了一种思路,枚举最长的。当左边两个短边的和小于等于最外层的时候,三角形不成立,我们要扩大短边的话,直接。的时候,三角形成立,此时从i到j,都是满足条件的三角形(我们不用对。
2025-07-31 12:41:40
163
原创 leecode18 四数之和
感觉四数之和和三数之和没什么区别,就将其转化为三数,再转换为两数,就是再三数之和外面再套一层循环而已。灵神的思路和我一样,只不过他比我多优化了,我只在h的循环中进行了优化,灵神再i的循环中也进行了优化。
2025-07-31 12:04:53
258
原创 leecode16 最接近的三数之和
((20250730120638-7fmtj3w ‘0015 三数和’)),((20250728094651-r58pb04 ‘0001 两数之和’)) ,((20250730131645-jdjxatg ‘0167 两数之和II-输入有序数组’))对于这个算法,我们已经能够遍历出所有的情况,但是有些是没有必要的,可以直接排除,这个就是剪枝。灵神和我主体思路是相同的,区别在于他想到了很多的优化方案。这个题相比之前的区别在于这个是和与target最接近。这个题难度不大,参考这个。
2025-07-31 11:10:00
303
原创 leecode-167 两数之和II-输入有序数组
这个题比较简单,题目中已知,这个数组是递增的,所以我们只需要用一个双指针,一个在前,一个在后,然后根据几种情况,不断的去调整这个前和后的位置即可。
2025-07-30 18:21:08
204
原创 leecode-15 三数之和
我的思路是定义一个left和一个right,然后在向集合里去查询,看看有没有除了nums[left],和nums[right]的第三个元素,把这个问题转换为一个遍历查找问题。当我们确定了第一个数,发现它和这个排序后的数组中最大的两个数相加都小于0的话,那么这个都不用看了,不可能会有等于0的情况,我们此时。之后我们对这个数组进行遍历,先确定一个数,之后再剩余的数组中,找到两个数的和为0-这个数,此时就和0167题相似了。我们可以通过先对这个数组进行排序,这样就和0167题具有了相同的初始条件,即数组有序。
2025-07-30 18:20:13
346
原创 leecodde-0128 最长连续序列
文章摘要:本文探讨了力扣最长连续序列问题的两种解法。作者首先分析了题目关键点:数组可能含重复元素或为空。灵神的解法通过哈希集合优化,仅检查序列起点,避免重复遍历,时间复杂度O(n)。作者的个人解法同样使用哈希集合,但采用双向遍历并删除已访问元素来避免重复计算。两种方法都实现了O(n)时间复杂度,灵神的解法更为简洁高效。该问题展示了如何利用哈希表优化查找类算法的时间复杂度。(148字)
2025-07-29 11:36:22
411
原创 leecode-0011 盛最多水的容器
本文分析了盛最多水问题的双指针解法。关键思路是:初始让左右指针分别位于数组两端以获得最大宽度,然后通过比较两指针高度,每次移动较矮的指针来寻找可能更高的水位。这样在宽度逐渐减小的同时,有机会获得更大的面积。时间复杂度为O(n),空间复杂度O(1)。文末给出了Java实现代码,通过维护最大面积变量,在指针移动过程中动态更新最优解。
2025-07-29 11:34:45
182
原创 leecode-0001 两数之和
map集合一个我们很容易忽视的点就是当我们判断是否成立的时候,我们并不一定两个元素都需要找,只需要找另一个元素减去这个元素即可。因此对应的最简单的方法就是直接暴力递归,从头开始找出所有的和,判断是否和目的值相同。暴力解法的优化 一般是如何减少遍历情况,即如何剪枝,排除点不需要遍历的情况。我们可以引入map集合,map集合查找元素很快是O(1)的时间复杂度。暴力解法事件效率太低我们因此就会考虑如何优化这个暴力循环。这个题目要求是找到整数数组中和为目标值的两个整数下标。亦或者是牺牲空间换时间。
2025-07-29 11:30:16
214
原创 leecode59 螺旋矩阵
之后是四个循环,分别对应上右下左四个循环,每个循环都是左闭右开,每一轮循环,都要改变这个边界的值。我的思路整体没什么问题,这个螺旋矩阵的关键就是这个边界的处理。首先我们要知道遍历多少圈。
2025-07-21 13:41:41
436
原创 vscode的文件和文件夹的警告标志如何消去
由于平时用vscode写一些java的小demo, 但是这个vscode的警告和错误管理很奇怪, 这个警告信息会显示在这个侧边的文件和文件夹中, 我上网上找能不能把这个给去掉的办法, 找了半天没找到。于是我就自己去查了一下这个vscode的设置, 真让我找到了这方面的开关, 把下面的这个关闭就可以把这个文件夹和文件显示错误信息给关闭了。
2023-12-15 16:04:07
3384
原创 typora中的快捷键shift enter 和 enter的交换
我最近在用 typora 进行写作,但是在合格 typora 的 markdown 编辑器很奇怪,它的一个回车符是两次换行,而用 shfit ent。找了半天都不知道怎么解决的这个问题,然后我就去了这个 typora 在 github 开源的问题仓库去找答案了,里面刚好有关于这个的问题。令我震惊的是这个问题都已经是 16 年的问题了,现在还没有得到解决,,这个问题 typora 官方看来应该是不准备进行解决了。的用户提出了一个折中的解决办法,就是利用 autohotkey 软件设置一个脚本。
2023-11-24 22:35:06
1094
2
原创 Vscode 如何创建java项目,并添加包
先打开这个资源管理器中的javaProject,然后打开这个javaProject,点击里面的Reference Libraries,然后点击加号。选择要添加的包然后进行确认即可。
2023-10-03 10:44:10
2363
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅