自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AI Agent 记忆系统设计:长短期记忆如何实现?什么时候存?什么时候查?

大模型agent的记忆系统如何实现,什么时候存,什么时候取?

2026-07-17 17:48:47 811

原创 大模型输出 JSON 总出错?一文讲透生产环境保证 JSON 100% 可用的七层方案

如何让大模型稳定输出JSON

2026-07-03 13:35:16 334

原创 别再直接让 AI 写代码了:一套文档驱动的 AI 编程工作流

本文提出了一套文档驱动的AI编程工作流,强调AI编程的核心在于上下文管理而非简单代码生成。作者指出,高效AI开发需要先编写详细文档(需求分析、设计方案等),再将任务拆分为小模块,并为AI提供充分上下文。关键步骤包括:需求分析→技术方案设计→项目结构规划→任务拆分→文档驱动编码→AI代码审查→自动测试生成。文章总结了AI编程五原则:先文档后代码、任务越小越好、提供充分上下文、坚持代码审查、将AI视为团队成员。这套方法将AI定位为架构助手和代码审查者,而非简单代码生成器,可显著提升开发效率和质量。

2026-07-03 11:25:28 471

原创 向量数据库到底是什么?从原理、索引到 RAG 实战选型

本文深入解析了向量数据库在RAG(检索增强生成)项目中的核心作用。主要内容包括: 向量数据库本质是专门存储、索引和检索高维向量数据的数据库系统,通过Embedding模型将语义内容映射为向量空间中的点。 与传统关系型数据库相比,向量数据库采用近似最近邻搜索(ANN)算法(如HNSW和IVF)快速处理高维相似度查询,解决了暴力搜索和B-Tree索引不适用的问题。 生产环境中,向量数据库还需支持Metadata过滤、混合检索(结合语义和关键词)和实时更新能力,以满足企业级知识管理需求。 不同索引算法各有优劣:H

2026-07-29 16:57:02 354

原创 RAG 中如何选择 Embedding 模型

文章摘要 在RAG系统中,Embedding模型的选择直接影响检索效果。选择时需考虑语言、业务领域、向量维度和输入长度,关键是通过实际召回效果(Recall@K)评估而非仅依赖模型排行榜。中文项目可选BGE、GTE等模型,但需测试业务数据表现。向量维度并非越高越好,需平衡效果与计算成本。同时,Embedding模型的最大输入长度会影响文本切分策略。实际项目中建议结合Hybrid Search(向量+关键词检索)和Rerank,并同步优化Chunk切分策略。最终选择应综合效果、速度和成本,建立测试集验证召回率

2026-07-28 16:39:38 405

原创 AI 应用中的高并发处理:从限流、异步到缓存与队列

AI 应用的高并发并没有一个所谓的“万能技术”。先减少不必要的请求↓缓存再限制请求进入速度↓限流再控制下游并发↓再把耗时任务异步化↓再提高单机处理能力↓单机不够↓多实例 + Load Balancer下游不稳定↓模型成为瓶颈↓模型路由 + vLLM / SGLang + Batching所以对于 AI 应用来说,高并发优化最重要的不是记住几十个组件,而是学会找到真正的瓶颈在哪里。QPS高→ 看限流请求等待时间长→ 看异步和下游耗时LLM调用太多。

2026-07-28 14:14:57 334

原创 DeepSeek 的 Input Cache(输入缓存)是什么?一文讲清原理、作用和使用技巧

文章摘要: DeepSeek 的 Input Cache(输入缓存) 是一种优化大模型推理性能的技术,通过缓存输入 Prompt 的中间计算结果(如 KV Cache),避免重复计算相同前缀的 Token,从而提升响应速度并降低 API 成本。其核心原理是:当多次请求的输入前缀一致时,直接复用已缓存的中间状态,仅计算新增或变化的部分。 关键点: 缓存内容:模型处理输入时的中间计算结果(非最终回答)。 生效条件:输入 Token 完全一致(非语义相同)。 适用场景:固定 System Prompt、Few-s

2026-07-17 10:31:17 254

原创 Conda 环境依赖导出指南:四种常用方法总结

本文总结了四种常用的 Conda 环境依赖导出方法: 推荐方法:使用 conda env export --no-builds 导出完整环境(包含 pip 依赖),适合团队协作和服务器部署 简洁导出:conda env export --from-history 仅导出手动安装的包,适合开源项目 单独导出 pip 依赖:pip freeze > requirements.txt 导出 Conda 包列表:conda list --export 对于 AI 项目,建议同时保留 environment.yml

