随笔分类 -  动态规划

摘要:题目:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 解法:动态规划 代码: class Solution { pub 阅读全文
posted @ 2021-07-22 10:44 for_ward 阅读(38) 评论(0) 推荐(0)
摘要:题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 解法:动态规划 思路:数学符号:dp[i][j]表示s[i-j]是否为回文子串;状态转移方程:按列填表,当i=j时都为true,当j=i+1时,只需判断两个字符是否相等,其他情况dp[i][j]=(dp[ 阅读全文
posted @ 2020-11-20 13:29 for_ward 阅读(95) 评论(0) 推荐(0)
摘要:题目:给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 解法:动态规划 思路:数学符号:dp[i]表示以 1 ... i 为节点组成的二叉搜索树有多少 状态转移方程:假设 n 个节点存在二叉排序树的个数是 dp (n),令 f(i) 为以 i 为根的二叉搜索树的个数,则 dp 阅读全文
posted @ 2020-11-18 17:35 for_ward 阅读(67) 评论(0) 推荐(0)
摘要:题目:把字符串 s 看作是“abcdefghijklmnopqrstuvwxyz”的无限环绕字符串,所以 s 看起来是这样的:"...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....". 现在我们有了另一个字符串 p 。你需要 阅读全文
posted @ 2020-11-18 16:23 for_ward 阅读(105) 评论(0) 推荐(0)
摘要:题目:视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接 阅读全文
posted @ 2020-11-18 12:03 for_ward 阅读(793) 评论(0) 推荐(0)
摘要:题目:如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 思路:用一个t数组求nums数组相邻两个数的差,则原题的解转换为找出t数组中最多的正负交替的 阅读全文
posted @ 2020-11-17 17:54 for_ward 阅读(97) 评论(0) 推荐(0)
摘要:题目:给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词 解法:动态规划 思路:数学符号:dp[i]表示前i个字符是否可以被空格拆分为一个或多个在字典中出现的单词;状态转移方程:当dp[i]true并且s[i,j)出现在wo 阅读全文
posted @ 2020-11-17 15:46 for_ward 阅读(183) 评论(0) 推荐(0)
摘要:题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径? 解法:动态规划 思路:数学符号://dp[i][j]表示到达ij位置的路径数;状 阅读全文
posted @ 2020-11-17 13:09 for_ward 阅读(57) 评论(0) 推荐(0)
摘要:题目:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]k[1]...k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到 阅读全文
posted @ 2020-11-16 17:25 for_ward 阅读(55) 评论(0) 推荐(0)
摘要:题目:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 解法:动态规划 思路:数学符号:dp[i][j] 阅读全文
posted @ 2020-11-16 16:03 for_ward 阅读(83) 评论(0) 推荐(0)
摘要:题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 解法:动态规划 思路:数学符号:dp[i]表示以i结尾的最大利润;状态转移方程:dp[i] = max(dp[i-1],prices[i]-min);其中min为前i-1个数的最小值(包含第i个是为了 阅读全文
posted @ 2020-11-16 14:53 for_ward 阅读(92) 评论(0) 推荐(0)
摘要:题目:爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取 阅读全文
posted @ 2020-11-16 11:22 for_ward 阅读(70) 评论(0) 推荐(0)
摘要:题目:数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。 解法:动态规划 思路:数 阅读全文
posted @ 2020-11-15 17:31 for_ward 阅读(74) 评论(0) 推荐(0)
摘要:题目:一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数 解法:动态规划 思路:数学符号:dp[i]表示到达位置i的最长时间;状态转移方程: 阅读全文
posted @ 2020-11-15 16:16 for_ward 阅读(115) 评论(0) 推荐(0)
摘要:题目:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 解法:动态规划 思路:最优子结构:nums数组一个一个变短;设数学符号:r[i]表示以nums[i]结尾的最大子数组和;状态转移方程:如果r[i-1]<=0,则r[i] = nums[i],否则r[i] = 阅读全文
posted @ 2020-11-15 13:32 for_ward 阅读(79) 评论(0) 推荐(0)
摘要:题目:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 解法:动态规划 思想:使用动态规划的方法实现预处理,解决在t 中找到下一个匹配字符需要的时间,令dp[i][j]表示从第i个位置开始,j出现的第一个位置,从后往前填表 代码: class Solution { public boole 阅读全文
posted @ 2020-11-15 10:16 for_ward 阅读(130) 评论(0) 推荐(0)
摘要:题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法 解法一:动态规划(自顶向下) 代码: class Solution { int[] t; //存储到n级阶梯的走法 public int numWays(int n) { t = new int[ 阅读全文
posted @ 2020-11-08 15:49 for_ward 阅读(77) 评论(0) 推荐(0)