动态规划
文章平均质量分 74
HankingHu
这个作者很懒,什么都没留下…
展开
-
动态规划(篇2)最长递增子序列(LIS)
最长增加子序列(LIS)问题是找到给定序列的最长子序列的长度,使得子序列的所有元素以增加的顺序排序。例如,{10,22,9,33,21,50,41,60,80 }的LIS的长度为6,LIS为 {10,22,33,50,60,80}。最优子结构: 令arr [0..n-1]是输入数组,L(i)是以 i 结束的LIS的长度,使得arr [i]是LIS的最后一个元素。 然后,L(i)可以递归地写为:原创 2017-03-14 10:09:40 · 15231 阅读 · 0 评论 -
经典算法--最大存水量问题
题目:给出一个数组代表围柱的高度,求能围柱的最大的水量,例如数组{ 5,2,3,2,4 },最大水量为5。如下图:黄色部分为围柱,绿色部分是能够围住的水,图中围柱的高度依次为 5,2,3,2,4最多能围住的水量是5。 思路:求出每个柱子上面原创 2017-04-29 20:09:17 · 9754 阅读 · 5 评论 -
笔试面试算法经典--动态规划-最大子矩阵和(Java)
【题目】 给定一个矩阵 matrix,其中矩阵中的元素可以包含正数、负数、和0,返回子矩阵的最大累加和。例如,矩阵 matrix 为: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 拥有最大和的子矩阵为: 9 2 -4 1 -1 8 其和为15。原创 2017-04-12 17:36:20 · 7702 阅读 · 2 评论 -
笔试面试算法经典--连续子数组的最大乘积及连续子数组的最大和(Java)
1. 子数组的最大和 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如数组:arr[]={1, 2, 3, -2, 4, -3 } 最大子数组为 {1, 2, 3, -2, 4} 和为8。解法1(时间复杂度O(N * N)空间复杂度O(1)) 求出所有的子数组的和,比较选择出最大值。利用双重循环就可以遍历到所原创 2017-04-12 16:31:33 · 5516 阅读 · 0 评论 -
笔试面试算法经典--矩阵的最短路径和(Java)
题目 给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。 例子: 给定m如下: 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 路径1,3,1,0,6,1,0是所有路径中路径和最小的,所以返回12。解法1思路:使用动态规划,定义 dp[M][N] , M ,原创 2017-04-07 17:11:17 · 16898 阅读 · 0 评论 -
动态规划(篇1)重叠子问题
动态规划是一种算法范例,通过将其分解为子问题来解决给定的复杂问题,并存储子问题的结果,以避免再次计算相同的结果。 以下是一个问题的两个主要属性,表明给定的问题可以使用动态规划来解决。 在这篇文章中,我们将详细讨论第一个属性(重叠子问题)。动态规划的第二个属性在下一篇文章即动态规划篇2中讨论。1)重叠子问题 2)最佳子结构 1)最佳子结构像分治法一样,动态规划包含了对子问题的解决。动态规划原创 2017-03-14 09:23:55 · 6520 阅读 · 1 评论 -
动态规划(篇3)最长公共子序列(LCS)
LCS问题陈述: 给定两个序列,找出它们中存在的最长子序列的长度。子序列是以相同的相对顺序出现但不一定是连续的序列。例如,“abc”,“abg”,“bdf”,“aeg”,“acefg”,…等是“abcdefg”的子序列。因此,长度为n的串具有2 ^ n个不同的可能子序列。 示例: 用于输入序列的LCS“ABCDGH”和“AEDFHR”是长度为3的“ADH”。 用于输入序列的LCS“AGGT原创 2017-03-14 15:37:22 · 2825 阅读 · 0 评论 -
Levenshtein distance最小编辑距离算法实现
动态编程| (编辑距离) 给定两个字符串str1和str2以及可以对str1执行的操作。找出将“str1”转换为“str2”所需的最小编辑次数(操作)。插入删除代替所有上述操作具有相等的成本。例子:输入:str1 =“geek”,str2 =“gesek” 输出:1 我们可以通过插入一个's'将str1转换为s原创 2017-03-13 22:10:03 · 4073 阅读 · 3 评论 -
笔试面试算法经典--最长公共子串(Longest Common SubString)
最长公共子串(Longest Common Substring): 是指两个字符串中最长连续相同的子串长度。例如:str1=“1AB2345CD”,str2=”12345EF”,则str1,str2的最长公共子串为2345。解法1如果 str1 的长度为 N,str2 的长度为 M,生成大小为 N*M 的 数组 dp , dp[i][j]表示 str1[0…i] 与 str2[0…j] 的最长公原创 2017-04-06 20:53:09 · 41544 阅读 · 8 评论