- 这些问题一般用动态规划解决即可
- 动态规划五步走
- 定义dp数组和数组元素意义
- 根据条件写好状态转移方程
- 初始化dp数组
- 决定遍历顺序
- 代入元素看看是否有反例
- 该题的“冷冻期”是陷进,思考时不要陷入这个冷冻期中去
- 定义好了状态,再根据题意并结合五步走即可解题
- dp[i][0]:该天不持有股票的最大利润
- dp[i][1]:该天持有股票的最大利润
- dp[i][2]:该天卖出股票的最大利润
class Solution {
public int maxProfit(int[] prices) {
int len=prices.length
int[][] dp=new int[len][3]
if(len==1)
return 0
//初始化
dp[0][1]=-prices[0]
//遍历
for(int i=1
dp[i][0]=Math.max(dp[i-1][0],dp[i-1][2])
dp[i][1]=Math.max(dp[i-1][0]-prices[i],dp[i-1][1])
dp[i][2]=dp[i-1][1]+prices[i]
}
return Math.max(dp[len-1][0],dp[len-1][2])
}
}