Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.MD

Table of Contents

第六周

第 12 课 | 动态规划

动态规划的实现及关键点

动态规划关键点
  1. 最优子结构 opt[n] = best_of(opt[n - 1],opt[n - 2], ...)
  2. 储存中间状态:opt[i]
  3. 递推公式(美其名曰:状态转移方程或者 DP 方程)
    1. Fib: opt[i] = opt[n - 1] + opt[n - 2]
    2. 二维路径:opt[i, j] = opt[i + 1][j] + opt[i][j + 1](且判断 a[i, j] 是否空地)
参考链接
  1. 递归代码模板
  2. 分支代码模板
  3. 动态规划定义

实战题目解析

作业

中等

  1. 最小路径和

    class Solution:
        def minPathSum(self, grid: [[int]]) -> int:
            for i in range(len(grid)):
                for j in range(len(grid[0])):
                    if i == j == 0:
                        continue
                    elif i == 0:
                        grid[i][j] = grid[i][j - 1] + grid[i][j]
                    elif j == 0:
                        grid[i][j] = grid[i - 1][j] + grid[i][j]
                    else:
                        grid[i][j] = min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j]
            return grid[-1][-1]
  2. 解码方法

  3. 最大正方形

  4. 任务调度器

  5. 回文子串

    class Solution(object):
        def countSubstrings(self, S):
            N = len(S)
            ans = 0
            for center in xrange(2 * N - 1):
                left = center / 2
                right = left + center % 2
                while left >= 0 and right < N and S[left] == S[right]:
                    ans += 1
                    left -= 1
                    right += 1
            return ans

困难

  1. 最长有效括号
  2. 编辑距离
  3. 矩形区域不超过 K 的最大数值和
  4. 青蛙过河
  5. 分割数组的最大值
  6. 学生出勤记录 II
  7. 最小覆盖子串
  8. 戳气球

下周预习

预习题目

  1. 实现 Trie (前缀树)
  2. 单词搜索 II
  3. 岛屿数量
  4. 有效的数独
  5. N 皇后
  6. 单词接龙
  7. 二进制矩阵中的最短路径