Skip to content

【0321_Week 08】学习总结 #1266

@WindBruce

Description

@WindBruce

递归、分治、动态规划

  • 递归

    • 自己调用自己

    • 代码模板

      public void recur(int level, int param) {
      //1、 terminator  终止条件
          if (level > MAX_LEVEL) {
      //2、 process result 处理过程
          return;
          }
      //3、 process current logic  处理当前逻辑
      	process(level, param);
      //4、 drill down     下沉,进入下层
      	recur(level: level + 1, newParam);
      //5、 restore current status  清理值状态
      }
  • 分治

    • 分而治之 Divide & Conquer

    • 思路

      • 寻找最近最简方法,拆解为可重复问题
      • 数学归纳法思维
    • 本质 :寻找重复性

  • 动态规划 DP

    • 理解:即动态递推, 寻找递推方程、递推公式

    • 模式:顺推,动态递推,缓存中间值

    • 常见问题及递推公式

      • 不同路径

        f(x, y) = f(x-1, y) + f(x, y-1)

      • 爬楼梯

        f(n) = f(n - 1) + f(n - 2) , f(1) = 1, f(0) = 0

      • 打家劫舍

        dp[i]状态的定义max $ of robbing A[0 - > i]
        dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])
        
        dp[i][0]状态定义max  $  of robbing A[0 - > i] 且没偷 nums[i]
        dp[i][1]状态定义max  $  of robbing A[0 - > i] 且偷了 nums[i]
        dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
        dp[i][1] = dp[i - 1][0] + nums[i];

      • 最小路径和

        dp[i][j]状态的定义minPath(A[1 - > i][1 -> j])
        dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + A[i][j]
      • 最小路径和

      • 股票买卖

高级动态规划

即高级DP,复杂DP

字符串

  • 基础知识

    • 定义
    • 遍历
    • 比较
  • 基础问题

    • 字符串操作问题

    • Anagram异位词问题

    • 回文串问题

  • 高级问题及算法

    • 最长子串、子序列
    • 字符串 + 递归 or DP
  • 字符串匹配算法

    • 暴力法

    • Rabin-Karp 算法

    • KMP 算法

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions