买卖股票的最好时机(一)_牛客题霸_牛客网 (nowcoder.com)
只可以买入卖出一次。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
//dp[i][0]表示某一天不持股到该天为止的最大收益,dp[i][1]表示某天持股,到该天为止的最大收益
vector<vector<int> > dp(n, vector<int>(2, 0));
//第一天不持股,总收益为0
dp[0][0] = 0;
//第一天持股,总收益为减去该天的股价
dp[0][1] = -prices[0];
//遍历后续每天,状态转移
for(int i = 1; i < n; i++){
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] + prices[i]);
dp[i][1] = max(dp[i - 1][1], -prices[i]);
}
//最后一天不持股,到该天为止的最大收益
return dp[n - 1][0];
}
};