题解 | #股票交易的最大收益(二)#
股票交易的最大收益(二)
http://www.nowcoder.com/practice/4892d3ff304a4880b7a89ba01f48daf9
至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。一天一共就有五个状态:
0 没有操作
1 第一次满仓
2 第一次空仓
3 第二次满仓
4 第二次空仓
dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j的情况下手中金额的最大值。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 两次交易所能获得的最大收益
* @param prices int整型vector 股票每一天的价格
* @return int整型
*/
int maxProfit(vector<int>& prices) {
if(prices.empty()) return 0;
vector<vector<int>> dp(prices.size(),vector<int>(5,0));
dp[0][0]=0;
dp[0][1]=-prices[0];
dp[0][3]=-prices[0];
for(int i=1;i<prices.size();i++){
dp[i][0]=dp[i-1][0];
dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]);
dp[i][2]=max(dp[i-1][2],dp[i-1][1]+prices[i]);
dp[i][3]=max(dp[i-1][3],dp[i-1][2]-prices[i]);
dp[i][4]=max(dp[i-1][4],dp[i-1][3]+prices[i]);
}
return dp[prices.size()-1][4];
}
};