代码随想录算法训练营19期第50天

123.买卖股票的最佳时机III

视频讲解:动态规划,股票至多买卖两次,怎么求? | LeetCode:123.买卖股票最佳时机III_哔哩哔哩_bilibili

代码随想录

初步思路:买卖股票的最佳时机I。

总结:

关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖.

dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金.

五个状态:

0: 没有操作; 1:第一次持有股票; 2:第一次不持有股票; 3:第二次持有股票; 4:第二次不持有股票

五个递推公式:

dp[i][0] = dp[i-1][0]

dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i])

dp[i][2] = max(dp[i-1][2], dp[i-1][1] + prices[i])

dp[i][3] = max(dp[i-1][3], dp[i-1][2] - prices[i])

dp[i][4] = max(dp[i-1][4], dp[i-1][3] + prices[i])

用时:60分钟

188.买卖股票的最佳时机IV

视频讲解:动态规划来决定最佳时机,至多可以买卖K次!| LeetCode:188.买卖股票最佳时机4_哔哩哔哩_bilibili

代码随想录

初步思路:买卖股票的最佳时机III。

dp[i][j]中 i表示第i天,j为 [0 -- 2k] 个状态,dp[i][j]表示第i天状态j所剩最大现金.

2k个状态:

0: 没有操作; 1:第一次持有股票; 2:第一次不持有股票; 3:第二次持有股票; 4:第二次不持有股票; ....

2k-1:第k次持有股票; 2k:第k次不持有股票;

2k个递推公式:

j is odd -> dp[i][j] = max(dp[i - 1][j], dp[i - 1][j-1] - prices[i])

j is even -> dp[i][j] = max(dp[i - 1][j], dp[i - 1][j-1] + prices[i])

用时:45分钟

相关推荐
Athenaand6 分钟前
代码随想录算法训练营第62天 | Floyd 算法精讲、A * 算法精讲 (A star算法)、最短路算法总结篇、图论总结
算法·图论
qq_4335545430 分钟前
C++ Dijkstra堆优化算法
开发语言·c++·算法
楼田莉子2 小时前
C++动态规划算法:斐波那契数列模型
c++·学习·算法·动态规划
1373i2 小时前
【Python】通俗理解反向传播
深度学习·算法·机器学习
Madison-No72 小时前
【C++】日期类运算符重载实战
c++·算法
cici158742 小时前
基于K-SVD的稀疏编码去噪算法
算法
电力程序小学童3 小时前
基于密集型复杂城市场景下求解无人机三维路径规划的Q-learning算法研究(matlab)
算法·matlab·无人机
小柯J桑_3 小时前
Linux:线程控制
linux·c++·算法
1白天的黑夜13 小时前
栈-1047.删除字符串中的所有相邻重复项-力扣(LeetCode)
c++·leetcode·
im_AMBER3 小时前
Leetcode 18 java
java·算法·leetcode