2026-07-15 10:20:46 442

原创 LeetCode 394. 字符串解码:一文掌握栈解决括号嵌套问题

文章摘要 LeetCode 394《字符串解码》是一道经典的栈应用题目,主要解决括号嵌套的字符串解码问题。文章通过分析题目示例(如"3[a2[c]]")展示了嵌套字符串的处理顺序,强调"遇到[存档,遇到]恢复"的核心思路。详细讲解了使用栈结构的原因(后进先出特性)和需要维护的三个关键变量:当前数字(current_num)、当前字符串(current_str)和保存历史状态的栈(stack)。文章提供了完整的Python代码实现,并分析了时间复杂度和空间复杂度均为O(n)。最后总结了处理多层嵌套的原理和常见

2026-07-14 11:30:49 376

原创 LeetCode 39. 组合总和:回溯算法入门必会模板(DFS + 回溯)

本文介绍了LeetCode 39《组合总和》这道经典回溯算法题目。文章首先阐述了回溯算法的适用场景,并解释了题目要求:找出所有元素之和等于目标值且可重复使用元素的组合。重点讲解了回溯的核心思想"选择→递归→撤销选择",详细分析了为何需要start参数、递归传i而非i+1的原因,以及必须使用pop()操作的原理。文章提供了完整的Python代码实现,并总结出回溯算法的通用模板。最后指出了几个常见易错点:忘记复制路径、遗漏pop操作、错误使用i+1等。通过这道题可以掌握回溯算法的基础思想,为后续解决排列、子集等

2026-07-14 11:28:04 283

原创 LeetCode 105. 从前序与中序遍历序列构造二叉树:分治递归思路详解

这篇文章详细解析了LeetCode 105题"从前序与中序遍历序列构造二叉树"的解题思路。关键点包括: 前序遍历确定根节点,中序遍历划分左右子树 通过建立哈希表优化查找效率,将时间复杂度从O(n²)降为O(n) 准确计算左子树节点数量来切分前序数组区间 使用递归边界条件防止数组越界 避免数组切片操作,改用索引边界表示子树区间 文章提供了完整的Python代码实现和复杂度分析,并总结了常见的易错点,是理解二叉树构造问题的经典教程。

2026-07-13 13:14:51 159

原创 LeetCode 124. 二叉树中的最大路径和:一文讲懂递归为什么要返回「单边贡献」

摘要 LeetCode 124题要求找出二叉树中的最大路径和,路径不能分叉。解题关键在于区分两种路径用途:1)完整路径(当前节点作为最高点连接左右子树)用于更新全局最大值;2)单边路径(只能选择左右贡献较大的一边)返回给父节点。递归时需要舍弃负贡献,初始值设为负无穷以处理全负数树。核心思想是递归返回单边最大贡献而非整条路径,整条路径仅用于更新答案。时间复杂度O(n),空间复杂度O(h)。

2026-07-13 13:14:09 169

原创 LeetCode 42. 接雨水(动态规划详解)

LeetCode 42. 接雨水(动态规划详解)

2026-07-01 13:16:09 462

原创 LeetCode 23. 合并 K 个升序链表(分治 + 链表归并)

本文介绍了LeetCode 23题"合并K个升序链表"的解决方案。最直接的顺序合并方法时间复杂度为O(k²n),效率较低。最优解法采用分治策略,将问题拆分为多个"合并两个有序链表"的子问题,递归合并后得到最终结果。该方法时间复杂度为O(kn×logk),空间复杂度为O(logk)。文章详细讲解了分治思路、合并两个链表的实现、递归拆分过程以及完整代码,并指出了常见错误点如返回值错误、参数类型混淆等。最终解决方案通过分治递归调用mergeTwoLists函数高效合并所有链表。

2026-07-01 13:14:12 316

原创 LeetCode 46. 全排列(回溯算法入门模板)

