(48/60)买卖股票的最佳时机、买卖股票的最佳时机Ⅱ

day48

买卖股票的最佳时机

leetcode:121. 买卖股票的最佳时机

动态规划

代码实现

/*
意义:dp[i][0]下标为i天持有股票的最大收益;dp[i][1]下标为i天不持股的最大收益
递推:
之前买入、当天买入:dp[i][0] = max(dp[i-1][0],-prices[i]);
之前卖出、当天卖出:dp[i][1] = max(dp[i-1][1],dp[i-1][0] + prices[i]);
初始化:
dp[0][0] = -prices[0];
d[[0][1] = 0;
其余为0
遍历:ltr
*/
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<vector<int>> dp(prices.size(),vector<int>(2,0));
        dp[0][0] = -prices[0];
        for(int i = 1;i < prices.size();i++){
            dp[i][0] = max(dp[i-1][0],-prices[i]);
            dp[i][1] = max(dp[i-1][1],dp[i-1][0] + prices[i]);
        }

        return max(dp[prices.size()-1][0] , dp[prices.size()-1][1]);
    }
};

买卖股票的最佳时机Ⅱ

leetcode:122. 买卖股票的最佳时机 II

动态规划

思路

区别在于可以重复买入、售出。

售出是一样的,区别在于购入时。由于可以重复购入,每次递推要带上之前的收益。

代码实现

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<vector<int>> dp(prices.size(),vector<int>(2,0));
        dp[0][0] = -prices[0];
        for(int i = 1;i < prices.size();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 max(dp[prices.size() - 1][0],dp[prices.size()-1][1]);
    }
};
posted @ 2024-03-21 23:48  Tazdingo  阅读(50)  评论(0)    收藏  举报