[LeetCode] 系统刷题5_Dynamic Programming

Dynamic Programming 实际上是[LeetCode] 系统刷题4_Binary Tree & Divide and Conquer的基础上,加上记忆化的过程。就是说,如果这个题目实际上是类似于Divide and conquer或者说是DFS,但是在计算过程中有很多重复计算同样的过程的话,那么就可以用Dynamic prgramming/记忆化搜索来完成。基本就是利用空间来简化时间复杂度的过程。

可以/很有可能使用Dynamic programming的条件,满足之一即可。

1. Maximum/Minimum

2. Yes/No. True/False

3. Count(*)

一定不是Dynamic programming的条件,满足之一即可。

1. all 具体方案。

2. input是集合或者跟position无关。

3. move 4 directions in 二维数组。(或者说不是固定方向,有可能会有循环)

动态规划4要点:

1. 状态 state

mem[i][j] 代表什么,ex. 代表s1前i个characters和s2前j个characters。

2. Function

mem[i][j] = mem[i - 1][j] if ****

3. Initialize

usually mem[0][0]  / mem[i][0]/ mem[0][j]

4. 答案

mem[n]/mem[n - 1]/mem[m][n]

在这里将Dynamic programming分为几类。

1. 矩阵Dynamic programming/Matrix DP

state: mem[i][j] 走到坐标(x, y) 的状态。

[LeetCode] 120. Triangle _Medium tag: Dynamic Programming

[LeetCode] 64. Minimum Path Sum_Medium tag: Dynamic Programming

[LeetCode] 62. Unique Paths_ Medium tag: Dynamic Programming

[LeetCode] 63. Unique Paths II_ Medium tag: Dynamic Programming

2. Sequence DP

state: mem[i] 前i个位置

mem 的length 设为n

[LeetCode] 70. Climbing Stairs_ Easy tag: Dynamic Programming

[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming

[LeetCode] 45. Jump Game II_ Hard tag: Dynamic Programming

3. 分割DP

state: mem[i] 前i个character 是否可行

mem 的length 设为n + 1,因为要考虑到前0个character,也就是empty string。

[LeetCode] 132. Palindrome Partitioning II_ Hard tag: Dynamic Programming

[LeetCode] 139. Word Break_ Medium tag: Dynamic Programming

4. Two sequences DP

state: mem[i][j] 表明s1的前i个characters, 配上s2的前j 个characters。

mem 的length 设为(n + 1)* (m + 1),因为要考虑到前0个character,也就是empty string。

需要初始化 mem[i][0], mem[0][j]

[LintCode] 77. Longest common subsequences_ Medium tag: Dynamic Programming

[LeetCode] 72. Edit Distance_hard tag: Dynamic Programming

[LeetCode] 115. Distinct Subsequences_ Hard tag: Dynamic Programming

[LeetCode] 97. Interleaving String_ Hard tag: Dynamic Programming

原文地址:https://www.cnblogs.com/Johnsonxiong/p/10793639.html

时间: 2024-10-12 17:40:10

[LeetCode] 系统刷题5_Dynamic Programming的相关文章

[LeetCode] 系统刷题1_代码风格及边界

代码风格 说自己不清楚的算法,比如KMP,如果解释不清楚或者写不出来的算法建议不提 注意代码的缩进以及空格的合理运用,使得代码看起来比较整洁有条理 注意边界的条件以及越界 误区: 算法想出来还仅仅不够 算法写出来也还不够 试着从面试官的角度来思考: 面试官需要多少时间review你的代码 你的coding习惯好吗 你的沟通能力怎么样 coding风格(缩进,括号,变量名) coding习惯(异常检查,边界处理) 沟通 测试(主动写出合理的test case)很重要 问自己: 你做题之前, 先在白

[LeetCode] 系统刷题6_Linked List

1. Dummy Node 2. Basic skills [LeetCode] 206. Reverse Linked List_Easy tag: Linked List 2. Fast slow pointers 原文地址:https://www.cnblogs.com/Johnsonxiong/p/10793769.html

[LeetCode] 系统刷题8_Data Structure

Linear data structure Queue          used for BFS most of time O(1) for push O(1) for Pop O(1) for Top Stack O(1) for push O(1) for pop O(1) for top [LeetCode] 155. Min Stack_Easy tag: stack [LeetCode] 232. Implement Queue using Stacks_Easy tag: stac

LeetCode的刷题利器(伪装到老板都无法diss你没有工作)

在工程效率大行其道的今天,如果不会写点代码以后也不容易在测试圈混下去.今天给大家推荐一个LeetCode的刷题利器,可以伪装到连你老板在这里走过去都无法确认你是在干活呢,还是在干活呢. LeetCode是什么 leetcode是个题库,里面有很编程多面试的题目,可以在线编译运行.难度比较高.如果自己能都做出来,对面大公司很有帮助. 网址:https://leetcode.com/(如果对英文页面不爽的可以访问对应的中文页面:https://leetcode-cn.com/) 如果想在上面训练,首

LeetCode开心刷题五十一天——118. Pascal's Triangle 接触跳转表概念,不知用处 lamda逗号导致表达式加法奇怪不理解119. Pascal's Triangle II

118. Pascal's Triangle Easy 87984FavoriteShare Given a non-negative integer numRows, generate the first numRows of Pascal's triangle. In Pascal's triangle, each number is the sum of the two numbers directly above it. Example: Input: 5 Output: [ [1],

LeetCode开心刷题十三天——24

习惯就是人生的最大指导 ——休谟 24. Swap Nodes in Pairs Medium 1209107FavoriteShare Given a linked list, swap every two adjacent nodes and return its head. You may not modify the values in the list's nodes, only nodes itself may be changed. 防止用增加值,存储前后变量只进行值交换,而不处理

LeetCode开心刷题五十六天——128. Longest Consecutive Sequence

最近刷题进展尚可,但是形式变化了下,因为感觉眼睛会看瞎,所以好多写在纸上.本来想放到文件夹存储起来,但是太容易丢了,明天整理下,赶紧拍上来把 今晚是周末,这一周都在不停的学学学,我想下周怕是不能睡午觉了,中午回去床对我的诱惑太大了,我得想办法,一进门先把被褥收起来,再放个欢快的歌,中午少吃点,加油小可爱 之前欠下的烂帐,把太多简单题做完,导致剩下的都是难题,所以万万记住一点捷径都不要走 128看花花酱大神的解法,发现对hashtable的了解十分不足,甚至一些常见函数都不知道是干什么的 这道题涉

LeetCode丨刷题历程及总结

历程 花一周左右阅读了Problem Solving with Algorithms and Data Structures Using Python,用Python实现各类数据结构和算法.此书的中文版. 2019/11/26-2020/2/2,开始刷LeetCode,按标签,通过率从高到低开始,完成218题,对标签重新归纳. 接下来整理之前做过的题目,归纳知识点和模板,还未开始. 标签整理 数据结构 数组 字符串 链表 树 字典树/二叉搜索树 线段树/线状数组 栈/队列 堆 图 拓扑排序 哈希

LeetCode日常刷题

[1] 125. 验证回文串[简单] 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false class Solution: def isPalindrome(self, s: str) -> bool: # 回文串,