目录
LeetCode 309.最佳买卖股票时机含冷冻期
动态规划五步曲:
1.确定dp[i][j]的含义
2.找出递推公式
3.初始化dp数组
4.确定遍历方向
5.打印dp数组
LeetCode 714.买卖股票的最佳时机含手续费
动态规划五步曲:
1.确定dp[i]的含义
2.找出递推公式
3.初始化dp数组
4.确定遍历方向
5.打印dp数组
LeetCode 309.最佳买卖股票时机含冷冻期
文章讲解:代码随想录
视频讲解:动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili
力扣题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
动态规划五步曲:
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
力扣题目: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
动态规划五步曲:
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];
}
}