LeetCode121. 买卖股票的最佳时机
题目链接:121. 买卖股票的最佳时机 - 力扣(LeetCode)
思路:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int len = prices.size();
if(len == 0) return 0;
vector<vector<int>> dp(len, vector<int>(2));//dp[i][0]表示第i天持有股票的最多现金
//dp[i][1]表示不持有股票所得的最多现金
dp[0][0] -= prices[0];//初始化
dp[0][1] = 0;
for(int i = 1; i < len; i++) {
dp[i][0] = max(dp[i - 1][0], -prices[i]);//持有股票
dp[i][1] = max(dp[i - 1][1],prices[i] + dp[i - 1][0]);//不持有股票
}
return dp[len - 1][1];
}
};
LeetCode 122.买卖股票的最佳时机II
题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)
思路:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int len = prices.size();
if(len == 0) return 0;
vector<vector<int>> dp(len, vector<int> (2));
dp[0][0] -= prices[0];
dp[0][1] = 0;
for(int i = 1; i < len; i++) {
//因为一只股票可以买卖多次,所以当第i天买入股票的时候,所持有的现金可能有之前买卖过的利润。
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);
}
return dp[len - 1][1];
}
};