主页有其他数据结构内容(持续更新中)
难度:Easy
代码:
class Solution {
public:
int maxProfit(vector<int>& prices) {
// dp[i][0]表示第i天持有股票所得最多现金
// 一开始现金是0,那么加入第i天买入股票现金就是-prices[i],这是一个负数
// dp[i][1]表示第i天不持有股票所得最多现金
vector<vector<int>> dp(prices.size(), vector<int>(2, 0));
dp[0][0] = -prices[0];
dp[0][1] = 0;
for(int i = 1; i < prices.size(); i++) {
// 如果第i天持有股票,那么有两种可能:昨天甚至更早就已经持有,或者今天刚刚买入
dp[i][0] = max(dp[i - 1][0], -prices[i]);
// 如果第i天不持有股票,那么也有两种可能:昨天甚至更早就已经卖出,或者今天刚刚卖出
dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);
}
return dp[prices.size() - 1][1];
}
};