● 309.最佳买卖股票时机含冷冻期
思路
代码
class Solution {
public int maxProfit(int[] prices) {
// 0.买入状态-(持有)
// 1.保持卖出股票的状态
// 2.今天卖出-明天为冷静期
// 3.冷冻期
int[][]dp=new int[prices.length][4];
dp[0][0]=-prices[0];
for(int i=1;i<prices.length;i++){
dp[i][0]=Math.max(dp[i-1][0],Math.max(dp[i-1][1]-prices[i],dp[i-1][3]-prices[i]));
dp[i][1]=Math.max(dp[i-1][1],dp[i-1][3]);
dp[i][2]=dp[i-1][0]+prices[i];// 达到今天就卖出股票状态(状态2),昨天一定是持有股票状态(状态0),今天卖出
dp[i][3]=dp[i-1][2]; // 达到冷冻期状态(状态3),昨天卖出了股票(状态2)
}
return Math.max(Math.max(dp[prices.length-1][3],dp[prices.length-1][2]),dp[prices.length-1][1]);
}
}
● 714.买卖股票的最佳时机含手续费
33
思路:
再卖出时考虑手续费
class Solution {
public int maxProfit(int[] prices, int fee) {
int[] dp=new int[2];
//0买入
//1卖出-要手续费
dp[0]=-prices[0];
// dp[1]=-fee; ==0?
for(int i=1;i<prices.length;i++){
dp[0]=Math.max(dp[0],dp[1]-prices[i]);
dp[1]=Math.max(dp[1],dp[0]+prices[i]-fee);
}
return dp[1];
}
}