labuladong算法笔记总结

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

动态规划解题套路框架

学习计划:

最长回文子序列

〇、必读文章

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 = 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值