相关标签
一、题目要求
二、题解和代码实现
1.题解
2.代码实现
代码如下(示例):
class Solution {
public int maxProfit(int[] prices) {
int len = prices.length;
if (len<2){
return 0;
}
int[][] dp = new int[len][2];
// dp[i][0] 下标为 i 这天结束的时候,不持股,手上拥有的现金数
// dp[i][1] 下标为 i 这天结束的时候,持股,手上拥有的现金数
// 初始化:不持股显然为 0,持股就需要减去第 1 天(下标为 0)的股价
dp[0][0] = 0;//用于记录不持有股票所持有的现金
dp[0][1] = -prices[0];//用于记录持有股票所持有的现金
for (int i = 1; i < len; 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],-prices[i]);
}
return dp[len-1][0];
}
}