动态规划解题套路框架
学习计划:
〇、必读文章
1、数据结构和算法学习指南(学习算法和刷题的框架思维)
- 了解数据结构的操作和遍历(迭代or递归)
- 从树刷起,结合框架思维,有利于理解(回溯、动态规划、分治等)

2、动态规划详解(动态规划解题套路框架)
- 过程:递归的暴力解法 -> 带备忘录的递归解法 -> 非递归的动态规划解法
- 特征:重叠子问题-->使用备忘录&自底向上,最优子结构,状态转移方程
- 例题:凑零钱(dp[i] = min(dp[i], 1 + dp[i - coin]))
3、回溯算法详解(修订版)=DFS-----做选择
- 3个问题:参数记录路径、选择列表(做选择和撤销选择)、结束条件
result = []
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择
- 例题:八皇后问题、全排列问题
4、BFS 算法框架套路详解------求最短距离
- 与DFS对比:使用队列,路径短,空间复杂度高
- 问题本质:在图中找起点到终点的最近距离,队列入队访问邻接,记录访问过的
- 例题:二叉树的最小高度(齐头并进,BFS时间复杂度低)、打开密码锁的最少次数(可以使用双向BFS,无需掌握)
- 步骤:
// 计算从起点 start 到终点 target 的最近距离
int BFS(Node start, Node target) {
Queue<Node> q; // 核心数据结构
Set<Node> visited; // 避免走回头路
q.offer(start); // 将起点加入队列
visited.add(start);
int step = 0; // 记录扩散的步数
while (q not empty) {
int sz =

这篇博客详细介绍了多种算法解题的常用模板,包括动态规划的三步解题法、回溯算法的实现、BFS寻找最短路径、滑动窗口在字符串处理中的应用,以及解决股票交易问题的通用策略。同时,还涉及了二分查找、区间问题的处理和Git操作的常用命令。这些模板对于提升算法解题能力非常有帮助。
最低0.47元/天 解锁文章
2436

被折叠的 条评论
为什么被折叠?



