动态规划
克里马查
这个作者很懒,什么都没留下…
展开
-
887. 鸡蛋掉落
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong887. 鸡蛋掉落给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。已知存在楼层 f ,满足 0 <= f <= n ,任何从 高于 f 的楼层落下的鸡蛋都会碎,从 f 楼层或比它低的楼层落下的鸡蛋都不会破。每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层 x 扔下(满足 1 <= x <= n)。如果鸡蛋碎了,你就不能再次使用原创 2021-08-13 14:26:24 · 175 阅读 · 0 评论 -
64. 最小路径和
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong64. 最小路径和给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:1原创 2021-08-12 11:13:39 · 183 阅读 · 0 评论 -
55. 跳跃游戏
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong55. 跳跃游戏给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4原创 2021-08-11 13:38:24 · 202 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong452. 用最少数量的箭引爆气球在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤原创 2021-08-10 16:53:34 · 128 阅读 · 0 评论 -
435. 无重叠区间
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong435. 无重叠区间给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [原创 2021-08-10 16:16:10 · 93 阅读 · 0 评论 -
518. 零钱兑换 II
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong518. 零钱兑换 II给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。示例 1:输入:amount = 5, coins = [1, 2, 5]输出:4解释:有四种方式可以凑成原创 2021-08-10 14:33:47 · 84 阅读 · 0 评论 -
416. 分割等和子集
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong416. 分割等和子集给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例 1:输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。示例 2:输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。提示:原创 2021-08-09 22:04:11 · 103 阅读 · 0 评论 -
354. 俄罗斯套娃信封问题
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong354. 俄罗斯套娃信封问题给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。注意:不允许旋转信封。示例 1:原创 2021-08-07 11:23:06 · 114 阅读 · 0 评论 -
494. 目标和
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong494. 目标和给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例原创 2021-07-25 21:22:28 · 121 阅读 · 0 评论 -
509. 斐波那契数
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong509. 斐波那契数斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1原创 2021-07-22 18:28:06 · 69 阅读 · 0 评论 -
322. 零钱兑换
算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》&labuladong322. 零钱兑换给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输原创 2021-07-22 18:19:54 · 58 阅读 · 0 评论 -
1035. 不相交的线
链表算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》。1035. 不相交的线我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == B[j],且我们绘制的直线不与任何其他连线(非水平线)相交。以这种方法绘制线条,并返回我们可以绘制的最大连线数。示例 1:输入:A = [1,4,2], B = [1,2,4]输出:2解释:我们可以画出两条不交叉的线,如上图所示原创 2021-01-06 12:55:27 · 179 阅读 · 0 评论 -
516. 最长回文子序列
链表算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》。516. 最长回文子序列给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入:“bbbab”输出:4一个可能的最长回文子序列为 “bbbb”。示例 2:输入:“cbbd”输出:2一个可能的最长回文子序列为 “bb”。提示:1 <= s.length <= 1000s 只包含小写英文字母解题方法参考资料原创 2021-01-05 17:36:11 · 94 阅读 · 0 评论 -
5. 最长回文子串
链表算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》。5. 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”解题方法参考资料1:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484471&a原创 2021-01-04 16:59:40 · 72 阅读 · 0 评论 -
72. 编辑距离
链表算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》。72. 编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r原创 2020-12-29 22:11:36 · 89 阅读 · 0 评论 -
712. 两个字符串的最小ASCII删除和
链表算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》。712. 两个字符串的最小ASCII删除和给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和。示例 1:输入: s1 = “sea”, s2 = “eat”输出: 231解释: 在 “sea” 中删除 “s” 并将 “s” 的值(115)加入总和。在 “eat” 中删除 “t” 并将 116 加入总和。结束时,两个字符串相等,115 + 116 = 231 就是符合条件的原创 2020-12-17 16:42:17 · 163 阅读 · 0 评论 -
583. 两个字符串的删除操作
链表算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》。583. 两个字符串的删除操作给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例:输入: “sea”, “eat”输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"提示:给定单词的长度不超过500。给定单词中的字符只含有小写字母。解题方法解题思路1根据最长公共子序列算法原创 2020-12-17 14:20:55 · 116 阅读 · 0 评论 -
1143. 最长公共子序列
链表算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》。1143. 最长公共子序列给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若原创 2020-12-16 23:55:01 · 112 阅读 · 0 评论 -
300. 最长上升子序列
链表算法题(程序员面试宝典)解题思路主要来源于leetcode官方与《程序员面试宝典》。300. 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?解题方法解题思原创 2020-12-15 17:01:17 · 90 阅读 · 0 评论