自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 543刷题记录

这个写法是正确的,因为它巧妙地利用了递归的返回值和副作用返回值:用于向上传递“深度”信息,供父节点计算它自己的l_lenr_len。副作用:用于在当前节点结合左右子树信息,计算“以当前节点为中心的直径”,并更新全局答案。return -1的基础情况是让这一切数学关系(+1)得以自洽的关键。

2025-10-25 17:55:04 201

原创 hot100

好的,这道题的题眼在于它给的两个限制条件:数组nums的长度为 $n$。nums中所有数都在 $[1, n]$ 的范围内。这道题的进阶要求是。这排除了所有“哈希表”或“排序”的解法。使用或bool数组,空间复杂度是 $O(n)$。使用sort排序,时间复杂度是 $O(n \log n)$。nums。

2025-10-23 16:53:55 551

原创 打开hot100的不知道多少天

好的,这是一道非常经典且巧妙的题目,它考察的是如何用 $O(n)$ 的时间复杂度解决子数组求和问题。这道题的朴素解法很容易想到,但会超时。最优解法需要用到的思想。下面是我为你从零开始思考并编写的 C++ 解决方案,以及详细的思路演进过程。

2025-10-21 21:40:51 650

原创 继续打卡hot100

从后向前查找第一个满足的元素,记下其下标i。这个nums[i]是我们要替换的“较小数”。如果找不到这样的i(即整个序列是降序的),说明这已经是最大的排列。直接将整个数组反转,得到最小排列,程序结束。如果找到了i,再从后向前查找第一个满足的元素,记下其下标j。这个nums[j]是用来替换的“较大数”。交换nums[i]和nums[j]。将下标i+1到数组末尾的这部分子数组反转。

2025-10-05 18:12:20 761

原创 优先队列知识点

2025-10-04 20:42:07 110

原创 打卡hot100

