class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算最大收益
* @param prices int整型vector 股票每一天的价格
* @return int整型
*/
int maxProfit(vector<int>& prices) {
// write code here
// if (prices.empty()||prices.size() == 1) return 0;
// int n = prices.size();
// vector<vector<int>> dp(2,vector<int>(n,0));//0行表示不持股1行表示持股
// dp[0][0] = 0;
// dp[1][0] = -prices[0];
// for(int j=1;j<n;j++){
// dp[0][j] = max(dp[0][j-1],dp[1][j-1]+prices[j]);
// dp[1][j] = max(dp[1][j-1],dp[0][j-1]-prices[j]);
// }
// return max(dp[0][n-1],dp[1][n-1]);
if (prices.empty() || prices.size() == 1) return 0;
int n = prices.size();
vector<vector<int>> dp(2, vector<int>(n,
0)); //0行表示不持股1行表示持股
int dp0 =0,dp1 =-prices[0];
for (int j = 1; j < n; j++) {
int cur0 ,cur1;
cur0 = max(dp1+prices[j],dp0);
cur1 = max(dp1,dp0-prices[j]);
dp0 = cur0;
dp1 = cur1;
}
return max(dp0, dp1);
}
};