介绍了多种算法题的小技巧,包括脑筋急转弯题目、常用位操作、游戏中的随机算法、阶乘的尾零个数、高效寻找素数、模幂运算、寻找缺失和重复元素的方法,以及几个反直觉的概率问题。
通过多个实例(如跳跃游戏、加油站、区间调度等问题)详细讲解了贪心算法的原理、贪心选择性质,以及区间问题的常见解决思路和技巧。
总结了多个经典的动态规划问题,涵盖了从二维路径规划、图论最短路径、正则表达式匹配,到博弈论和区间动态规划等多个类型。
系统讲解了 0-1 背包、完全背包及其变种问题(如子集划分、零钱兑换、目标和)的动态规划解法,涵盖状态定义、转移方程、优化技巧及与回溯算法的关系,掌握背包问题的通用思路。
这篇文章深入剖析了动态规划中的细节问题,包括 base case 的设定、备忘录初始值的选择、边界处理、穷举视角的切换、空间压缩技巧以及遍历顺序的确定,帮助读者从多个维度理解和掌握动态规划的实战技巧与思维方法。
本文深入浅出地讲解了动态规划的核心思想与解题框架,通过斐波那契数列和凑零钱等经典例题,系统阐述了如何确认状态、选择与 dp 数组的定义,并强调了“穷举 + 剪枝”是动态规划的本质。
本文介绍了 BFS 算法的本质以及代码框架,并通过经典问题(如滑动谜题、密码锁等)展示了如何将实际问题抽象为图结构,并利用 BFS 及其优化(如双向 BFS)高效求解最短路径问题。
本文系统讲解了岛屿系列算法问题,核心考点是使用 DFS/BFS 遍历二维矩阵,并解析了不同的变体问题(如封闭岛屿、子岛屿、最大岛屿面积、不同形状的岛屿等)
本文通过「球盒模型」提出回溯算法的两种穷举视角,深入解析排列、组合、子集问题的不同写法,并探讨回溯与 DFS 的关系及代码优化策略,帮助读者更深入地理解和应用回溯算法。
详细介绍了回溯算法的基本概念、框架和应用,特别是通过全排列、数独和N皇后问题的实例,阐明了如何利用回溯算法进行问题求解和优化。
最大流问题是寻找在容量网络中流量最大的可行流,常用算法包括Ford-Fulkerson、Edmonds-Karp和Dinic。Ford-Fulkerson通过增广路径更新残存网络,Edmonds-Karp使用BFS寻找增广路径,而Dinic算法则通过分层图和阻塞流提高效率。最大流问题也可用于解决二分图最大匹配。
Dijkstra算法用于计算最短路径,时间复杂度为O(E log V),而Bellman-Ford算法可处理负权重边,时间复杂度为O(VE)。练习题包括网络延迟时间、最小体力消耗路径和概率最大的路径,均可应用Dijkstra算法及其变体解决。