class Solution {
public int maxProfit(int[] prices) {
int[][] dp = new int[prices.length][3];
/**
* dp[i][0]: 第i天 完成操作后 持有一只股票的最大收益
* dp[i][1]: 第i天 完成操作后 处于冷冻期的最大收益
* dp[i][2]: 第i天 完成操作后 既不处于冷冻期 也不持有股票的最大的收益
*/
dp[0][0]=0-prices[0];
for(int i=1;i<prices.length;i++){
//持有一只股票,状态可能是前一个的 1.持有一只股票 2.今天购买的是一只股票
dp[i][0] = Math.max(dp[i-1][2]-prices[i],dp[i-1][0]);
//处于冷冻期
dp[i][1] = dp[i-1][0]+prices[i];
//不持有股票,也不处于冷冻期
dp[i][2] = Math.max(dp[i-1][1],dp[i-1][2]);
}
return Math.max(dp[dp.length-1][1],dp[dp.length-1][2]);
}
}
【数据结构与算法】,【动态规划】 309. 最佳买卖股票时机含冷冻期
最新推荐文章于 2024-06-13 23:07:13 发布