LeetCode--动态规划
LeetCode--动态规划
欢脱的婷子
每天努力一点点!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode # 1143 最长公共子序列
给定两个字符串text1 和text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。 若这两个字符串没有公共子序列,则返回 0。 示例 1: 输入:text1 = "abcde", text2 = ...原创 2020-07-11 11:18:00 · 182 阅读 · 0 评论 -
LeetCode # 376 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。 例如,[1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3)是正负交替出现的。相反, [1,4,7,2,5]和[1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。 给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元...原创 2020-07-11 10:37:13 · 175 阅读 · 0 评论 -
LeetCode # 646 最长数对链
给出n个数对。在每一个数对中,第一个数字总是比第二个数字小。 现在,我们定义一种跟随关系,当且仅当b < c时,数对(c, d)才可以跟在(a, b)后面。我们用这种形式来构造一个数对链。 给定一个对数集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。 示例 : 输入: [[1,2], [2,3], [3,4]] 输出: 2 解释: 最长的数对链是 [1,2] -> [3,4] 解题思路1:采用动态规划,使用...原创 2020-07-11 10:13:00 · 136 阅读 · 0 评论 -
LeetCode # 300 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为O(n2) 。 解题思路: 利用动态规划,设置一个dp数组,dp[n]代表以第n个元素结尾的字符串的最长上升子序列的长度,因此dp[n] = max(dp[s]+1),其中s<n且s[s] &...原创 2020-07-10 11:41:27 · 128 阅读 · 0 评论 -
LeetCode # 91 解码方法
一条包含字母A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: "12" 输出: 2 解释:它可以解码为 "AB"(1 2)或者 "L"(12)。 示例2: 输入: "226" 输出: 3 解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。 解题思路:对于输入的字符数组,可以分为以下几...原创 2020-07-10 11:13:56 · 105 阅读 · 0 评论 -
LeetCode # 279 完全平方数
给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于n。你需要让组成和的完全平方数的个数最少。 示例1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 解题思路: 使用动态规划来解决,状态转移方程为 numSquares(n) = min(numSquares(n-k)+1),其中k是任意的一个完全平方数。 使用一个dp数组来记录一些中间值,减...原创 2020-07-10 10:29:50 · 97 阅读 · 0 评论 -
LeetCode # 343 整数拆分
给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。 解题思路: 使用dp[i]来表示整数 i 的最大乘积,因此,对于一个正整数n,其最大乘积的取值分为两个部分:(1)dp[i-j] * j;(2)(i-j) * j;遍历所有小于 i 的 j 的情...原创 2020-07-08 16:26:36 · 118 阅读 · 0 评论 -
LeetCode # 413 等差数列划分
如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,以下数列为等差数列: 1, 3, 5, 7, 9 7, 7, 7, 7 3, -1, -5, -9 以下数列不是等差数列。 1, 1, 2, 5, 7 数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N 。 如果满足以下条件,则称子数组(P, Q)为等差数组: 元素 A[P], A[p + 1], ...,.原创 2020-07-08 15:28:46 · 127 阅读 · 0 评论 -
LeetCode # 303 区域和检索 - 数组不可变
给定一个整数数组 nums,求出数组从索引i到j(i≤j) 范围内元素的总和,包含i, j两点。 示例: 给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange() sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3 解题思路:使用一个辅助数组sum,sum[i]代表前i-1个元素之和,因此求和函数返回 sum[j+1]-sum[i] 就是数组从 ...原创 2020-07-08 12:07:54 · 184 阅读 · 0 评论 -
LeetCode # 62 不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 示例1: 输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -> 向右 3. 向下 -> 向右 -> 向右 示例2: 输入: m..原创 2020-07-08 11:33:37 · 98 阅读 · 0 评论 -
LeetCode # 64 最小路径和
给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 解题思路: 采用动态规划,从矩阵的右下角开始,依次更新矩阵中的值,当前矩阵的值grid[i][j]代表从当前点到达右下角路径最小值,每次可以选择向下或者向右走,因此更新路径值时,选择两个方向上的最小值来...原创 2020-07-08 11:16:31 · 101 阅读 · 0 评论 -
LeetCode # 213 打家劫舍 II
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例1: 输入: [2,3,2] 输出: 3 解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。 示例 2.原创 2020-07-06 12:01:18 · 212 阅读 · 0 评论 -
LeetCode # 198 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。 示例 2: 输入...原创 2020-07-06 11:17:41 · 333 阅读 · 0 评论 -
LeetCode # 70 爬楼梯
假设你正在爬楼梯。需要n阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定n是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 解题思路: 第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再...原创 2020-07-06 10:58:23 · 106 阅读 · 0 评论
分享