这篇文章详细介绍了LeetCode 46题「全排列」的回溯解法。主要内容包括: 问题描述:给定无重复数字的数组,返回所有可能的全排列。 解题思路:使用回溯算法(DFS),通过"选择-递归-撤销"的模板枚举所有可能排列。 核心要素: 结果集res存储最终解 路径path记录当前排列 used数组标记已用数字 关键步骤: 终止条件:路径长度等于数组长度 选择未被使用的数字进行递归 回溯时需要恢复状态 常见错误:未正确回溯、保存结果未用副本、终止条件错误等。 复杂度分析:时间复杂度O(n×n!),空间复杂度O(n

2026-06-29 11:35:50 255

原创 LeetCode 5. 最长回文子串——中心扩展法彻底讲透

本文详细讲解了LeetCode第5题"最长回文子串"的中心扩展解法。回文串的核心性质是左右对称,分为奇数长度(如"aba")和偶数长度(如"abba")两种情况。解题思路是:遍历字符串每个位置,分别作为奇数和偶数回文的中心向两边扩展,记录最长回文子串的边界。文章给出了完整Python代码,分析了时间复杂度O(n²)和空间复杂度O(1),并总结了5个常见易错点,如只处理奇数回文、边界处理不当等。关键在于枚举所有可能的回文中心并向外扩展,记录最长回文子串。

2026-06-29 10:36:42 362

原创 LeetCode 98. 验证二叉搜索树(BST)——递归区间法彻底讲透

本文详细讲解了如何验证二叉搜索树(BST)的有效性。关键在于递归维护每个节点的合法取值区间(low, high),确保当前节点值位于区间内,且左右子树分别继承修正后的区间边界(左子树high=当前值,右子树low=当前值)。文章通过图解示例和Python代码演示了该算法,指出常见错误如仅比较父子节点或忽略区间传递,并分析了O(n)时间复杂度和O(h)空间复杂度。最终强调BST验证的核心是检查每个节点是否始终满足祖先节点规定的数值范围约束。

2026-06-26 16:45:31 201

原创 LeetCode 200. 岛屿数量——DFS 连通块模板彻底讲透

本文介绍了使用DFS算法解决LeetCode 200题"岛屿数量"的方法。题目要求统计二维网格中由"1"(陆地)组成的连通块数量。核心思想是:遍历网格时,每发现一个未访问的陆地"1",岛屿计数加1,并通过DFS淹没整个连通区域以防止重复计数。文章详细讲解了DFS模板,包括终止条件(越界或遇到海水)、标记已访问节点和四个方向的递归搜索。提供了完整的Python代码实现,分析了时间复杂度和空间复杂度均为O(m×n)。最后总结了DFS连通块模板的通用性,指出类似问题(如最大岛屿面积、被围绕区域等)均可套用该模板。

2026-06-26 16:44:42 353

原创 LeetCode 24 两两交换链表中的节点(指针重连经典题)

LeetCode 24 两两交换链表节点解题摘要 本题要求在不修改节点值的情况下,通过调整指针两两交换链表中的相邻节点。解题关键在于使用哨兵节点(dummy)统一处理头节点变化,并通过三步指针重连操作完成交换:1)将前驱节点指向第二个节点,2)将第一个节点指向下一组的第一个节点,3)将第二个节点指向第一个节点。每次交换后需要将当前指针移动到已交换组的最后一个节点。时间复杂度O(n),空间复杂度O(1)。易错点包括循环条件判断、指针重连顺序和忘记移动当前指针。核心记忆口诀:"哨兵当头,cur在前;取出两个,三

2026-06-25 14:10:02 808

原创 LeetCode 19 删除链表的倒数第 N 个结点(快慢指针经典题)

本文介绍了LeetCode第19题"删除链表的倒数第N个结点"的解决方案。核心思路是使用快慢指针:快指针先走N步,然后快慢指针同步前进,当快指针到达末尾时,慢指针正好位于待删除节点的前驱位置。为了处理删除头节点的情况,建议使用虚拟头节点(dummy)。文章提供了Python实现代码,分析了时间(O(n))和空间(O(1))复杂度,并指出了常见错误点,如忘记使用dummy节点、快指针步数错误等。最后用一句话总结了该算法的精髓:快指针先走N步,同步前进,慢指针将停在待删除节点的前驱位置。

2026-06-25 13:59:39 252

原创 链表算法题常见解题方法总结(面试高频模板)

文章摘要:链表算法题高频解题方法总结 链表问题的核心在于指针操作,常见解题方法包括: 哨兵节点:通过在链表头部添加虚拟节点统一处理逻辑 快慢指针:通过速度差寻找中点/倒数节点/环检测 指针反转:改变next指向实现链表反转 递归与分治:分解子问题处理链表 解题时可按顺序思考:是否能用哨兵节点→快慢指针→反转→递归→分治。掌握这5种模板方法可解决大多数链表问题。典型题目包括反转链表、删除节点、合并链表、环检测等。

