- 博客(33)
- 收藏
- 关注
原创 代码随想录总结:(2025.9.16)二分查找
if (nums[middle] > target) right 更新为 middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]while (left < right),这里使用 < ,因为left == right在区间[left, right)是没有意义的。2.target取值在[left,right)个元素有序的(升序)整型数组。存在返回下标,否则返回。
2025-09-16 20:58:53
390
原创 记录算法笔记(2025.5.29)最小栈
思路:可以搞两个栈,一个正常,一个从大到小排序的栈,栈顶为最小值,用空间换时间。--> 返回 -3.minStack.getMin();--> 返回 -2.minStack.top();操作,并能在常数时间内检索到最小元素的栈。
2025-05-29 01:03:44
692
原创 记录算法笔记(2025.5.29)有效的括号
2.左括号和右括号一样多但不匹配,或左括号和右括号一样多但不匹配,但是没在一起,被茬开了。遍历结束后,检查栈是否为空。如果栈为空,说明所有左括号都找到了匹配的右括号,返回。如果栈不为空,弹出栈顶元素,并检查是否与当前右括号匹配。检查字符串长度是否为偶数。如果长度为奇数,直接返回。如果栈为空,说明没有匹配的左括号,返回。),则将对应的右括号压入栈中。,判断字符串是否有效。,因为括号不可能匹配。如果当前字符是左括号(如果当前字符是右括号(
2025-05-29 00:43:38
737
原创 记录算法笔记(2025.5.28)只出现一次的数字
除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。如果数字不在字典中,将其添加到字典中,并设置值为1。如果数字已经在字典中,将其对应的值加1。如果某个键的值为1,将该键赋值给。,用于记录每个数字的出现次数。,用于存储只出现一次的数字。,即为只出现一次的数字。
2025-05-28 00:32:30
605
原创 记录算法笔记(2025.5.24)腐烂的橘子
左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个方向上。每分钟,从队列中取出所有腐烂的橘子,检查它们周围的 4 个方向上是否有新鲜橘子。遍历整个网格,找到所有腐烂的橘子,并将它们的坐标加入队列。如果在 BFS 结束后,新鲜橘子的数量为 0,返回分钟数。如果有新鲜橘子,将其标记为腐烂,并将其坐标加入队列。如果队列为空且新鲜橘子的数量为 0,直接返回 0。// 如果还有新鲜橘子,返回 -1。// 如果没有新鲜橘子,返回分钟数。如果还有新鲜橘子,返回 -1。的新鲜橘子都会腐烂。
2025-05-24 16:51:24
745
原创 记录算法笔记(2025.5.22)岛屿数量
从这个起始点开始,使用 DFS 算法将所有相邻的 '1' 标记为 '0',表示这些陆地已经被访问过,属于同一个岛屿。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。继续遍历网格,重复步骤 1 和 2,直到所有 '1' 都被标记为 '0'。遍历过程中,每找到一个起始点并完成 DFS 标记,岛屿数量加 1。遍历整个网格,当遇到 '1' 时,表示找到了一个岛屿的起始点。(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。
2025-05-22 21:43:01
489
原创 记录算法笔记(2025.5.20)二叉树展开为链表
/将当前节点的右子树等于栈顶。每次从栈中弹出一个节点,将其右指针指向栈顶元素,并将左指针设置为。先将右子树压入栈,再将左子树压入栈,这样可以保证先序遍历的顺序。使用栈来存储节点,模拟递归的调用过程。额外空间)展开这棵树吗。你可以使用原地算法(
2025-05-20 22:33:53
630
原创 记录算法笔记(2025.5.19)二叉树的右视图
思路: 前面写过二叉树的层级遍历这道题,是每一层从左往右遍历写的,这次可以改为从右往左遍历,只要该层有节点就把第一个添加到这个列表中。//取出队列中的一个节点。if(i==0)//将每一层第一个的节点存到列表中。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。//循环结束条件为队列为空。
2025-05-19 15:40:40
565
原创 记录算法笔记(2025.5.19)二叉搜索树中第k小的元素
/因为二叉搜索树本身是中序遍历后就是一个递增序列,所以这句按大小排序没必要。思路:中序遍历这个二叉搜索树,将每个节点的值存入列表中,然后返回列表中第k小的元素。//遍历二叉搜索树都存入数组中,然后再取出第k小的元素。,请你设计一个算法查找其中第。小的元素(从 1 开始计数)。给定一个二叉搜索树的根节点。
2025-05-19 14:55:32
773
原创 记录算法笔记(2025.5.17)验证二叉搜索树
给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。truefalse根节点的值是 5 ,但是右子节点的值是 4。[1, 104]
2025-05-17 19:38:07
854
原创 记录算法笔记(2025.5.15)将有序数组转换为二叉搜索树
由于数组是升序排列的,选择数组的中间元素作为根节点,可以保证左右子树的节点数量大致相等,从而保证树的平衡。:将数组分为两部分,左半部分用于构建左子树,右半部分用于构建右子树。递归地对左右子数组重复上述过程。[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。排列,请你将其转换为一棵 平衡 二叉搜索树。// 选择中间元素作为根节点。// 递归构建左子树和右子树。:当数组的左边界大于右边界时,返回。,表示当前子树为空。
2025-05-16 16:31:41
540
原创 记录算法笔记(2025.5.15)二叉树的层序遍历
继续循环,处理下一层的节点,直到队列为空,表示所有层的节点都已处理完毕。:完成当前层的处理后,将存储当前层节点值的列表加入最终的结果列表。// 如果左子节点不为空,加入队列。// 如果右子节点不为空,加入队列。如果根节点为空,直接返回一个空的二维列表,因为没有节点可以遍历。// 将节点值加入当前层的列表。// 将当前层的节点值列表加入结果列表。// 创建一个列表存储当前层的节点值。创建一个队列,将根节点加入队列,用于逐层处理节点。// 遍历当前层的所有节点。// 如果根节点为空,返回空列表。
2025-05-15 13:03:39
687
原创 记录算法笔记(2025.5.14)二叉树的直径
3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。思路:递归计算左右子树的深度,左子树深度加右子树深度+1就是直径。//递归结束条件为node为空。这条路径可能经过也可能不经过根节点。//递归计算左右子树的高度。是指树中任意两个节点之间最长路径的。给你一棵二叉树的根节点,返回该树的。由它们之间边数表示。
2025-05-14 21:44:09
192
原创 记录算法笔记(20025.5.14)对称二叉树
该函数接受两个参数,分别代表二叉树的左子树和右子树的根节点。函数,比较左子树的左子节点和右子树的右子节点。函数,比较左子树的右子节点和右子树的左子节点。你可以运用递归和迭代两种方法解决这个问题吗?,则当前节点的左右子树是对称的,返回。如果一个为空而另一个不为空,返回。如果两个节点的值不相等,返回。:如果上述两个递归调用都返回。如果两个节点都为空,返回。给你一个二叉树的根节点。, 检查它是否轴对称。
2025-05-14 20:53:29
355
原创 记录算法笔记(2025.5.14)翻转二叉树
思路:跟那个求二叉树最大深度可以一样,每层去遍历,一层一层去对应相应逻辑,可以去看看前一篇的思路,差不多。//把不为空的左子树或右子树存到队列中,来遍历这一层。//将左子树和右子树翻转。,翻转这棵二叉树,并返回其根节点。给你一棵二叉树的根节点。
2025-05-14 00:22:47
662
原创 记录算法笔记(2025.5.13)二叉树的最大深度
思路: //一层一层去遍历,将根节点先存入队列,深度+1,然后判断如果有左子树或者右子树不为空则将其存入队列,深度+1,根节点再出队列,第二次还是遍历这个队列就是将根节点的左子树判断这个的左子树和右子树以及根节点的右子树判断这个的左子树和右子树(队列中有就执行),就是每层节点找下面层所有节点,并将该层节点退队列,下面层所有节点存入队列,直到队列中没节点了,就结束。i++)//不能不int len,直接写queue.Count,因为i增加循环中队列大小在减小,容易出现有队列没遍历完全的情况。
2025-05-13 23:48:39
756
原创 记录算法笔记(2025.5.12)随机链表的复制
思路一:创建一个Key为原链表Head节点,Value为复制的对应节点的字典,进行递归,递归条件为head为空,创建一个复制节点分别复制head节点地址和值,再将复制节点的random的指针复制head节点的random指针。指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。个节点组成的链表来表示输入/输出中的链表。的链表,每个节点包含一个额外增加的随机指针。,该指针可以指向链表中的任何节点或空节点。
2025-05-12 20:16:54
968
原创 记录算法笔记(2025.5.11) 二叉树的中序遍历
/用于存储遍历结果。二叉树的中序遍历的方法为:依次遍历左子树、根结点和右子树,对于左子树和右子树使用同样的方法遍历。//在递归遍历右子树。//先递归遍历左子树。//将根节点和结果列表传入。//将当前节点的值保存。//递归的结束条件为节点为空。递归的终止条件是当前结点为空。将当前结点的结点值加入中序遍历序列。对当前结点的左子树调用递归。对当前结点的右子树调用递归。
2025-05-11 23:48:39
382
原创 记录算法笔记(2025.5.10) 两两交换链表中的节点
/然后让改节点的next为空,是为了防止成环,假设这个是1,存到队列中,取出来它的next还指向2,所以要做这一步断开1指向2。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。//创建一个新节点等于这个队列中的节点。while(queue1.Count>0||queue2.Count>0)//只要有一个队列还有节点。=null)//遍历这个链表,将单数和偶数节点分别存到相应队列中。
2025-05-10 21:20:13
1075
原创 记录算法笔记(2025.5.9)删除链表的倒数第 N 个结点
ans.next=queue.Deueue()://让ans节点的next指向要出队列的这个节点。//将这个要返回的答案链表指向这个虚拟节点。//如果到了这个要删除的节点这里,就让它直接出队列。//将每个节点存到这个队列中。//返回开始存储的虚拟节点的next节点,即为传入链表的头节点。1.遍历链表将所有节点加入队列,并计算节点个数。//3.删除最后一个节点的next指针。//1.遍历这个链表。
2025-05-09 22:50:02
444
原创 记录算法笔记(2025.5.9)两数相加—链表
思路:从头加到尾,有位就进位,然后再加两个链表的下一位同时把前面进的位加上,循环,最后再把如果还有进位的最后判断。//创建要存储实际答案的节点。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。
2025-05-09 19:03:06
1110
原创 记录算法笔记(2025.5.8)合并两个有序链表
if(list1.val>=list2.val)//list1的值大于list2,则ans的下一个节点就是list2,list2也移动到下一个节点。=null)//只要其中链表都还有节点,就可以继续比较大小。//返回那个虚拟链表节点的下一个,即存入合并链表的第一个。=null)//如果list1还有剩余的节点,则直接全部接过来,//最后都要移动ans到下一个节点,去存下一个。思路:创建一个新链表,从头依次比较两个链表的大小,小的先进入链表,后面再依次比较接在后面。//创建真正要合并的链表。
2025-05-08 21:29:20
437
原创 记录算法笔记(2025.5.8)环形链表
思路二:使用快慢指针,slow和fast,指针slow指针每次往后移动一步,fast指针每次往后移动两步,如果该链表存在环那么slow和fast一定会有相同的情况。思路一:创建一个哈希集合,遍历这个链表把全部节点都存到这个哈希集合中,然后再遍历对于当前节点判断是否在这个哈希集合中,没有就没有环,反之,则有。=null)//如果slow或者fast有空的情况,则没有环。指针再次到达,则链表中存在环。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。,判断链表中是否有环。
2025-05-08 16:39:26
495
原创 记录算法笔记(2025.5.8)回文链表
/创建一个数组,记录原链表按顺序的每个节点的值。//for循环遍历数组,因为prev是反转链表,array数组是顺序存储的原链表的值,所以二者长度相同。//创建一个空的单链表等下让它等于反转链表。思路:用昨天做的反转链表做,即要判断是否是回文链表就是要判断该链表和反转后的链表是否一致。//判断完这个节点,到下一个节点。//遍历原链表,得到反转链表prev和原链表每个节点的值存到数组中。,请你判断该链表是否为回文链表。空间复杂度解决此题?
2025-05-08 11:44:46
464
原创 记录算法笔记(2025.5.7)反转链表
/记录1后面的节点2,因为等下1要指向result这个链表了,会丢失后面的节点,所以先记录后面的;思路:创建一个新的空链表,将要反转的链表的节点依次指向这个新链表,后面的指向前面的就行,实现反转。把1指向2的那条线断了,去指向result这个空链表。将result节点指向1,1指向那个null。最后将head节点等于开始就保存的2,//把这个链表想象成1,2,3,4,null。,请你反转链表,并返回反转后的链表。,用于存储当前节点的前一个节点。
2025-05-07 19:10:01
344
原创 记录算法笔记(2025.5.7)相交链表
请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。//将temp链表等于链表B。
2025-05-07 14:48:03
1050
原创 c#中struct和class的区别
1.不能显示定义无参数的构造函数,因为编译器会自动提供一个默认构造函数,把所有字段初始化为默认值(如int初始化为0,string初始化为null)struct是值类型,存储在栈上,当进行赋值时,会进行值拷贝,即创造一个新副本,适用于轻量级的数据结构,如点,矩形,日期等。class是引用类型,存储在堆上,当进行赋值时,只是复制引用而不是对象本身,适用于复杂的数据结构,如用户,订单等。2.如果没有定义任何构造函数,编译器会提供一个默认构造函数,将所有字段初始化为默认值。1.可以显式定义无参数的默认构造函数。
2025-05-07 13:43:21
384
原创 记录算法笔记(2025.5.6)搜索二维矩阵 II
思路二:二分查找,因为这个二维数组是从左往右依次递增的,所以每一行都可以使用一次二分查找,来判断target是否在改行。二分查找每次搜索可以排除半行或半列的元素。思路一:直接循环遍历这个二维数组。编写一个高效的算法来搜索。
2025-05-06 19:14:11
909
原创 记录算法笔记(2025.5.6)矩阵旋转图像
思路:将这个二维矩阵的元素沿对角线交换位置,然后再每行倒序排列,即完成了图像沿顺时针旋转90度。总结:不用写两个m,n,因为是n*n矩阵,行和列相同,在倒序时,排列完一行后要把列数复原。//将这个二维数组的元素沿对角线交换位置。旋转图像,这意味着你需要直接修改输入的二维矩阵。请你将图像顺时针旋转 90 度。//再将每行倒序排列。使用另一个矩阵来旋转图像。
2025-05-06 16:26:05
430
原创 ref 和out(c#)
此时arr数组还是原来的值,将arr赋值给array,两个数组都指向同一个堆上地址,然后因为array是new一个新数组,会在堆上开辟一个新空间,array指向这个新地址的内容,学ref和out的原因:它们可以解决在函数内部改变外部传入的内容,函数内部变,外部也要变。此时a还是1,把a的值赋给value,然后只是在栈上开了一个新空间,value等于3,ref 和out 使用就是在前加ref 和out ,调用的时候也要加。使用ref 和out可以使函数内部改变,外部也会改变传入的变量。
2025-05-05 17:43:59
469
原创 Unity生命周期
在Unity中,生命周期通常是指从创建一个游戏对象(GameObject)到销毁它的整个过程,以及在这个过程中各个组件(如脚本组件)所经历的一系列事件和阶段。OnDestroy:对象销毁时调用,依附的GameObject对象被删除时。Start:从自己被创建出来后,第一帧更新之前调用,一个对象只会调用一次。Awake:出生时调用,类似构造函数,一个物体只调用一次。如果一个游戏对象被激活或禁用,其上的所有脚本组件都会调用。如果一个游戏对象被销毁,其上的所有脚本组件都会依次调用。中清理资源,避免内存泄漏。
2025-05-05 15:52:17
416
原创 记录算法笔记(2025.5.5)螺旋矩阵
思路:设置四个边界,上下左右边界,然后从上到右到下到左将二维数组元素添加到结果中,然后每次都缩小或增加边界进行内部层。//上面一层遍历完了,上边界++即往下面移动一层,下次就是遍历上面第二层。//右边一层遍历完了,右边界往往左边移动一层。//下边界遍历完了,往上面移动一层。//左边界遍历完了,往右边移动一层。,返回矩阵中的所有元素。//从左上角到右上角。
2025-05-05 14:27:20
649
原创 记录算法笔记(2025.5.5)
思路:遍历这个二维数组,将元素为0的行和列记录下来,再次遍历这个二维数组,将记录的其全改为0。//二次遍历这个二维数组。,则将其所在行和列的所有元素都设为。的矩阵,如果一个元素为。
2025-05-05 13:57:19
386
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