动态规划
文章平均质量分 72
失业边缘,疯狂挣扎
这个作者很懒,什么都没留下…
展开
-
139. 单词拆分(Java)(动归正向迭代,一维背包)
1 题目给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”, wordDict原创 2020-09-19 21:16:07 · 241 阅读 · 0 评论 -
377. 组合总和 Ⅳ(Java)(正向迭代动归)(一维背包问题)
1 题目给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。示例:nums = [1, 2, 3]target = 4所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。因此输出为 7。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combination-sum-iv著作权原创 2020-09-18 13:16:38 · 217 阅读 · 0 评论 -
面试题66. 构建乘积数组(Java)(思维,动归迭代)
1 题目给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 1000002 Java2...原创 2020-03-19 12:14:00 · 106 阅读 · 0 评论 -
494. 目标和(Java)(回溯递归)(动归迭代,背包问题)
1 题目给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3一共有5种方法让最终原创 2020-05-19 13:49:08 · 143 阅读 · 0 评论 -
1143. 最长公共子序列(Java)(动归)
1 题目给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 = “abcde”, text2 =原创 2020-05-17 13:25:50 · 128 阅读 · 0 评论 -
718. 最长重复子数组(Java)(类似求字符串的公共子串)(动归)
1 题目给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释:长度最长的公共子数组是 [3, 2, 1]。说明:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 1002 Java2.1 方法一(暴力;超时)每次从A、B中取长度为l的子数组(l以短数组的长度为起始递减至1),看两个数组是否相等,如果相等,立即原创 2020-05-16 12:13:31 · 202 阅读 · 0 评论 -
53. 最大子序和(Java)(!动归正向迭代)
1 题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。来源:力扣(LeetCode)链接:https://leetc...原创 2020-05-07 17:54:03 · 97 阅读 · 0 评论 -
笔试题;携程(斐波那契数列变形)
1 题目跨 N 级台阶,可以一次跨 1/2/3 级,但只能跨 1 次 3 级,一共有多少种跨法?2 Java注意使用 回溯正向递归,而非 动归正向迭代这道题不知道怎么利用子问题加速这种时候直接用回溯吧import java.util.Scanner;/** * @classname XieCheng_Main1 * @description TODO 跨 N 级台阶,可以一次跨...原创 2020-05-07 12:46:43 · 158 阅读 · 0 评论 -
188. 买卖股票的最佳时机 IV(Java)(动归正向迭代)
1 题目给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [2,4,1], k = 2输出: 2解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能...原创 2020-04-18 16:55:20 · 157 阅读 · 0 评论 -
714. 买卖股票的最佳时机含手续费(Java)(动归正向迭代,二维dp及优化)
1 题目给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入: prices...原创 2020-04-17 16:40:16 · 171 阅读 · 0 评论 -
309. 最佳买卖股票时机含冷冻期(Java)(动归正向迭代)
1 题目给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖...原创 2020-04-17 13:58:20 · 111 阅读 · 0 评论 -
123. 买卖股票的最佳时机 III(Java)(动归正向迭代)
1 题目给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获...原创 2020-04-15 17:51:44 · 142 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II(Java)(动归正向迭代,二维dp及优化)(贪心)
1 题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔...原创 2020-04-13 17:30:36 · 139 阅读 · 0 评论 -
121. 买卖股票的最佳时机(Java)(双指针)(单调队列)(动归正向迭代,二维dp及优化)
1 题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意...原创 2020-02-17 16:42:05 · 131 阅读 · 0 评论 -
279. 完全平方数(Java)(动归正向迭代)
1 题目给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr...原创 2020-02-16 19:28:25 · 189 阅读 · 0 评论 -
72. 编辑距离(Java)(一条龙,动归正向迭代,极难理解)
1 题目给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rors...原创 2020-04-07 13:55:32 · 123 阅读 · 0 评论 -
5. 最长回文子串(Java)(中心扩展,思维)(动归乱序迭代)
1 题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic...原创 2020-04-06 14:04:29 · 99 阅读 · 0 评论 -
647. 回文子串(Java)(中心扩展,思维)(动归乱序迭代)
1 题目给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: “abc”输出: 3解释: 三个回文子串: “a”, “b”, “c”.示例 2:输入: “aaa”输出: 6说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.注意:输...原创 2020-04-05 14:34:17 · 184 阅读 · 0 评论 -
63. 不同路径 II(Java)(动归逆向递归,动归正向迭代,回溯正向递归;一条龙)(二维dp优化)
1 题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,...原创 2020-04-05 12:51:52 · 121 阅读 · 0 评论 -
62. 不同路径(Java)(回溯正向递归;动规正向迭代;动规逆向递归;一条龙)
1 题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。...原创 2020-04-04 16:25:49 · 135 阅读 · 0 评论 -
面试题14- II. 剪绳子 II(Java)(动态规划失效)(思维)
1 题目给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m] 。请问 k[0]k[1]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007),如计算初始结果为:10000...原创 2020-03-29 13:49:54 · 172 阅读 · 0 评论 -
面试题47. 礼物的最大价值(Java)(动态规划迭代)(动态规划递归)
1 题目在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值...原创 2020-03-28 20:50:06 · 276 阅读 · 0 评论 -
面试题49. 丑数(Java)(三指针,动态规划)(优先队列)
1 题目我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。注意:本题与主站 264 题相同:https://leetcode-cn.com/problems...原创 2020-03-23 16:32:37 · 126 阅读 · 0 评论 -
面试题14- I. 剪绳子(343. 整数拆分)(Java)(动态规划迭代)(思维)
1 题目给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。2 Java2.1 方法一(...原创 2020-03-21 15:27:47 · 195 阅读 · 0 评论 -
面试题60. n个骰子的点数(Java)(回溯递归)(动规迭代,二维dp)
1 题目把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例 2:输入: 2输出: [0.02778...原创 2020-03-20 16:37:17 · 207 阅读 · 0 评论 -
面试题42. 连续子数组的最大和(Java)(动态规划迭代)(一维dp降维)
1 题目输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[...原创 2020-03-19 11:53:28 · 295 阅读 · 0 评论 -
面试题46. 把数字翻译成字符串(Java)(回溯递归;动态规划递归、迭代)
1 题目给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi...原创 2020-03-18 17:42:33 · 140 阅读 · 0 评论 -
面试题10- II. 青蛙跳台阶问题(70. 爬楼梯)(斐波那契数列)(Java)(回溯正向递归,动归逆向递归,动归正向迭代,一条龙)
1 题目一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21提示:0 <= n <= 100来源:力扣(LeetCode)链接:https://l...原创 2020-03-12 19:26:45 · 210 阅读 · 0 评论 -
983. 最低票价(Java)(一条龙,动归正向迭代,一维dp)
1 题目在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为 costs[0] 美元;一张为期七天的通行证售价为 costs[1] 美元;一张为期三十天的通行证售价为 costs[2] 美元。通行证允许数天无限制的旅行...原创 2020-02-19 19:12:24 · 319 阅读 · 0 评论 -
322. 零钱兑换(Java)(动归正向迭代,一维dp)(完全背包问题,二维dp)
1 题目给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你...原创 2020-02-19 01:18:34 · 276 阅读 · 0 评论 -
64. 最小路径和(Python,Java)(一条龙,动规正向迭代,二维dp,自备忘)(二维dp优化)
1 题目最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。2 Python2.1 方法一...原创 2020-02-09 11:34:18 · 116 阅读 · 0 评论 -
96. 不同的二叉搜索树(Java)
1 题目2 Java本题虽然是树的递归,但可以看做动态规划原因是常规树的递归每个子问题的结果都不一样,无法建立备忘录优化本题只求个数,[1,2,3]和[2,3,4]两组构成二叉树的数量是一样的,可以建立备忘录优化2.1 方法一(递归;可看做动态规划)numi = (num1 * num2)i代表:i为选定的根节点,0 ~ i-1作为左子树,i+1 ~ n是右子树,且0 ~ i-1构...原创 2020-02-24 15:17:12 · 224 阅读 · 0 评论 -
221. 最大正方形(Java)(二维dp,动态规划递归)(二维dp优化)
1 题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximal-square著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明...原创 2020-02-17 22:59:43 · 426 阅读 · 0 评论