2026-06-25 13:56:06 241

原创 LeetCode 240. 搜索二维矩阵 II,为什么从右上角开始查找?

摘要 LeetCode 240题要求在行列均有序的二维矩阵中高效查找目标值。从右上角开始搜索是关键策略,因为该位置具有"行最大、列最小"的特性,可以每次排除整行或整列:若当前值大于目标,排除当前列(左移);若小于目标,排除当前行(下移)。这种贪心策略使得时间复杂度优化至O(m+n),相比暴力解法的O(m*n)显著提升。特别注意不能从左上角开始,因为无法确定唯一移动方向。实现时需处理空矩阵并正确设置循环条件。

2026-06-24 11:23:07 387

原创 LeetCode 48. 旋转图像,一篇搞懂转置+反转的经典技巧

本文介绍了LeetCode 48题"旋转图像"的解题思路。通过观察发现,顺时针旋转90°可以分解为两个步骤:先对矩阵进行转置(沿主对角线交换元素),再对每一行进行反转。这种方法避免了使用额外空间,满足题目原地修改的要求。文章详细解释了转置时的遍历范围(j从i+1开始)以避免重复交换,并提供了Python实现代码。同时指出了常见错误,如转置区域错误、reverse函数用法不当等。最终复杂度为O(n²)时间,O(1)空间。这种转置+反转的方法是解决矩阵旋转问题的经典技巧。

2026-06-24 11:21:59 437

原创 LeetCode 54. 螺旋矩阵,一篇搞懂边界收缩法

本文介绍了LeetCode 54题"螺旋矩阵"的边界收缩解法。该方法通过维护top、bottom、left、right四条边界,按顺时针方向逐层遍历矩阵元素。每遍历完一条边后收缩对应边界,直到边界相遇为止。文章详细解释了每条边的遍历方式、边界收缩逻辑,并指出了常见错误,如倒序遍历终点设置、边界收缩时机不当等。该方法将螺旋遍历转化为边界管理问题,避免了复杂的模拟方向判断,适用于顺时针、逆时针等各种矩阵遍历场景。最后提供了完整的Python实现代码和关键注意事项。

2026-06-23 16:14:04 242

原创 LeetCode 73. 矩阵置零,从标记数组到 O(1) 空间优化彻底讲透

本文详细讲解了LeetCode 73题"矩阵置零"的两种解法。基础解法使用两个标记数组记录需要清零的行列,空间复杂度为O(m+n)。进阶解法通过复用矩阵的第一行和第一列作为标记区,将空间优化至O(1)。关键点在于:1)避免遍历时直接清零导致的连锁反应;2)预处理保存首行首列原始状态;3)最后单独处理首行首列。文章还总结了三种常见错误:边遍历边置零、未保存首行首列状态、忘记处理首行首列。核心思路是正确处理原始零信息的记录与复用。

2026-06-23 16:12:42 413

原创 LeetCode 238:除自身以外数组的乘积,从暴力枚举到前后缀乘积

这篇文章总结了LeetCode 238题《除自身以外数组的乘积》的解题思路和优化方法。从最直观的O(n²)暴力解法入手,分析其重复计算的问题,进而提出使用前缀积和后缀积来优化到O(n)时间复杂度的双辅助数组解法。进一步优化空间复杂度,通过实时维护右侧乘积变量,将额外空间降至O(1)。文章详细解释了每个步骤的实现原理和边界条件,并总结了常见易错点。这道题的核心价值在于教会我们如何通过预计算消除重复计算,这种思想在数组题、动态规划等场景中广泛应用。

2026-06-22 17:53:24 807

原创 LeetCode 189数组轮转问题详解:辅助数组法与三次翻转法

本文详细解析了LeetCode 189轮转数组问题的两种解法。辅助数组法通过(i+k)%n计算新位置,时间复杂度O(n),空间复杂度O(n),易于理解;三次翻转法通过整体翻转、前k个翻转和剩余部分翻转实现,时间复杂度O(n),空间复杂度O(1),是面试高频解法。建议初学者先掌握辅助数组法,理解轮转规律;面试时优先使用三次翻转法,展现优化思维。两种方法都需要注意k对数组长度取模的处理。

