![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
RainyD4y
NULL
展开
-
LeetCode 32 最长有效括号 题解
题目大意给定一个由左右括号()组成的字符串,然后判断其中最长的有效括号子串长度(即左右括号可以匹配的子串)。分析与源代码一、时间复杂度为O(n^2)的DP算法这道题我首先想到的是动态规划解法,设dp[i][j]为1表示s[i][j]为有效括号子串,那么会有两种情况的时候dp[i][j]为1:第一种是dp[i+1][j-1]=1且s[i]='(',s[j]=')';第二种是枚...原创 2020-01-20 18:07:23 · 213 阅读 · 0 评论 -
LeetCode 120 三角形最小路径和 动态规划题解
题目大意给定一个三角形数组,然后求从上到下走一条路径的最小和是多少,注意每一步只能移动到下一行的相邻结点上。分析一道比较水的动态规划题,就是当初的数字三角形,dp[i][j] = min(dp[i - 1][j],dp[i - 1][j - 1]) + triangle[i][j]。代码class Solution { public int minimumTotal(...原创 2020-01-11 21:33:35 · 176 阅读 · 0 评论 -
LeetCode 188 买卖股票的最佳时机 IV 题解
题目大意这道题与III的区别在于给定交易数量为k,然后求最大利润。分析将III的程序维度稍微修改一下,即可完成本题,但是如果直接提交的话,会由于k达到十亿爆出内存溢出,我本来以为要用什么奇妙的滚动数组来优化,屡次尝试未果后参考了别人的题解,发现一次交易至少需要两天,那么我们可以认为如果k > n / 2,就能通过无限次的交易那种方案来解决,即利用LeetCode 122那道题的方...原创 2020-01-04 10:34:40 · 181 阅读 · 0 评论 -
LeetCode 123 买卖股票的最佳时机 III 题解
题目大意与前两题类似,不过这里要求只进行两次交易,然后求解最大利润。分析不妨设dp[i][j][k]表示第i天,至多j笔交易,持有股票(k=1)或不持有股票(k=0)时,能够获取到的最大利润。那么很显然,有如下结论:如果第j天完成至多j笔交易的话,那么它要么保持前一天的状态不变,即不发生交易,要么在今天买入股票。同理,如果第j天完成至多j笔交易且不持有股票的话,那么它要...原创 2020-01-04 10:25:02 · 170 阅读 · 0 评论 -
LeetCode 122 买卖股票的最佳时机 II
题目大意这道题与上一题类似,不过区别在于,可以对股票进行无限次购买,可在购买之前需要将已经购买的卖出。分析一种很直观的想法,当当前值大于下一天的我们就卖出,如果小于就更新最大值或者卖出再买入,但是需要证明:考虑的其实就是一个这样的状态,如果有四天的股票价格分别为a b c d,a<b且c<d,现在究竟该在a买b卖c买d卖,还是a买d卖(等价于a买入bc连续卖出买入,最后...原创 2020-01-01 17:14:32 · 128 阅读 · 0 评论 -
LeetCode 121 买卖股票的最佳时机 题解(动态规划)
题目大意给定一个数组,第i个数代表一个股票第i天的价格,求这个股票可以收到的最大利润。分析设dp[i]表示前i天可以获得的最大利润,再设变量max与min表示当前股票的最大price与最小price,那么可以得到如下状态转移方程:dp[i]=max(max - min, dp[i - 1]),i >= 1,这个状态转移方程很容易计算,注意一下求解完第i天之后,要将min与max的...原创 2020-01-01 17:03:55 · 162 阅读 · 0 评论 -
LeetCode 5 最长回文子串 题解
题目大意给定一个字符串,求它最长的回文子串,子串意味着要在给定的字符串中连续,回文则要左右对称。分析设dp[i][j]为s[i][j]是否为i最长回文子串,那么很容易得到s[i][i],s[i][i+1]的情况,接下来进行递推计算长度大于等于3的回文子串:当s[i] = s[i + len - 1]且dp[i + 1][i + len - 2]=true的时候,dp[i][i + ...原创 2019-11-09 09:12:15 · 156 阅读 · 0 评论