- 博客(23)
- 收藏
- 关注
原创 Leetcode 92.反转链表 II
这道题考察了对链表指针操作的精细控制能力。精准定位:找到反转区间的边界。现场保护:在修改指针前,务必备份关键的连接点(prev2和curr2无缝缝合:反转完成后,利用备份的指针将三段链表(前段、反转段、后段)重新连接。边界处理:特别注意m=1时头节点的变化。
2026-03-14 19:43:19
343
原创 Leetcode 206.反转链表
链表反转是考察指针操作的经典题目。核心难点:在于如何在切断链接的同时不丢失后续节点。关键技巧:使用临时变量(或解构赋值的隐式临时存储)备份next指针。最终结果prev指针最终会停留在新链表的头节点上,直接返回即可。
2026-03-14 19:05:26
360
原创 LeetCode 90. 子集II
特性子集 I (No Duplicates)子集 II (With Duplicates)输入无重复元素可能有重复元素预处理不需要排序必须先排序去重逻辑无需去重需要树层去重关键代码无核心思想纯回溯回溯 + 剪枝记忆口诀有重复,先排序;同层相遇要避让 (i > start前后相同就跳过 (
2026-03-12 14:01:46
368
原创 leetcode 83.删除排序链表中的重复元素
答:最后一个节点绝对有值 (val),只是它的指针 (next) 为空。节点结构:每个节点包含val(数据) 和next(指向下一个节点的指针)。末尾状态:对于链表最后一个节点,val存储着有效数据,但next指向null,表示链表结束。报错原因代码中我们需要访问来进行比较。如果current是最后一个节点,就是null。尝试读取null.val会导致程序崩溃 (逻辑含义:循环停止不是因为“当前节点没值了”,而是因为“当前节点后面没有节点了” ,无法进行“两两比较”。
2026-03-11 17:33:06
363
原创 leetcode 78.子集
这道题是回溯算法的模板题。递归树的结构:每一层代表做一个选择。状态重置push和pop必须成对出现,像括号一样包裹递归调用。剪枝/去重:通过start参数控制搜索范围。只要理解了“前进做选择,后退撤选择”这一核心逻辑,就能轻松解决类似的组合、排列、子集问题。
2026-03-10 18:57:41
373
原创 leetcode 73.矩阵置零
为什么不能边遍历边改?如果在遍历到时立刻把第i行全改成 0,那么当你遍历到该行后面的元素时,会误以为它们原本就是 0,从而导致错误的连锁反应(整个矩阵可能全变 0)。方案二的执行顺序为什么这么重要?先检查首行首列:防止标记覆盖原始信息。中间先标记后清洗:利用首行首列记录信息,然后清洗内部数据。最后处理首行首列:如果在清洗内部数据之前就先把首行首列清零了,那么内部数据在判断时就会全部命中,导致错误。面试回答策略“首先,我们可以用两个数组来记录行和列的状态,这样逻辑很清晰,时间复杂度OMN。
2026-03-09 15:13:42
328
原创 leetcode 70.爬楼梯—— 动态规划深度解析
拆解问题:发现fnf(n)fn可以由fn−1f(n-1)fn−1和fn−2f(n-2)fn−2构造 (最优子结构消除冗余:发现直接递归会有大量重复计算,于是引入memo数组记录结果 (重叠子问题简化状态:确认到达某阶的方法数只与阶数有关,与具体走法历史无关,从而可以简单递推 (无后效性掌握这三个特点,你就掌握了识别和解决大多数动态规划问题的钥匙。
2026-03-08 23:36:41
353
原创 leetcode 62.不同的路径
这段代码是动态规划解决网格路径问题的标准模板。如何定义状态(二维数组)。如何处理边界(首行首列)。如何推导状态转移方程(上 + 左)。对于 JavaScript 开发者来说,特别注意二维数组需要手动初始化每一行(push([])),这与 Java 或 C++ 等语言直接声明int[n][m]略有不同。
2026-03-07 13:34:31
337
原创 leetcode 56.合并区间
为什么要排序?如果不排序,[1, 4]和[2, 3]可能分散在数组两端,你需要ON2O(N^2)ON2的两两比较才能发现它们重叠。排序后,只需ONlogNONlogN排序 +ONO(N)ON线性扫描。这是最优解。判断重叠的条件是什么?。注意:如果是[1, 4]和[4, 5],因为4 >= 4,它们也是重叠的(边界相接也算合并),合并后为[1, 5]。题目通常隐含闭区间概念。合并时取谁的值?左边界:由于已排序,新区间的左边界一定≥\ge≥。
2026-03-06 22:23:17
403
原创 leetcode 49.字母异位词分组
这时你可以提出 “计数法 (Counting Sort Idea)” (时间复杂度降低为 O(N⋅K) )作为优化方案。如果面试官问:“如果字符串非常长,排序会不会太慢?O(N⋅KlogK))有没有更快的方法?
2026-03-03 23:01:45
16
原创 leetcode 21. 合并两个有序链表
创建一个“虚拟头节点”来简化操作,避免了递归的栈开销。1.原地合并” (In-place Merge)
2026-03-02 14:49:54
125
原创 leetcode 20.有效的括号
因为我们要用“栈”来匹配括号的闭合顺序,而左括号需要“延迟匹配”,所以先把它对应的右括号压入栈中,等遇到实际字符时再弹出比较。
2026-03-01 21:45:10
122
原创 从零理解 Vue3 响应式:一个 Todo 应用讲透 ref、computed 与 v-for 的正确姿势
本文通过 Todo 应用,详解 Vue3 响应式核心:用数据驱动视图,告别 DOM 操作,掌握 ref、computed、v-for 等 Composition API 最佳实践。
2025-12-11 22:36:46
615
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