2026-06-22 16:46:23 239

原创 LeetCode 53 最大子数组和:原来动态规划可以这么简单

本文以LeetCode 53题"最大子数组和"为例,揭示动态规划背后的简单逻辑。核心思路是:对于每个数字,只需判断是接上前面的连续子数组更优,还是从当前数字重新开始更优。通过示例数组逐步演示决策过程,最终得出最大和6的连续子数组[4,-1,2,1]。代码实现仅需维护两个变量(当前和与历史最大和),时间复杂度O(n),空间复杂度O(1)。这道题融合了动态规划和贪心的思想,关键在于理解"若前面累计和为负数就舍弃"的简单原则,避免死记硬背公式。

2026-06-18 11:23:01 223

原创 LeetCode 11 盛最多水的容器:从暴力枚举到双指针优化

本文介绍了LeetCode第11题"盛最多水的容器"的解题思路。题目要求在给定柱子高度数组中找到两根柱子,使它们与x轴形成的容器面积最大。作者首先分析了暴力枚举法的时间复杂度为O(n²),并指出其效率不足。随后详细讲解了双指针优化解法:初始化左右指针分别指向数组两端,每次移动较矮的一侧指针,因为移动高柱子不可能增加面积。该方法将时间复杂度优化到O(n)。文章通过示例演示了双指针的运行过程,并强调了理解双指针思想的重要性,这是解决三数之和、接雨水等问题的基础。

2026-06-18 10:45:15 331

原创 LeetCode 70 爬楼梯:彻底搞懂 `for _ in range(3, n + 1)`,顺便入门动态规划

力扣动态规划爬楼梯

2026-06-17 10:01:43 203

原创 LeetCode 121 买卖股票的最佳时机——一文搞懂贪心算法思想

这篇文章介绍了LeetCode 121《买卖股票的最佳时机》的贪心算法解法。题目要求在只能买卖一次的情况下计算最大利润。通过维护历史最低价和当前最大利润两个变量,可以在O(n)时间一次遍历解决问题:对于每天价格,计算当天卖出利润(当前价-历史最低价),并更新最大利润和历史最低价。相比暴力解法的O(n²)复杂度,这种贪心策略更高效,每次只做当前最优选择(以历史最低价买入)。文章详细解析了算法思想、执行过程、代码实现及常见错误,是理解贪心算法的经典入门案例。

2026-06-17 09:12:00 240

原创 LeetCode 20 有效的括号——栈结构入门必刷题

本文详细讲解了LeetCode 20题《有效的括号》的解题思路。该题是栈结构的经典应用,通过后进先出特性解决括号匹配问题。文章分析了为什么要使用栈而非简单计数,介绍了使用字典建立括号映射关系的技巧,并提供了完整的Python代码实现。文中还模拟了代码执行过程,总结了常见错误点(如提前返回、未判空等),并归纳了栈结构的适用场景特征(括号匹配、撤销操作等)。掌握本题后,可进一步挑战栈相关的其他经典题目。解题关键在于:左括号入栈、右括号匹配弹栈、最终检查栈是否为空。

2026-06-16 14:09:35 205

原创 LeetCode 35 搜索插入位置——二分查找入门必刷题

这篇文章介绍了LeetCode第35题"搜索插入位置"的二分查找解法。主要内容包括: 题目分析:在已排序数组中查找目标值的位置或应插入位置,要求O(logn)时间复杂度 解题思路:利用二分查找每次缩小一半搜索区间 标准模板代码实现:使用left<=right循环条件和mid±1边界更新 关键点:最终返回left指针,因为它指向第一个大于等于target的位置 常见错误:mid计算、循环条件、边界更新方向的常见错误 扩展应用:该模板适用于其他二分查找变体问题 这篇文章清晰讲解了二分查找的基本原理和实现细节,特

2026-06-16 14:08:45 229

原创 LeetCode 108 有序数组转平衡二叉搜索树:递归建树模板一次搞懂

刷二叉树的时候,经常会遇到两类题:* 给你一棵树,让你遍历、计算、修改;* 给你一组数据,让你从零构建一棵树。LeetCode 108《将有序数组转换为二叉搜索树》就是第二类题目的经典代表。这道题不仅考察二叉搜索树(BST)的性质,更重要的是让我们掌握一个非常重要的思想:如何利用递归和分治,从零构造一棵树。

