阿里 CodeTop 代码随想录 123.买卖股票的最佳时机Ⅲ
思路:这道题是说至多可以买卖两次。也就是说,可以买卖一次,也可以买卖两次,也可以不买卖。
动规五部曲:
1.确定dp数组及其下标的含义:一天一共可能有五个状态。
(1)0:表示没有操作(也可以不设这个状态)。
(2)1:表示第1次持有股票。
(3)2:表示第1次不持有股票。
(4)3:表示第2次持有股票。
(5)4:表示第2次不持有股票。
dp[i][j]中i表示第i天,j表示[0 - 4]五个状态,dp[i][j]表示第i天状态j所剩的最大现金。
注意:dp[i][1]表示的是第i天买入股票的状态,并不一定是要第i天买入股票。例如,dp[i][1]并不一定代表第i天买入的股票,也有可能是第i - 1天就买入了,dp[i][1]延续买入股票的这个状态。
2.确定递推公式:
(1)达到dp[i][1]的状态,有两个具体的操作:
——操作1:第i天买入股票了,那么dp[i][1] = dp[i - 1][0] - prices[i]。
——操作2:第i天没有操作,而是沿用前一天买入的状态,即:dp[i][1] = dp[i - 1][1]。
dp[i][1]选择两个状态中最大的,即dp[i][1] = max(dp[i - 1][0] - prices[i],dp[i - 1][1])。
(2)达到dp[i][2]的状态,也有两个具体的操作:
——操作1:第i天卖出股票了,那么dp[i][2] = dp[i
