class Solution {
public int maxProfit(int[] prices) {
int n = prices.length;
// 1.确定dp数组,二维数组 dp[i][0] 表示第i天持有所拥有的最大利润为dp[i][0],dp[i][1] 表示第i天不持有所拥有的最大利润为dp[i][1]
int[][] dp = new int[n][2];
// 2.确定递推关系
// 分两种情况
// 1.第i天持有 第i-1天持有或者从i天持有 dp[i][0] = Math.max(dp[i-1][0],-price[i])
// 2.第i天不持有 第i-1天不持有或者从i天不持有 dp[i][1] = Math.max(dp[i-1][1],dp[i][0] + price[i]);
// 3.初始化
dp[0][0] = -prices[0];
dp[0][1] = 0;
for(int i=1; i<n; i++){
dp[i][0] = Math.max(dp[i-1][0],-prices[i]);
dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]+prices[i]);
}
return Math.max(dp[n-1][0],dp[n-1][1]);
}
}
运行结果: