- 博客(154)
- 收藏
- 关注
原创 234. 回文链表
对折对比:找中点,反转后半,两头往中间走。由于链表无法直接倒序遍历,我们把链表从中间切开,将后半段原地反转,然后让两个指针分别从“原来的头”和“反转后的尾”出发,一一比对。
2025-12-24 20:05:21
265
原创 206. 反转链表
保存下家,指回前任。不要想整个链表跳转,只关注当前节点(cur:把它到底指向“后面”的箭头,硬拐过来指向“前面”(pre💡口诀记忆:“一存,二反,三进”存下家 (避免断链)反指前任(核心操作)齐梯(双起重机右移)
2025-12-24 20:04:46
233
原创 160. 相交链表
你走过我走过的路,我走过你走过的路,我们终会相遇。两个指针分别走完自己的链表后,重新跳到对方链表的头继续走。因为A+B = B+A,彼此走的总路线一定相同,所以最后一定会在交点(或者终点null)相遇。
2025-12-20 20:09:33
650
原创 240. 搜索二维矩阵 II
站在右上角,看成 BST”。把矩阵的右上角(或左下角)看作二叉树的根节点 (Root)。往左走--> 数值变小。往下走--> 数值变大。这正是二叉搜索树的性质!利用这个性质进行“排除法”搜索。
2025-12-20 20:08:29
535
原创 48. 旋转图像
对角线折叠,再左右翻转。顺时针旋转 90° <->先沿主对角线转置,再水平翻转每一行。💡图像记忆 (手帕折叠法):切一刀 (:沿左上到右下的对角线,把右上角的元素对折到左下角 (转置)。翻一面 (|):把每一行左右对调 (镜像翻转)。结果就是顺时针 90 度!
2025-12-19 20:35:08
253
原创 54. 螺旋矩阵
四面楚歌,步步紧逼”。设定 上下左右 (t, b, l, r) 四个边界,按照 “上$\to$右$\to$下$\to$左” 的顺时针顺序打印。每打印完一条边,立刻将该边界向内收缩一步,并判断是否撞墙(边界交错)。
2025-12-19 20:34:26
469
原创 73. 矩阵置零
先记账,后清算”。不能遍历到一个 0 就立刻把整行整列变 0(因为这会污染后续的遍历,导致全变成 0)。必须先用两个辅助数组把“哪些行、哪些列坏了”记录下来,最后统一执行死刑。
2025-12-16 20:17:50
534
原创 41. 缺失的第一个正数
一个萝卜一个坑”。利用数组下标作为哈希表的 Key。我们要把数值 x 强行交换到下标 x-1 的位置上(例如:数值 1 放下标 0,数值 3 放下标 2)。💡 直观理解:想象你在整理杂乱的带有编号的球(1号球、5号球...)。规则是:拿到 k号球,就把它扔到 第 k-1 个 盒子里。最后从头检查盒子,第一个“球号不对应”的盒子,就是缺少的那个球。
2025-12-16 20:17:18
312
原创 238. 除自身以外数组的乘积
左边乘积x 右边乘积”。想知道除了自己以外所有人的乘积,等于 (自己左边所有人的乘积) x (自己右边所有人的乘积)。💡 直观理解:不要试图去“剔除”自己(不用除法)。而是把自己当成分界线,分别计算左半边和右半边的累积结果,最后左右一拍即合。
2025-12-14 22:37:09
619
原创 189. 轮转数组
整体倒序,再分段还原。通过先将整个数组翻转,把“尾部元素”调到了“头部”,但此时内部顺序是反的。随后分别翻转“前半段”和“后半段”,恢复内部顺序。💡 口诀记忆:“全翻 -> 左翻 -> 右翻”(这里的“左”指前 k 个,“右”指剩余部分)
2025-12-14 22:36:37
403
原创 53. 最大子数组和
抱大腿 vs 另起炉灶”:遍历数组,如果前面的累加和(前缀收益)是正数,就加入它(抱大腿);如果是负数或0,就把它丢弃,自己重新开始(另起炉灶)。💡 直观理解:如果你之前的队友攒的是正分f[i-1] > 0),不管多还是少,加上他对你总是有益的 ->接力。如果你之前的队友欠了一屁股债是负分f[i-1] < 0),加上他只会拖累你 ->断开,自己从头算。f[i]:必须以 nums[i] 结尾的最大连续子数组和。
2025-12-13 20:18:37
233
原创 76. 最小覆盖子串
右进左出”:先向右扩展窗口直到满足条件(覆盖所有字符),然后尝试向右收缩左边界(踢出多余字符)以获取最小长度。💡像拉手风琴。右手 (right) 往右拉,直到能包住所有目标音符。左手 (left) 往右缩,只要还能包住音符就尽量缩,缩到不能再缩为止(记录此时的最短距离)。
2025-12-12 21:57:55
678
原创 239. 滑动窗口最大值
维护一个双端队列 (Deque),队列内存放的是下标,对应的数值保持单调递减(队首永远是当前窗口最大的)。💡 直观理解:如果一个元素比前面的元素更晚出现且数值更大,那么前面的元素就“废了”(永远不可能是最大值了),直接淘汰。
2025-12-12 21:57:22
775
原创 42. 接雨水
每次只关注「左右两侧最大高度中较小的那一侧」(因为雨水高度由矮的一侧决定);比如示例中preMax=2始终小于sufMax=3,所以一直计算左指针位置的雨水量,直到左指针移到右指针处;无需额外数组存储所有位置的左右最大高度,只用 2 个变量preMaxsufMax动态更新,既省空间又高效。
2025-11-07 21:57:32
1347
原创 15. 三数之和
中等提示给你一个整数数组nums,判断是否存在三元组满足i!= ji!= k且j!= k,同时还满足。请你返回所有和为0且不重复的三元组。答案中不可以包含重复的三元组。
2025-11-06 23:53:19
1024
原创 11. 盛最多水的容器
已解答中等提示给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i, 0)和。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。你不能倾斜容器。作者:灵茶山艾府来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2025-11-06 23:50:49
444
原创 1. 两数之和
简单提示给定一个整数数组nums和一个整数目标值target,请你在该数组中找出target的那整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。你可以想出一个时间复杂度小于O(n2)的算法吗?
2025-11-04 23:49:39
373
原创 82. 删除排序链表中的重复元素 II
如果后面那两个节点的值不一样,cur就移动到下一个节点, 直到后面不足两个节点为止。初始化cur 为dummy node , 判断下一个节点和下下个节点的值是否相等。如果一样就套一个循环, 不断的删除节点, 知道遇到没有节点或者遇到的节点不一样。是需要的, 因为如果开始就有几个重复的节点, 那么可能是会将头节点删除的。删除原始链表中所有重复数字的节点,只留下不同的数字。这个需要dummy node 吗?来源:力扣(LeetCode)给定一个已排序的链表的头。
2025-08-12 22:10:25
267
原创 83. 删除排序链表中的重复元素
思路: cur指向头节点, 如果cur下一个节点的值和上一个节点的相同那就删除这个节点, 否则就移动到下一个节点。删除所有重复的元素,使每个元素只出现一次。如此循环知道cur下一个节点没有值为止。来源:力扣(LeetCode)给定一个已排序的链表的头。
2025-08-12 22:09:55
592
原创 142. 环形链表 ||
指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。下面我们看一个最坏的情况: slow指针刚刚进入环, fast指针刚好在它的前面。这里有一个结论: 当快慢指针相遇的时候, 慢指针还没有走完一圈。那对于其余任何情况 fast指针走的距离都会小于上面着这种情况。如果链表中有某个节点,可以通过连续跟踪。,返回链表开始入环的第一个节点。来表示链表尾连接到链表中的位置(,仅仅是为了标识链表的实际情况。给定一个链表的头节点。如果链表无环,则返回。,则在该链表中没有环。
2025-08-11 21:32:43
327
原创 143. 重排链表
这里一直循环直到head2指针中间节点或者head2.next为空就退出循环。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。来源:力扣(LeetCode)
2025-08-11 21:32:12
273
原创 141. 环形链表
指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。她们的相对速度是不是每次循环走一步, 那你一步一步走肯定能遇上slow指针啊。总结: slow指针每次走一步, fast指针每次走两步。来表示链表尾连接到链表中的位置(索引从 0 开始)。如果链表中有某个节点,可以通过连续跟踪。仅仅是为了标识链表的实际情况。来源:力扣(LeetCode。,判断链表中是否有环。给你一个链表的头节点。
2025-08-09 21:39:30
540
原创 逻辑删除的实现
综上, 开启了逻辑删除功能以后,我们就可以像普通删除一样做CRUD,基本不用考虑代码逻辑问题。,只有MybatisPlus生成的SQL语句才支持自动的逻辑删除,自定义SQL需要自己手动处理逻辑删除。因此,我不太推荐采用逻辑删除功能,如果数据不能删除,可以采用把数据迁移到其它表的办法。为了解决这个问题,MybatisPlus就添加了对逻辑删除的支持。一旦采用了逻辑删除,所有的查询和删除逻辑都要跟着变化,非常麻烦。
2025-08-08 22:18:57
396
原创 25. K 个一组翻转链表
是一个正整数,它的值小于或等于链表的长度。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。来源:力扣(LeetCode)
2025-08-08 22:16:46
450
原创 92. 反转链表 II
中等给你单链表的头指针head和两个整数left和right,其中。请你反转从位置left到位置right的链表节点,返回。
2025-08-07 22:32:04
269
原创 33. 搜索旋转排序数组
如果 x>nums[n−1],说明 x 在第一段中,那么 target 也必须在第一段中(否则 x 一定在 target 左边)且 x 必须大于等于 target。如果 x≤nums[n−1],说明 x 在第二段中(或者 nums 只有一段),那么 target 可以在第一段,也可以在第二段。如果 target 在第一段(左),x 在第二段(右),说明 x 在 target 右边;如果 target 在第二段(右),x 在第一段(左),说明 x 在 target 左边。,则返回它的下标,否则返回。
2025-08-06 22:06:37
401
原创 153. 寻找旋转排序数组中的最小值
中等提示已知一个长度为n的数组,预先按照升序排列,经由1到n次后,得到输入数组。例如,原数组47注意,数组的结果为数组。给你一个元素值的数组nums,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的。你必须设计一个时间复杂度为O(log n)的算法解决此问题。nums1n设 x=nums[mid] 是现在二分取到的数。我们需要判断 x 和数组最小值的位置关系,谁在左边,谁在右边?
2025-08-06 22:05:39
259
原创 1661. 每台机器的进程平均运行时间
text{总处理时间} = (\text{end}_1 + \text{end}_2 + \dots) - (\text{start}_1 + \text{start}_2 + \dots)这一步计算的是每个过程的平均处理时间。通过将总处理时间除以过程的数量,你得到每个。这相当于计算所有过程的结束时间总和减去开始时间总和,进而得到总的处理时间。是一个聚合函数,用于计算指定列或表达式的总和。表达式,用于根据条件对每一行的数据进行不同的处理。表记录了机器的活动日志,每个过程有一个。平均每个过程花费的时间。
2025-08-01 18:33:03
805
原创 197. 上升的温度
表中,但单表查询只能 “逐行处理当前行”,无法直接关联 “当前行” 和 “前一行”。会先产生 “所有可能的组合”(类似两张表的笛卡尔积),但通过。认识一下 DATEDIFF 函数,可以计算两者的日期差。前一天的记录(如 2023-01-01 的温度)。当天的记录(如 2023-01-02 的温度);,实现 “当天” 与 “前一天” 的比较。其他组合(如 a=2 与 b=3)代表 “当前天” 的记录;代表 “前一天” 的记录。是(2-1=1 天)是(3-2=1 天)是(4-3=1 天)
2025-08-01 18:32:30
366
原创 15. 三数之和
中等提示给你一个整数数组nums,判断是否存在三元组满足i!= ji!= k且j!= k,同时还满足。请你返回所有和为0且不重复的三元组。答案中不可以包含重复的三元组。
2025-07-31 21:49:47
1423
原创 167. 两数之和 II - 输入有序数组
中等给你一个下标从开始的整数数组numbers,该数组已按,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是和,则。以长度为 2 的整数数组的形式返回这两个整数的下标index1和index2。你可以假设每个输入,而且你重复使用相同的元素。你所设计的解决方案必须只使用常量级的额外空间。
2025-07-31 21:48:51
306
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