
动态规划,主要来看下面的那张图,主要涉及到的是状态的转换
dp[i][0]代表卖出,dp[i][0]=MAX(dp[i-1][1]+prices[i],dp[i-1][0])
dp[i][1]代表买入,要么不动,要么是从冷冻期转换来的,初始值为-prices[0],因为买东西要花钱呀
dp[i][2]代表冷冻期,只能由卖出这个状态转移过来

class Solution {
public int maxProfit(int[] prices) {
int [][] dp=new int[prices.length][3];
int n=prices.length;
if(n<2) return 0;
dp[0][1]=-prices[0];
for(int i=1;i<n;i++){
dp[i][0]=Math.max(dp[i-1][1]+prices[i],dp[i-1][0]);
dp[i][1]=Math.max(dp[i-1][1],dp[i-1][2]-prices[i]);
dp[i][2]=dp[i-1][0];
}
int res=Math.max(dp[n-1][0],dp[n-1][1]);
res=Math.max(res,dp[n-1][2]);
return res;
}
}
网友评论