2026-06-15 17:40:44 1397

原创 LeetCode 543 二叉树的直径:为什么求深度时顺手就能求出直径?

这篇文章深入解析了LeetCode 543题「二叉树的直径」的解法思路,指出该问题本质上是求二叉树深度的变种。关键点在于:对于任意节点,其直径等于左子树深度加右子树深度,而整棵树的直径就是所有节点中该值的最大值。文章通过分步分析和示例演示,说明了如何在递归计算深度的过程中维护全局最大直径值,并强调了常见错误(如混淆边数与节点数、仅计算根节点等)。最后指出这类问题的通用模式:递归返回一个值(如深度)的同时更新全局答案(如直径),这种思路适用于多种二叉树问题。

2026-06-15 16:53:23 226

原创 二叉树入门必刷 4 题:掌握递归三板斧,搞定 80% 二叉树题目

本文总结了4道经典二叉树题目(中序遍历、最大深度、翻转二叉树、对称二叉树)的核心解法与递归思路。文章指出二叉树题目本质上考察遍历、计算属性、修改结构和判断关系四种模式,并强调了递归三板斧:终止条件、处理左右子树、处理当前节点。文中详细分析了每道题的递归框架、易错点和考察重点,特别提醒要注意空节点判断、指针与值的区别、镜像比较顺序等常见错误。最后提出思考题:为何最大深度不需要辅助函数而中序遍历需要,引导读者深入理解递归应用场景。掌握这四题可解决80%的二叉树问题。

2026-06-12 17:46:14 229

原创 LeetCode 21 合并两个有序链表:彻底理解虚拟头节点(Dummy)套路

本文介绍了LeetCode 21题合并两个有序链表的经典解法——使用虚拟头节点(Dummy Node)技巧。虚拟头节点通过创建一个临时节点作为新链表的起点,统一了头节点处理逻辑,避免了复杂的条件判断。文章详细讲解了迭代法的实现步骤、代码执行过程、边界情况分析和时间复杂度,并总结了虚拟头节点的通用模板和适用场景(合并/删除/反转链表等)。该技巧能显著简化链表操作,减少错误,是解决链表问题的核心方法之一。掌握这一套路后,可以轻松应对多种链表题型。

2026-06-12 09:55:55 265

原创 LeetCode 234 141 链表双指针专题:回文链表与环形链表详解,彻底搞懂快慢指针

本文系统讲解了链表双指针技巧,重点解析了LeetCode 234(回文链表)和141(环形链表)两道经典题目。文章详细介绍了数组转换+双指针、快慢指针+反转链表等解法,深入分析了快慢指针找中点、判环的原理,并总结了链表双指针的三大类型(左右指针、快慢指针、交叉指针)。同时指出了常见易错点,如节点比较、空指针保护等,最后给出了面试解题思路建议。通过这两道高频面试题,读者可以全面掌握链表双指针的核心技巧与应用场景。

2026-06-11 17:58:49 208

原创 LeetCode 160 206 链表入门:相交链表与反转链表,彻底搞懂链表遍历和指针操作

本文通过LeetCode 160(相交链表)和206(反转链表)两道经典题目,系统梳理了链表问题的核心解题技巧。重点讲解双指针法判断相交链表的原理,三指针迭代反转链表的关键步骤,以及哈希集合的空间换时间思路。文章总结链表题常见套路包括:节点引用判断、保存后继节点防断裂、递归反转返回new_head等核心要点。建议初学者掌握双指针、哈希集合和三指针反转这三类基础方法,为后续更复杂的链表题打下坚实基础。

2026-06-11 17:55:01 177

原创 LeetCode 438 找到字符串中所有字母异位词(Python 固定滑动窗口+字符计数解法)

数组职责混淆(最高发错误)基准数组(存p)是标准答案,初始化后绝对不能修改;窗口移动时,仅能修改窗口计数数组,修改基准数组会导致全部判断失效。判断逻辑嵌套错误窗口初始化的for循环内,不要加入数组比对逻辑;必须等整个窗口统计完成后,再执行一次比对,否则会重复记录下标。列表 append 语法错误res.append(数值)(圆括号);res.append[数值](方括号是取值,不能调用方法)。窗口下标公式记错i - len_p;;下标计算错误会导致取到非法字符,程序报错。

2026-06-09 18:00:48 737

空空如也

空空如也

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

TA关注的人

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