目录
LeetCode 309.最佳买卖股票时机含冷冻期
文章讲解:代码随想录
视频讲解:动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili

动态规划五步曲:
1.确定dp[i][j]的含义
dp[i][0]:第i天持有股票的最大价值为dp[i][0];
dp[i][1]:第i天不持有股票的最大价值为dp[i][1];
dp[i][2]:第i天卖出股票的最大价值为dp[i][2];
dp[i][3]:第i天冷冻期的最大价值为dp[i][3];
2.找出递推公式
dp[i][0] = Math.max(dp[i-1][0], Math.max(dp[i-1][3], dp[i-1][1]) - prices[i]);
dp[i][1] = Math.max(dp[i-1][1], dp[i-1][3]);
dp[i][2] = dp[i-1][0] + prices[i];
dp[i][3] = dp[i-1][2];
3.初始化dp数组
dp[0][0] = -prices[0];
dp[0][1] = 0;
dp[0][2] = 0;
dp[0][3] = 0;
4.确定遍历方向
从前往后遍历
5.打印dp数组
代码如下(Java):
class Solution {
public int maxProfit(int[] prices) {
int length = prices.length;
int[][] dp = new int[length][4];
dp[0][0] = -prices[0];
dp[0][1] = 0;
dp[0][2] = 0;
dp[0][3] = 0;
for(int i = 1; i < length; i++){
dp[i][0] = Math.max(dp[i-1][0], Math.max(dp[i-1][3], dp[i-1][1]) - prices[i]);
dp[i][1] = Math.max(dp[i-1][1], dp[i-1][3]);
dp[i][2] = dp[i-1][0] + prices[i];
dp[i][3] = dp[i-1][2];
}
return Math.max(dp[length-1][1], Math.max(dp[length-1][2], dp[length-1][3]));
}
}
LeetCode 714.买卖股票的最佳时机含手续费
文章讲解:代码随想录
视频讲解:动态规划来决定最佳时机,这次含手续费!| LeetCode:714.买卖股票的最佳时机含手续费_哔哩哔哩_bilibili

动态规划五步曲:
1.确定dp[i]的含义
dp[i]:第i天持有的最大利润为dp[i]
2.找出递推公式
dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1] + prices[i] - fee);
dp[i][1] = Math.max(dp[i-1][1], dp[i-1][0] - prices[i]);
3.初始化dp数组
dp[0][0] = 0;
dp[0][1] = -prices[0];
4.确定遍历方向
从前往后遍历
5.打印dp数组
代码如下(Java):
class Solution {
public int maxProfit(int[] prices, int fee) {
int n = prices.length;
int[][] dp = new int[n][3];
dp[0][0] = 0;
dp[0][1] = -prices[0];
for(int i = 1; i < n; i++){
dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1] + prices[i] - fee);
dp[i][1] = Math.max(dp[i-1][1], dp[i-1][0] - prices[i]);
}
return dp[n-1][0];
}
}
文章介绍了如何使用动态规划方法解决LeetCode中的股票交易问题,包括309题的含冷冻期版本和714题的含手续费版本,详细解释了dp数组的定义、递推公式、初始化和遍历过程。
1322

被折叠的 条评论
为什么被折叠?



