![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法——动态规划
杨小帆_
沉下心来做技术
展开
-
LeetCode 523. 连续的子数组和
题目:523. 连续的子数组和类别:动态规划给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。示例 1:输入: [23,2,4,6,7], k = 6输出: True解释: [2,4] 是一个大小为 2 的子数组,并且和为 6。示例 2:输入: ...原创 2019-01-23 20:47:59 · 1046 阅读 · 0 评论 -
谈使用动态规划算法解矩阵连乘问题
一、题目描述解矩阵连乘问题二、样例输入630 35 15 5 10 20 25三、样例输出((A0(A1A2))((A3A4)A5))四、思路分析首先大概说一下样例输入,6 代表的是六个矩阵相乘,第二行的数据中每三个连续的数据代表两个矩阵,比如 {30,35,15} 等价于矩阵 A1 = 30x35,A2 = 35x15。首先关于这道题应该很多朋友在面试...原创 2019-04-12 16:11:09 · 4511 阅读 · 3 评论 -
关于求解最大子段和的四种思路
一、问题描述 【问题描述】求取给定序列的最大子段和,注意这道题是基于股票买卖背景,即每个元素对应的是当天的股票价格减去前一天的股票价格,这也就是说我们可以在计算后全为负时选择不进行买卖,这样的话此时最大子段和为0。 【输入形式】在屏幕上输入一个序列元素,包含负整数、0和正整数。 【输出形式】序列的最大子段和,及得到最大子段和时的起始和终止编号。 【样例输入】 ...原创 2019-04-03 14:47:17 · 2750 阅读 · 0 评论 -
关于求解所有最长公共子序列的思路
没有最好的解法,只有更好的解法一、题目描述求取两个给定序列的最长子序列( 需要求解出所有的最长公共子序列 )。比如序列 X 为 ABCBDAB ,序列 Y 为 BDCABA,则其公共最长子序列之一为 BCBA( 可能不唯一 )。二、解题思路时隔几日,我又再次回到了这道题,如果看过我之前文章的朋友应该知道我前几天写过一篇关于求解最长公共子序列的文章,但是当时的要求就是只需求解...原创 2019-04-06 20:54:39 · 5922 阅读 · 3 评论 -
关于求解最长公共子序列的两种思路
一、题目描述求取两个给定序列的最长子序列,仅需要求取出其中一个最长子序列即可。比如序列 X 为 ABCBDAB ,序列 Y 为 BDCABA,则其公共最长子序列之一为 BCBA(可能不唯一)。关于求解所有最长公共子序列的思路可以移步我的另一篇博文:https://blog.csdn.net/qq_40697071/article/details/89059844二、解题思路...原创 2019-03-27 21:46:55 · 7006 阅读 · 2 评论 -
LeetCode 70. 爬楼梯
题目:70. 爬楼梯类型:动态规划假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. ...原创 2019-02-10 09:35:08 · 96 阅读 · 0 评论 -
LeetCode 494. 目标和
题目:494. 目标和类别:动态规划给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释: -1+1...原创 2019-01-22 17:17:40 · 268 阅读 · 0 评论 -
LeetCode 714. 买卖股票的最佳时机含手续费
题目:714. 买卖股票的最佳时机含手续费类别:动态规划给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每次交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。示例 1:输入: prices = [1, 3, 2,...原创 2019-01-22 12:14:02 · 569 阅读 · 0 评论 -
LeetCode 53. 最大子序和
题目:53. 最大子序和类别:动态规划给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解题思路:运用动态规划的思想进行求解,即取一局部变量记录当前连续元素的最大和,且当此变量为负时,说...原创 2019-01-21 21:10:20 · 80 阅读 · 0 评论 -
LeetCode 413. 等差数列划分
题目:413. 等差数列划分类别:动态规划如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列。1, 1, 2, 5, 7 数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),...原创 2019-01-21 20:13:06 · 317 阅读 · 0 评论 -
LeetCode 221. 最大正方形
题目:221. 最大正方形类别:动态规划在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4解题思路:运用动态规划思想进行解题,创建二维数组或一维数组来保存数据的状态,即使用四个相邻成正方形的元素的右下角元素来记录当前可形成的最大的...原创 2019-01-21 13:18:28 · 248 阅读 · 0 评论 -
LeetCode 279. 完全平方数
题目:LeetCode 279. 完全平方数类别:动态规划给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.解题思路:...原创 2019-01-21 10:30:03 · 158 阅读 · 0 评论 -
LeetCode 238. 除自身以外数组的乘积
题目:238. 除自身以外数组的乘积类别:动态规划给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数...原创 2019-01-25 11:16:05 · 82 阅读 · 0 评论 -
LeetCode 152. 乘积最大子序列
题目:152. 乘积最大子序列类别:动态规划给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。解题思路:这道题的问题...原创 2019-01-25 10:15:21 · 128 阅读 · 0 评论 -
LeetCode 300. 最长上升子序列
题目:300. 最长上升子序列类别:动态规划给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101]它的长度是 4说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复...原创 2019-01-24 18:42:09 · 143 阅读 · 0 评论 -
LeetCode 63. 不同路径 II
题目:63. 不同路径 II类别:动态规划一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不...原创 2019-01-24 10:51:18 · 74 阅读 · 0 评论 -
LeetCode 62. 不同路径
题目:62. 不同路径类别:动态规划一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m...原创 2019-01-24 10:27:45 · 142 阅读 · 0 评论 -
LeetCode 560. 和为K的子数组
题目:560. 和为K的子数组类别:动态规划给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 ...原创 2019-01-23 22:29:24 · 1890 阅读 · 0 评论 -
浅谈 0/1 背包问题
一、问题描述有N件物品和一个容量为V的背包。第i件物品的体积是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。二、解题思路0/1背包问题是典型的动态规划问题,即每种物品只有两种状态放(1) 或 不放(0) 。对于这个问题如果是从前向后来考虑,其实还是有一定难度,所以我们其实可以从后向前来进行考虑,通过维护一个二维数组来记录每种情况。对于最后一个物品,如果它的重...原创 2019-04-20 12:53:37 · 834 阅读 · 0 评论