leetcode_动态规划
东大梅西
这个作者很懒,什么都没留下…
展开
-
LintCode 436 · Maximal Square(最大正方形)
题目描述直觉动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public int maxSquare(int[][] matrix) { int m = matrix.length; int n = matrix[0].length; int[][] f = new int[m][n]; int res原创 2021-06-26 10:39:54 · 61 阅读 · 0 评论 -
LintCode 622 · Frog Jump(青蛙跳)
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划四:计算顺序Java代码实现 public boolean canCross(int[] stones) { int n = stones.length; boolean[][] f = new boolean[n][n]; f[0][0] = true; List<Integer>原创 2021-06-25 21:23:43 · 132 阅读 · 2 评论 -
字典树例题 LintCode623 · K步编辑
题目描述题目分析字母树动态规划组成部分一:确定状态动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 char[] tar = null; int K = 0; int n = 0; List<String> res = null; public List<String> kDistance(String[] words, String target, int k) {原创 2021-06-24 14:06:51 · 142 阅读 · 0 评论 -
背包问题变种 LintCode89 k Sum(K数之和)
题目描述题目分析动态规划组成部分一:确定状态动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public int kSum(int[] A, int K, int target) { int len = A.length; int[][][] f = new int[len + 1][K + 1][target + 1]; f[0][0][0] = 1;原创 2021-06-22 00:40:32 · 149 阅读 · 0 评论 -
LintCode91 Minimum Adjustment Cost(最小调整代价)
题目描述动态规划组成部分一:确定状态设修改后的数组为B。最后一步:将A改成B,A[n-1]改成X,这一步代价是|A[n-1]-X|。-需要确保|X-B[n-2]|<=target前面n-1个元素A[0…n-2]改成B[0…n-2],需要知道最小代价,并确保B[0…n-2]中任意两个相邻的元素的差不超过target但是有一个问题,改A[n-1]时不知道B[n-2]是多少只有知道了B[n-2],才能确定A[n-1]能改成(B[n-2]-target,B[n-2]+target)原创 2021-06-21 23:46:06 · 227 阅读 · 1 评论 -
类多重背包问题例题 Lintcode668 Ones and Zeroes(一和零)
题目描述动态规划组成部分一:确定状态动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public int findMaxForm(String[] strs, int m, int n) { int len = strs.length; int[] zero = new int[len]; int[] one = new int[len]; char[原创 2021-06-21 18:48:07 · 71 阅读 · 0 评论 -
双序列型动态规划例题6 Lintcode192 (通配符匹配)Wildcard Matching
题目描述动态规划组成部分一:确定状态动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public boolean isMatch(String s, String p) { int m = s.length(); int n = p.length(); char[] ch1 = s.toCharArray(); char[] ch2 = p.toC原创 2021-06-21 11:17:54 · 83 阅读 · 0 评论 -
双序列型动态规划例题5 Lintcode154 (正则表达式匹配)Regular Expression Matching
题目描述动态规划组成部分一:确定状态子问题动态规划二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public boolean isMatch(String s, String p) { int m = s.length(); int n = p.length(); char[] ch1 = s.toCharArray(); char[] ch2 = p.toCh原创 2021-06-20 16:37:56 · 79 阅读 · 0 评论 -
双序列型动态规划例题4 Lintcode118 (不同的子序列)Distinct Subsequence
题目描述题目分析动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况注意:这里的f[i][0]=1不是凭空设置的,而是根据实际情况和转移方程计算出来的,这是一个初始条件。动态规划组成部分四:计算顺序Java代码实现 public int numDistinct(String S, String T) { int m = S.length(); int n = T.length();原创 2021-06-18 15:56:39 · 66 阅读 · 0 评论 -
双序列型动态规划例题3 Lintcode119 (编辑距离)Edit Distance
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现: public int minDistance(String word1, String word2) { int m = word1.length(); int n = word2.length(); char[] ch1 = word1.toCharArray(原创 2021-06-18 14:21:18 · 88 阅读 · 0 评论 -
双序列型动态规划例题2 Lintcode29 Interleaving String
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public boolean isInterleave(String s1, String s2, String s3) { int m = s1.length(); int n = s2.length(); if (m + n != s3.length())原创 2021-06-18 12:50:07 · 68 阅读 · 0 评论 -
双序列型动态规划例题1 Lintcode77Longest Common Subsequence
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现: public int longestCommonSubsequence(String A, String B) { int m = A.length(); int n = B.length(); char[] a = A.toCharArray(); char[] b = B.t原创 2021-06-17 21:21:19 · 108 阅读 · 0 评论 -
Hard!168 · 吹气球
题目描述有n个气球,编号为0到n-1,每个气球都有一个分数,存在nums数组中。每次吹气球i可以得到的分数为 nums[left] * nums[i] * nums[right],left和right分别表示i气球相邻的两个气球。当i气球被吹爆后,其左右两气球即为相邻。要求吹爆所有气球,得到最多的分数。注意:你可以假设nums[-1] = nums[n] = 1。-1和n位置上的气球不真实存在,因此不能吹爆它们。0 ≤ n ≤ 500, 0 ≤ nums[i] ≤ 100样例样例1样例2原创 2021-06-10 17:26:49 · 113 阅读 · 0 评论 -
Hard! lintcode430 · 攀爬字符串
题目描述给定一个字符串 s, 将其递归地分割成两个非空子字符串, 然后可以得到一棵二叉树.下面是 s = “great” 可能得到的一棵二叉树:在攀爬字符串的过程中, 我们可以选择其中任意一个非叶节点, 交换该节点的两个子节点.例如,我们选择了 “gr” 节点, 并将该节点的两个子节点进行交换, 并且将祖先节点对应的子串部分也交换, 最终得到了 “rgeat”. 我们认为 “rgeat” 是 “great” 的一个攀爬字符串.类似地, 如果我们继续将其节点 “eat” 和 “at” 的子节点交原创 2021-06-09 13:48:18 · 98 阅读 · 0 评论 -
背包问题总结(1到10)
背包问题一直都是动态规划中的经典题目,下面通过这篇博文,系统的梳理一下解决背包问题的思路和要点;主要是好记性不如烂笔头嘛,怕自己忘得快,还能翻出来这篇文章来复习一下(注:本文的所有解决思路均为动态规划,不涉及贪心法等算法)三种背包的概念区分首先,背包问题的题型逃不出三种,那就是01背包问题、完全背包问题和多重背包问题,我们先来了解一下这三种题型的区别在哪里01背包(ZeroOnePack)有N件物品和一个容量为V的背包。每种物品均只有一件。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装原创 2021-04-11 20:30:13 · 596 阅读 · 2 评论 -
leetcode_动态规划_入门总结
四个组成部分确定状态研究最优策略的最后一步化为子问题转移方程根据子问题定义直接得到初始条件和边界情况细心,考虑周全计算顺序利用之前的计算结果通常一维从小到大,二维从上到下、从左到右...原创 2021-03-22 22:47:54 · 144 阅读 · 0 评论