121. 买卖股票的最佳时机
dp[i][0] 表示第i天持有股票所得最多现金,dp[i][0] 表示第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]);
- class Solution {
- public:
- int maxProfit(vector<int>& prices) {
- int len = prices.size();
- if (len == 0) return 0;
- vector
int>> dp(len, vector<int>(2)); - 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];
- }
- };
122.买卖股票的最佳时机II
和上面的不同在于可以多次买入卖出。
dp[i][0] 表示第i天持有股票所得最多现金,dp[i][0] 表示第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] + dp[i - 1][0]);
- class Solution {
- public:
- int maxProfit(vector<int>& prices) {
- int len = prices.size();
- vector
int>> dp(len, vector<int>(2, 0)); - dp[0][0] -= prices[0];
- dp[0][1] = 0;
- for (int i = 1; i < len; i++) {
- dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]); // 注意这里是和121. 买卖股票的最佳时机唯一不同的地方。
- dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);
- }
- return dp[len - 1][1];
- }
- };