动态规划
六种鱼
这个作者很懒,什么都没留下…
展开
-
LintCode 吹气球
有n个气球,编号为0到n-1,每个气球都有一个分数,存在nums数组中。每次吹气球i可以得到的分数为 nums[left] * nums[i] * nums[right],left和right分别表示i气球相邻的两个气球。当i气球被吹爆后,其左右两气球即为相邻。要求吹爆所有气球,得到最多的分数。样例 给出 [4, 1, 5, 10] 返回 270nums = [4, 1, 5, 10] burs原创 2017-07-11 10:52:32 · 1282 阅读 · 0 评论 -
LintCode 正则表达式匹配
实现支持’.’和’*’的正则表达式匹配。‘.’匹配任意一个字母。‘*’匹配零个或者多个前面的元素。匹配应该覆盖整个输入字符串,而不仅仅是一部分。需要实现的函数是:bool isMatch(const char *s, const char *p)样例 isMatch(“aa”,”a”) → falseisMatch(“aa”,”aa”) → trueisMatch(“aaa”,”aa”) → fa原创 2017-09-12 15:02:30 · 244 阅读 · 0 评论 -
LintCode 通配符匹配
参考资料 判断两个可能包含通配符“?”和“*”的字符串是否匹配。匹配规则如下:‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。两个串完全匹配才算匹配成功。函数接口如下: bool isMatch(const char *s, const char *p)一些例子:isMatch(“aa”,”a”) → false isMatch(“aa”,”aa”) → true原创 2017-09-07 18:00:40 · 266 阅读 · 0 评论 -
算法导论第15章练习题 15.4-4
说明如何仅用表c中的2·min(m,n)项以及O(1)的额外空间来计算一个LCS的长度。然后说明如何用min(m,n)项以及O(1)的额外空间来做到这一点。1、两行数组,第一个存储上一行的c[i,j],第二个存储当前行的c[i,j]。最开始第一行数组初始化为0. c表最左侧一列 全为0,不需要用存储空间,当做已知条件就好。2、只用一行数组+1的存储空间。a[0.....n]原创 2017-07-04 14:35:40 · 1350 阅读 · 0 评论 -
算法导论第15章练习题 15.4-5
15.4-5设计一个O(n²)时间的算法,求一个n个数的序列的最长单调递增子序列。第一种:对序列进行排序,排序之后得到序列b与原来的序列a,求最长公共子串。(排序之前先将原来序列中的重复元素删掉(保证公共子串递增)b中无重复元素,a保持原来不变) 第二种:def longestIncreasingSubsequence(self, nums): # write y原创 2017-07-04 17:19:05 · 2778 阅读 · 0 评论 -
LintCode 栅栏染色
题目描述:我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。必须保证最多只有两个相邻的柱子颜色相同,求有多少种染色方案。 样例:n = 3, k = 2, return 6 post 1, post 2, post 3 way1 0 0 1 way2 0 1 0 way3 0 1 1 way4 1 0 0 way5 1 0 1 way6 1 1 0动态原创 2017-07-05 14:49:01 · 264 阅读 · 0 评论 -
LintCode 单词切分
给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。给出s = “lintcode”dict = [“lint”,”code”]返回 true 因为”lintcode”可以被空格切分成”lint code”动态规划。第一种: dp[i]表示前i个字符能否被切分。前i个字符能否被切分依赖于下面所述: 如果前i-1个字符能被切分,而且第i个字符在dict中,则d原创 2017-07-07 11:17:42 · 773 阅读 · 0 评论 -
LintCode 二叉树中的最大路径和
给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和) 样例 给出一棵二叉树: 1 / \ 2 3返回 6动态规划。 任意节点开始,任意节点结束。 考虑对于任意节点,包含该节点及其子树而构成的路径的最大和有以下几种:其左子树的最大路径+右子树的最大路径+其本身(三者均为正数)。其左子树的最大路径+其本身(原创 2017-07-08 13:18:31 · 806 阅读 · 0 评论 -
LintCode 交叉字符串
给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。样例 比如 s1 = “aabcc” s2 = “dbbca”- 当 s3 = "aadbbcbcac",返回 true.- 当 s3 = "aadbbbaccc", 返回 false.动态规划 dp[i,j]表示s1的前i个字符与s2的前j个字符能否交叉构成s3的前(i+j)个字符。 对于s3中的第i+j个字符,有以下几原创 2017-07-11 09:23:08 · 850 阅读 · 0 评论 -
获得递增子序列的个数
给定一个数n,和一个含n个数的序列,求出本质不同的上升子序列的个数。例如: n=6,{3,1,2,1,3,4} 本质不同的上升子序列共有11种: {3,4} {1,2} {1,3} {1,4} {2,3} {2,4} {1,2,3} {1,2,4} {1,3,4} {2,3,4} {1,2,3,4}这是一道笔试题,同学笔试时候让我帮着做,知道用动态规划做,但是还是没做出来,原创 2017-09-29 11:00:33 · 5841 阅读 · 2 评论