算法专栏
文章平均质量分 95
进击的圆儿
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
递归专题5 - FloodFill算法专题
本文是递归算法系列的第5篇,聚焦FloodFill算法专题。通过对比FloodFill与网格DFS的核心差异,总结出FloodFill的特点是不需要回溯和恢复现场,直接修改原数组进行填充。文章提供了FloodFill的通用模板和六个典型应用案例,包括图像渲染、岛屿数量统计、最大面积计算等,详细分析了每种应用的具体实现方法和关键技巧。特别强调了避免无限递归等常见错误,帮助读者掌握FloodFill算法的核心思想和实践要点。原创 2025-10-31 16:30:55 · 326 阅读 · 0 评论 -
递归专题3 - 回溯算法十大类型
本文详细总结了回溯算法的十大类型,系统分析了各类问题的特征与解题模板。文章首先阐述了回溯算法的本质是"尝试-撤销"的递归过程,强调恢复现场的关键时机。然后通过对比表格清晰呈现了全排列、子集、组合等七种基础类型的区别,包括集合来源、check数组使用、for循环起点等核心特征,并提供了标准代码模板。对每种类型都结合LeetCode典型题目进行实例说明,如全排列型需要从头遍历和check数组,而子集型则通过index参数避免重复。文章特别指出判断问题类型的关键因素,帮助读者快速定位适用解法,原创 2025-10-31 14:12:58 · 374 阅读 · 0 评论 -
递归专题2 - 二叉树DFS
本文是递归算法系列的第2篇,重点探讨二叉树DFS的递归解法。主要内容包括: 三种遍历方式及其适用场景: 前序遍历(自顶向下)适合需要先处理父节点的题目 中序遍历(左中右)适用于BST相关问题 后序遍历(自底向上)适合需要先知道子树信息的题目 两种递归返回值模式: void返回值+全局变量:适用于需要遍历所有路径、结果累积的情况 bool返回值:适用于找到一个答案就停止、需要提前终止的题目 特别针对BST验证等典型问题,分析了常见错误模式,如仅判断当前节点而忽略子树范围限制等,并给出了正确的解法思路。 文章通原创 2025-10-30 15:05:57 · 1018 阅读 · 0 评论 -
递归专题1 - 递归基础与思维方法
本文是递归算法系列的第一篇,主要讲解递归基础与思维方法。文章首先介绍了递归的本质,即通过将大问题分解为同类型小问题并逐步求解。然后提出递归三要素:递归出口、递归体和返回值,并强调递归思维的关键在于"只考虑当前层做什么"。接着详细阐述了递归函数设计的五步法:明确函数语义、找递归出口、确定子问题、设计递归体和检查语义一致性。文章还对比了void和bool/int两种递归返回值的使用场景,并列举了常见错误及解决方法。最后提供了递归模板和实战示例,帮助读者系统掌握递归算法的实现技巧。原创 2025-10-30 15:04:56 · 1181 阅读 · 0 评论 -
队列+BFS专题总结:树都快忘了,4题还是全AC了
这篇文章总结了队列和BFS在树结构中的应用,通过4道LeetCode题目的实战演练,展示了层序遍历的核心思路和常见技巧。文章从N叉树的基础结构讲起,详细解释了如何通过队列实现分层处理,并针对不同类型的层序遍历问题(如锯齿形遍历、计算最大宽度)给出了具体解决方案。关键点包括:使用q.size()固定当前层节点数、二叉树编号技巧计算包含null的宽度、以及模板化思维处理BFS变形问题。最终作者成功实现了4道题目的全AC,并总结出通用的BFS解题框架。原创 2025-10-22 23:19:49 · 1125 阅读 · 0 评论 -
栈专题总结:从模拟操作到解题思维
本文记录了栈专题的学习过程,通过5道典型题目总结了栈的应用场景和解题技巧。主要收获包括:1)用字符串模拟栈操作;2)处理运算优先级时加减法入栈、乘除法即时计算;3)嵌套结构使用双栈处理;4)验证栈序列的模拟方法。重点强调了手动模拟的重要性,并总结了常见错误点(栈非空判断、索引移动、短路求值顺序)。文章提供了栈的典型应用场景分类和核心代码模板,帮助读者掌握栈这一数据结构的解题思维。原创 2025-10-21 15:18:23 · 945 阅读 · 0 评论 -
字符串专题总结:从模拟运算到模板掌握
本文总结了字符串专题的学习过程,重点掌握三个核心概念:1)字符串比较的横向/纵向方法;2)回文串处理的中心扩散法;3)大数运算的模拟技巧。作者通过4道典型题目实践,详细记录了字符转换、索引判断等易错点,并提炼出核心模板。特别强调大数运算需要模拟手工计算过程,注意字符与数字转换方向(字符转数字减,数字转字符加)和索引判断的边界条件。文章以问题导向的方式呈现学习路径,对字符串处理的常见陷阱和解题思路进行了系统梳理。原创 2025-10-20 18:24:01 · 822 阅读 · 0 评论 -
哈希表专题总结:从困惑到掌握容器选择
本文总结了哈希表的学习和应用过程。作者通过4天分散学习,完成了8道哈希表相关题目,涵盖基础哈希和前缀和+哈希表两类题型。学习过程分为三个阶段:最初对哈希表仅停留在概念层面;中期在实践中踩坑,遇到容器选择、数组比较等问题;后期终于理解哈希表本质是空间换时间,掌握其三种主要用途(判断存在性、统计频次、分组)及对应容器选择原则。文中详细分析了典型题目解法,如两数之和的哈希优化、字符重排的数组模拟技巧等,并总结了常见错误和模板代码。最终作者建立起哈希表应用的决策树,从困惑到掌握这一重要数据结构。原创 2025-10-19 13:15:51 · 566 阅读 · 0 评论 -
分治算法-归并排序专题:从性能优化到索引数组的突破
本文总结了归并排序的核心算法及其在统计类问题中的应用。通过4道编程题(排序数组、逆序对、右侧更小元素、翻转对),深入探讨了归并排序的分治思想、性能优化技巧以及索引数组等关键概念。重点分析了归并排序与快速排序的差异,归纳了统计类问题的两类处理策略(合并统计和分步统计),并详细记录了5个典型错误案例(包括性能优化、边界条件和统计逻辑混淆等)。文章特别强调了索引数组这一重要技巧,它能够有效解决排序过程中的元素追踪问题。通过实践-错误-修正的过程,展示了如何从算法原理转化为实际代码实现。原创 2025-10-18 20:59:43 · 898 阅读 · 0 评论 -
分治算法_快速排序专题总结-----分治
本文总结了分治算法中的快速排序专题,在1天内完成4道相关题目并全部通过。主要内容包括: 分治算法核心:介绍分治三要素(分、治、合)及其适用条件,对比快速排序、归并排序和二分查找的分治方式。 快速排序优化:讲解传统快排的问题,提出随机基准+三块划分的优化方案,通过荷兰国旗问题演示三指针法的实现细节。 题目详解: 颜色分类(三指针分区) 快速排序(随机基准+三块划分) 数组第K大元素(快速选择优化) 最小K个数(返回值处理差异) 关键收获:掌握快速选择算法将时间复杂度从O(nlogn)优化到O(n)的核心思想,原创 2025-10-16 16:34:30 · 775 阅读 · 0 评论 -
模拟算法专题总结:直接按题意实现的艺术
模拟算法专题总结 核心要点 模拟算法特点:直接按照题目描述实现逻辑,不依赖复杂算法技巧,重点在于理解题意和细节处理 典型解题步骤: 明确题目要求 分析输入输出边界 设计模拟过程 处理特殊情况 常见模拟类型: 字符串处理(替换问号、外观数列) 时间区间模拟(提莫攻击) 状态转换模拟(Z字变换、数青蛙) 关键技巧: 边界条件检查 状态变量管理 字符串拼接优化 易错点: 运算符混淆(= vs ==) 数组越界 状态切换时机 模拟算法强调代码实现能力,需要培养对题目细节的敏感度和处理边界条件的能力。原创 2025-10-15 15:07:47 · 817 阅读 · 0 评论 -
二分查找专题总结:从数组越界到掌握“两段性“
本文总结了二分查找算法的学习经验,重点分析了常见错误与解题技巧。作者通过3天时间刷完9道二分题,将题目分为标准二分、边界二分和旋转数组三类。核心内容包括:1)二分查找前提条件(有序或两段性);2)两种模板(标准查找和边界查找)的区别与应用;3)五个典型错误(循环条件、整型溢出、搜索条件、数组越界、边界遗漏)。特别强调"两段性"概念在旋转数组问题中的重要性,并提供了通用代码框架。文章通过具体错题分析,如LeetCode 704的标准二分错误和LeetCode 69的整型溢出问题,深入剖析了原创 2025-10-14 15:39:58 · 927 阅读 · 0 评论 -
位运算专题总结:从变量初始化陷阱到理解异或分组
位运算专题总结:从变量初始化陷阱到理解异或分组 核心内容总结 本文系统总结了位运算的5大核心应用和8类常见错误。通过10道典型题目,作者深入分析了位运算的关键技巧: 五大经典应用 位图思想:用整数的位代替数组 异或消消乐:找唯一出现元素 异或分组:分离两个不同元素 位计数法:统计每位出现次数 位运算加法:模拟硬件加法过程 八大常见错误 数组索引越界 位运算未赋值 循环变量被修改 整型数值溢出 变量初始化不全 索引与值混淆 循环范围错误 位判断条件错误 实用技巧 n & (n-1)清除最低位1 异或的原创 2025-10-14 15:09:38 · 646 阅读 · 0 评论 -
前缀和专题总结:从哈希表的疑惑到理解2D索引映射
前缀和算法总结 前缀和是一种用于高效计算数组区间和的预处理技术,主要分为一维和二维两种形式。核心思想是预先计算并存储前i项的和,将区间查询转化为两次取值运算,时间复杂度从O(n)降至O(1)。 核心公式: 一维:sum[l,r] = dp[r+1] - dp[l] 二维:sum = dp[x2+1][y2+1] - dp[x1][y2+1] - dp[x2+1][y1] + dp[x1][y1] 三大应用场景: 基础区间和查询(数组存储) 特定子数组统计(配合哈希表) 二维矩阵区域和计算 典型题目: 基础:原创 2025-10-14 15:07:26 · 729 阅读 · 0 评论 -
双指针专题总结:9道题踩过的坑
用两个变量(left和right)指向数组的不同位置,通过移动它们来解决问题。两个指针怎么初始化?两个指针怎么移动?什么时候停止?这是我最常犯的错误!// ❌ 错误写法:if(right!= 0) // right是索引target = -c // c是索引while(hash[right] > 1) // right是索引// ✅ 正确写法:= 0) // nums[right]是值target = -nums[c] // nums[c]是值。原创 2025-10-08 09:45:18 · 950 阅读 · 0 评论 -
滑动窗口专题总结:从懵逼到掌握valid计数器
摘要:滑动窗口算法学习总结 用3天时间完成8道滑动窗口题目,全部AC。总结出两种滑动窗口类型:可变窗口(求最长/最短子数组)和固定窗口(异位词问题)。重点掌握窗口扩张/收缩条件判断,以及valid计数器的使用技巧。典型题目包括无重复字符的最长子串(LeetCode 3)和最小覆盖子串(LeetCode 76)。在实现时需注意索引与值的区分,以及结果更新时机(求最长在while外,求最短在while内)。通过模板化练习,已能识别并解决常见错误。原创 2025-10-08 09:43:30 · 1072 阅读 · 0 评论
分享