定义4种状态,0持有 1不持有 2今日卖出3冷冻期(也代表不持有
class Solution {
public int maxProfit(int[] prices) {
int[] dp=new int[4];
dp[0]=-prices[0];//持有
dp[1]=0;//不持有,冷静期就代表不持有
for(int i=1;i<prices.length;i++){
int temp=dp[0];
int temp1=dp[2];
dp[0]=Math.max(dp[0],Math.max(dp[3],dp[1])-prices[i]);
dp[1]=Math.max(dp[1],dp[3]);//比较前一天冷静期和前一天不持有
dp[2]=temp+prices[i];
dp[3]=temp1;
}
return Math.max(dp[3],Math.max(dp[1],dp[2]));
}
}
手续费则在之前的基础上减去fee即可
class Solution {
public int maxProfit(int[] prices, int fee) {
int[] dp=new int[2];
dp[0]=-prices[0];//持有
dp[1]=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];
}
}