sortList在金字塔顶端接收任务,不断地将任务对半分割,向下传递,直到任务小到只有一个节点(金字塔底端)。在金字塔底端,只有一个节点的链表被认为“已完成”,然后开始向上返回。每一层的merge函数都将下层返回的两个有序结果合并成一个更大的有序结果,再继续向上返回。最终,在金字塔顶端,最后一次merge操作完成了整个链表的排序。23. 合并 K 个升序链表 - 力扣(LeetCode)/*** int val;* };

2025-10-04 20:36:29 960

原创 打开hot100

【代码】打开hot100。

2025-09-19 22:06:25 210

原创 买卖股票系列

小结:这 4 个量覆盖了“做 0 次、1 次、2 次交易”的所有最优情况,并且每一天都向后滚动保持“到目前为止的最优”。处理到第 i 天,这四个变量分别就是“在第 i 天结束时,位于 S1/S2/S3/S4 的。代表“≤2 笔后空仓的最优”,它会自动等于 0/1/2 笔中的最大值——归纳步骤:由“保持/转移取更大值”的。两笔后空仓的最大收益”,它会自动等于 0/1/2 笔中的最优那个。,并不影响正确性(同日买卖收益 0,最多只是“可有可无”的选择)。每天对每个阶段做“保持/转移取最大”,就能保证。

2025-09-04 13:57:41 652

原创 打家劫舍系列

【代码】打家劫舍系列。

2025-09-03 15:57:25 148

原创 继续动态规划

【代码】继续动态规划。

2025-09-03 14:22:36 156

原创 dp数组的含义总结

想象“最后一次选择”是什么,枚举它,把大问题变小问题 + 这次选择的代价/收益。

2025-09-03 12:34:13 664

原创 背包代码编写模板

使用要点:0/1 一维(防重复取)完全一维(允许重复取)dp用long long防溢出。

2025-09-02 14:40:03 241

原创 动态规划第五天

【代码】动态规划第五天。

2025-09-02 14:38:09 169

原创 01背包和完全背包的区别

定义: dp[i][j] 表示只考虑前 i 个物品、在容量为 j的背包中能取得的最大价值。边界:dp[0][j]=0(没有物品可选时,价值为 0)dp[i][0]=0(容量为 0 时,价值为 0)

2025-09-02 10:57:47 1060

原创 动态规划第四天

【代码】动态规划第四天。

2025-09-01 15:23:21 149

原创 01背包day35

【代码】01背包day35。

2025-08-31 17:53:26 163

原创 对于01背包的一些疑问

二维初始化“没有物品/没有容量 → 价值为 0”,或“恰好装满 → 不可达设 -INF”。一维初始化“容量不超过 → dp 全 0”;“恰好装满 → dp[0]=0,其它 -INF”。一维倒序防止在同一轮里复用当前物品(否则就成完全背包)。倒序确保右边的dp[c-w]仍是“上一行”的值。好问题!把这三件事一次讲清:二维 DP 的遍历顺序一维 DP 的遍历顺序(为什么一定要倒序容量)“先遍历物品的重量还是价值?”(澄清下概念)

2025-08-29 16:28:09 969

原创 动态规划01背包

dp[i][c]:只考虑前 i 个物品,在背包容量为c时能得到的最大价值。行是“用了多少件物品”,列是“当前容量”。这就像一张表,我们从小问题(少物品、小容量)一步步填到大问题(多物品、大容量)。

2025-08-29 16:26:32 977

原创 动态规划初学

只有两种:从。

2025-08-29 10:49:49 1121

原创 start dp day1

【代码】start dp day1。

2025-08-28 11:32:39 205

原创 结束贪心的学习了

因为 '1''1'。s[i-1]--等价于也就是把该字符的编码减。'3'(51) → 减 1 → 50 →'2',正是你想要的效果。等价于'3'(51) −'1'(49) =,再把整数 2 转成char得到的是\x02,不是字符'2'。这会把字符串变成非数字字符,stoi解析会出问题。'3' - 1'2''3' - '1''\x02'小贴士想把转换为,用s[i] - '0';想把转换为,用。如果你硬要用“减'1'”的写法,正确的套路应该是先转成整数再转回字符:—— 但这其实就是在做。

2025-08-28 09:44:57 773

原创 1个月了,继续up

因此让。

2025-08-27 10:48:39 428

原创 day29贪心

【代码】day29贪心。

2025-08-26 14:59:27 240

原创 day28贪心

你在当前层(不超过curEnd的所有位置)里,尽量把“下一跳能到多远”这个量(nextFar)推到最大;这等价于 BFS 中同一层的所有结点都被扩展,下一层的覆盖范围统一在一次“跳数 +1”后获得。不需要贪心地“每次跳到能到的最远下标”;真正重要的是下一跳的最远覆盖。

2025-08-26 10:01:12 328

原创 开始学习贪心算法

【代码】开始学习贪心算法。

2025-08-25 11:32:25 329

原创 结束回溯的学习day25

【代码】结束回溯的学习day25。

2025-08-25 09:29:11 337

原创 day24

*组合(选 k 个)**是在子集的框架上再加一个“已选数量==k 才收集”的条件。每一层对应一个元素,左边“不选”,右边“选”,叶子结点就是一个子集。:目前已经“选进来”的元素(就是正在构造的那个子集)。,说明所有元素都做完“二选一”了,此时 path。不选1 → 不选2 → 不选3 → 收集。不选1 → 不选2 → 选3 → 收集。不选1 → 选2 → 不选3 → 收集。选1 → 不选2 → 不选3 → 收集。不选1 → 选2 → 选3 → 收集。选1 → 不选2 → 选3 → 收集。

2025-08-22 11:40:15 893

原创 继续回溯的学习

【代码】继续回溯的学习。

2025-08-22 09:24:14 186

原创 开始回溯的学习

【代码】开始回溯的学习。

2025-08-15 17:27:20 222

原创 二叉树完结了

【代码】二叉树完结了。

2025-08-14 23:28:13 170

原创 day20

大(或相等时统一走右边),就把任务丢给右子树,并把“插完后的右子树根指针”接回。我们只可能改了它的孩子指针,但根没变,所以返回它就满足“承诺”。),递归会创建一个新节点并返回它的指针,我们接回去,就把新节点挂成了。本人(我们可能改动的是它的左/右孩子指针),所以把。,第一行会新建节点并返回,新根就被正确传回给调用者了。(其实还是原来的 3,只是它多了个右孩子 5),然后。到父节点对应的孩子指针上,这样树才更新到最新形态。并把它的指针返回来,你必须把这个指针。:返回“插入后这棵子树的根”。

2025-08-13 23:23:26 553

原创 day18学习了最近公共祖先

到 6,又调用 dfs(node->left);,它没有“前驱”,没有相邻左边元素可比;必须等到你拿到了第二个元素(回到 3 时)才有第一次比较。此时 prev=1,我们返回到 if(prev)…所以差值天然非负,直接用“当前 - 上一个”即可;更新(不是在 1),因为走法是“1 完了回到 3 再比”。✔️ 正确:中序在 6 处会先去做左子树 4。先记住代码的“比较发生点”在。(栈帧)来走,每一步都写清。(因为 3 的左子树做完了)(因为还没有“上一个”)(1 的左):直接返回。

2025-08-12 22:40:11 429

原创 补卡day17

【代码】补卡day17。

2025-08-11 20:40:29 170

原创 补卡day16

【代码】补卡day16。

2025-08-10 22:49:22 236

原创 day15_keep going on

【代码】day15_keep going on。

2025-08-09 15:29:21 183

原创 打卡day14

226. 翻转二叉树 - 力扣(LeetCode)101. 对称二叉树 - 力扣(LeetCode)104. 二叉树的最大深度 - 力扣(LeetCode)函数调用模型每次调用函数,都会在“调用栈”上分配一个新的栈帧(stack frame),用于保存该次调用的参数、局部变量和返回地址。递归调用本质上与普通的函数调用完全相同:只是函数体里直接写了对自己的调用。递归的必要条件基准情形(Base Case):函数内必须有一个「不再向下递归」的情形,否则会无限调用直至栈溢出。在 中,这个基准情

2025-08-05 22:01:07 782

原创 二叉树的层序遍历

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

2025-08-05 12:00:00 167

原创 二叉树的递归遍历

【代码】二叉树的递归遍历。

2025-08-04 20:33:31 136

原创 补卡day8

【代码】补卡day8。

2025-08-03 16:16:31 214

原创 kmp复习,需要多看多练

【代码】kmp复习,需要多看多练。

2025-07-31 23:33:18 151

空空如也

空空如也

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

TA关注的人

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