今日任务
188.买卖股票的最佳时机IV
309.最佳买卖股票时机含冷冻期
714.买卖股票的最佳时机含手续费
188.买卖股票的最佳时机IV
题目连接: .. - 力扣(LeetCode)
class Solution {
public int maxProfit(int k, int[] prices) {
int status = 2 * k;
int[][] dp = new int[prices.length][status + 1];
for (int j = 1; j < status; j += 2) {
dp[0][j] = - prices[0];
}
for (int i = 1; i < prices.length; i++) {
for (int j = 0; j < status ; j += 2) {
dp[i][j + 1] = Math.max(dp[i - 1][j + 1], dp[i - 1][j] - prices[i]);
dp[i][j + 2] = Math.max(dp[i - 1][j + 2], dp[i - 1][j + 1] + prices[i]);
}
}
return dp[prices.length - 1][status];
}
}
309.最佳买卖股票时机含冷冻期
题目链接: . - 力扣(LeetCode)
class Solution {
public int maxProfit(int[] prices) {
int len = prices.length;
if (len == 0) return 0;
int[][] dp = new int[len][4];
dp[0][0] = -prices[0];
for (int i = 1; i < len; i++) {
dp[i][0] = Math.max(dp[i - 1][0], Math.max(dp[i - 1][3] - prices[i], 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[len - 1][3], Math.max(dp[len - 1][1], dp[len - 1][2]));
}
}
714.买卖股票的最佳时机含手续费
题目链接: . - 力扣(LeetCode)
class Solution {
public int maxProfit(int[] prices, int fee) {
int len = prices.length;
//0 持有, 1 不持有 dp 定义第i天持股/不持股 所得最多现金
// 卖出时支付手续费
int[][] dp = new int[len][2];
dp[0][0] = -prices[0];
for (int i = 1; i < len; i++) {
dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
dp[i][1] = Math.max(dp[i - 1][0] + prices[i] - fee, dp[i - 1][1]);
}
return Math.max(dp[len - 1][0], dp[len - 1][1]);
}
}