动态规划——最长公共子序列与最长公共子串 (含Python实现代码) 英文名称: 最长公共子序列 Longest Common Subsequence 最长公共子串 Longest Common Substring 主要区别:子串必须要连续,子序列不需要 举例: a b c d e f b 和 a ...
分类:
编程语言 时间:
2020-07-08 15:13:41
阅读次数:
78
方法一: 动态规划 (O(n)) class Solution { public int lengthOfLIS(int[] nums) { int n = nums.length; if(n < 2) return n; int[] dp = new int[n+1]; // dp[i] : 以第 ...
分类:
其他好文 时间:
2020-07-08 13:12:25
阅读次数:
53
32. 最长有效括号 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 分析: ? 本题可以用动态规划解决。 ...
分类:
其他好文 时间:
2020-07-07 19:44:04
阅读次数:
63
知识点:动态规划、单调栈 LeetCode第八十五题:https://leetcode-cn.com/problems/maximal-rectangle/submissions/ 有些题目是真的难,比如这题,答案都不一定抄的明白。 语言:GoLang // 结合LeetCode 84题,逐行计算。 ...
分类:
其他好文 时间:
2020-07-07 13:03:19
阅读次数:
61
动态规划类问题主要分为两大类: 1.求最优解(典型的背包问题) 2.计数(统计方案) 以上两类都存在递推性质。 第一类的递推称为最优子结构 -- 当前问题的最优解取决于子问题的最优解。 当前问题的方案数取决于子问题的方案数时,也可以用动态规划解决。 第二类例子: 机器人走方格(leetcode63. ...
分类:
其他好文 时间:
2020-07-06 09:13:38
阅读次数:
54
动态规划问题的一般形式就是求最值。最显著的特点是最优子结构和重叠子问题。最优子结构就是子问题的最优解,可以从子问题的最优结果推出更大规模问题的最优结果,可以用状态转移方程描述问题。重叠子问题可以通过创建备忘录dp[]避免重复计算。 零钱兑换的解题步骤: 1)先确定状态,也就是原问题和子问题中变化的变 ...
分类:
其他好文 时间:
2020-07-05 23:27:16
阅读次数:
108
思路 两个数组或者字符串进行比较,本质上是一种枚举,而减少枚举次数的有效方法是使用动态规划。 用一个二维数组记录状态变化,dp[i][j]表示Si和Pj是否匹配。(Si表示字符串中前 i 个字符长度的子字符串,Pj同理) 状态方程: 代码 class Solution { public boolea... ...
分类:
其他好文 时间:
2020-07-05 22:47:25
阅读次数:
63
101. 对称二叉树 描述: 思路: 递归。考虑左子树的最右节点和右子树的最左节点对称。 102. 二叉树的层序遍历 描述: 思路:递归。维护一个List<List<Node>> (List.get(迭代次数).add(xxxx)) 103. 二叉树的锯齿形层次遍历 描述: 思路:递归。先右再左。 ...
分类:
其他好文 时间:
2020-07-05 22:45:46
阅读次数:
58
1.回溯法 回溯法的基础题目类型就是子集树和排列树,掌握最基础的模板,那么其它的题目都可以在此上变形得到,子集树即如下图所示: 同一个元素不能被选入多次,子集树的算法模板为 1 void Backtrack(int t) { //t 表示当前是树的第t层,即对集合 S 中的第 t 个元素进行判断 2 ...
分类:
其他好文 时间:
2020-07-05 19:32:17
阅读次数:
72
维特比算法 一种动态规划算法(动态规划 Dynamic Programming,是运筹学的一个分支,是求解决策过程最优化的过程。) 用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列 特别是在马尔可夫信息源上下文和隐马尔可夫模型中 ...
分类:
编程语言 时间:
2020-07-05 19:21:28
阅读次数:
67