| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> LeetCode动态规划经典题(一) -> 正文阅读 |
|
[数据结构与算法]LeetCode动态规划经典题(一) |
文章目录62. 不同路径https://leetcode.cn/problems/unique-paths/ 思路:对于每个位置
63. 不同路径 IIhttps://leetcode.cn/problems/unique-paths-ii/ 思路:同不同路径I这道题,这里的递推公式只有当当前位置没有障碍物时才满足条件,另外在初始化边界条件时,遇到障碍物就停止初始化,因为后面都是不可达到的
64. 最小路径和https://leetcode.cn/problems/minimum-path-sum/ 思路:和不同路径这两道题目类似,首先初始化第一行和第一列,作为边界条件处理,然后对于其他的位置
5. 最长回文子串https://leetcode.cn/problems/longest-palindromic-substring/ 思路:对于一个子串 d p [ i ] [ j ] = { t r u e , if?i=j s [ i ] = s [ j ] & & d p [ i + 1 ] [ j ? 1 ] , dp[i][j]= \begin{cases} true, & \text{if i=j} \\ s[i]=s[j] \&\&dp[i+1][j-1], \end{cases} dp[i][j]={true,s[i]=s[j]&&dp[i+1][j?1],?if?i=j
剑指 Offer II 091. 粉刷房子https://leetcode.cn/problems/JEj789/ 思路:动态规划, d p [ i ] [ 0 ] = m i n ( d p [ i ? 1 ] [ 1 ] , d p [ i ? 1 ] [ 2 ] ) + c o s t [ i ] [ 0 ] d p [ i ] [ 1 ] = m i n ( d p [ i ? 1 ] [ 0 ] , d p [ i ? 1 ] [ 2 ] ) + c o s t [ i ] [ 1 ] d p [ i ] [ 2 ] = m i n ( d p [ i ? 1 ] [ 0 ] , d p [ i ? 1 ] [ 1 ] ) + c o s t [ i ] [ 2 ] dp[i][0]=min(dp[i-1][1],dp[i-1][2])+cost[i][0] \\ dp[i][1]=min(dp[i-1][0],dp[i-1][2])+cost[i][1] \\ dp[i][2]=min(dp[i-1][0],dp[i-1][1])+cost[i][2] dp[i][0]=min(dp[i?1][1],dp[i?1][2])+cost[i][0]dp[i][1]=min(dp[i?1][0],dp[i?1][2])+cost[i][1]dp[i][2]=min(dp[i?1][0],dp[i?1][1])+cost[i][2] 当染0号房子时,
53. 最大子数组和https://leetcode.cn/problems/maximum-subarray/ 思路:
121. 买卖股票的最佳时机https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 思路:状态转移方程为 d p [ i ] = m a x ( d p [ i ? 1 ] , p r i c e s [ i ] ? m i n P r i c e ) dp[i]=max(dp[i-1],prices[i]-minPrice) dp[i]=max(dp[i?1],prices[i]?minPrice), dp[i]表示[0-i]天内可以取得的最大利润,最大利润在前i-1天的最大利润和第i天卖出获得的利润中取最大值
由于每次只会用到上一状态的值,可以将dp数组简化为一个变量maxProfit, 减小空间开销
122. 买卖股票的最佳时机 IIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/ 思路:在某一天手里可能没有股票,手里可能有一支股票,记作
故
故
上面的状态转移方程中,每一天的状态只与前一天的状态有关,而与更早的状态都无关, 因此可以将dp二维数组用两个变量表示,减小空间开销
123. 买卖股票的最佳时机 IIIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/ 思路:在任意一天结束后,我们会处于以下5种状态中的一种
状态1没有进行任何操作,因此利润为0,此种状态不考虑,对其他四种状状态最大利润分别记为buy1 sell1 buy2 sell2 { b u y 1 = m a x ( b u y 1 , ? p r i c e s [ i ] ) s e l l 1 = m a x ( s e l l 1 , b u y 1 + p r i c e s [ i ] b u y 2 = m a x ( b u y 2 , s e l l 1 ? p r i c e s [ i ] ) s e l l 2 = m a x ( s e l l 2 , b u y 2 + p r i c e s [ i ] ) \begin{cases} buy1=max(buy1,-prices[i]) \\ sell1=max(sell1,buy1+prices[i] \\ buy2=max(buy2,sell1-prices[i]) \\ sell2=max(sell2,buy2+prices[i]) \end{cases} ??????????buy1=max(buy1,?prices[i])sell1=max(sell1,buy1+prices[i]buy2=max(buy2,sell1?prices[i])sell2=max(sell2,buy2+prices[i])? 边界条件:对于第0天,buy1=-prices[i], sell1表示当天买入一次卖出一次,因此sell1=0, buy2表示当天完成一次交易后又买入一次,因此buy2=-prices[i], sell2=0 返回值:最大利润肯定是取决于卖出后的利润,假设完成一次交易的利润最大,那么可以在当天再进行一次交易,这样sell1的状态就能够转移到sell2的状态,因此最终返回sell2
188. 买卖股票的最佳时机 IVhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/ 思路:第一步考虑n/2和k的大小关系,如果k>=n/2, 相当于不受限制次数的交易,此时转化为122. 买卖股票的最佳时机 II, 对该问题我们可以使用贪心算法来解决; 当k<n/2时,使用动态规划 定义 b u y [ i ] [ j ] = m a x ( b u y [ i ? 1 ] [ j ] , s e l l [ i ? 1 ] [ j ? 1 ] ? p r i c e s [ i ] ) buy[i][j]=max(buy[i-1][j],sell[i-1][j-1]-prices[i]) buy[i][j]=max(buy[i?1][j],sell[i?1][j?1]?prices[i]): max(第i天不进行交易,在第i-1天第j-1次交易的基础上买入一支股票) s e l l [ i ] [ j ] = m a x ( s e l l [ i ? 1 ] [ j ] , b u y [ i ] [ j ] + p r i c e s [ i ] ) sell[i][j]=max(sell[i-1][j],buy[i][j]+prices[i]) sell[i][j]=max(sell[i?1][j],buy[i][j]+prices[i]): max(第i天不进行交易,在第i天第j次交易的基础上买入一支股票)
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:14:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |