class Solution {
public int maxProfit(int[] prices, int fee) {
// 1.确定dp数组 dp[i][0] 考虑到第i天,持有股票所拥有的利润
// dp[i][1] 考虑到第i天,不持有股票所拥有的利润
int n = prices.length;
int[][] dp = new int[n][2];
/**
2.递推公式
第i天持有,有两种情况,第i-1天持有;第i-1天不持有,第i天买入
dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1] - prices);
第i天不持有,有两种情况,第i-1天不持有;第i-1天持有,第i天卖出
dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0] + prices - fee);
*/
// 3.初始化
dp[0][0] = -prices[0];
dp[0][1] = 0;
// 4.遍历顺序 从小到大
for(int i=1; i<n; i++){
dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1] - prices[i]);
dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0] + prices[i] - fee);
}
return dp[n-1][1];
}
}
运行结果: