• 【代码随想录】Day 49 动态规划10 (买卖股票Ⅰ、Ⅱ)


    买卖股票的最佳时机

    https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/
    在这里插入图片描述
    dp[i]表示在第i天时,卖/不卖股票能获得的最大利润:
    1、卖股票:dp[i] = prices[i] -minPrice(i天以前的最低价格)
    2、不卖股票:dp[i] = dp[i-1](因为不卖股票,所以状态和前一天保持一致)
    ∴dp[i] = max(dp[i-1], prices[i] - minPrice);

    class Solution {
    public:
        int maxProfit(vector<int>& prices) {
            int n = prices.size();
            if (n < 2) return 0;
    
            vector<int> dp(n, 0);// dp[i] 表示在第i天结束时的最大利润
            int minPrice = prices[0];
            for (int i = 1; i < n; i++) {
                if (prices[i] < minPrice) minPrice = prices[i];
    
                dp[i]= max(dp[i-1],prices[i] - minPrice);
            }
            return dp.back();
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    买卖股票的最佳时机Ⅱ

    https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/
    在这里插入图片描述
    树形dp类似,多加一个vector存储当前状态:dp[i][0]表示不持有股票,dp[i][1]表示持有股票。每种状态都由dp[i-1][0]和dp[i-1][1]两种状态转移而来,所以dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]):含义是第i天没股票,可能是由于i-1天也没股票,或者是i-1天有股票但是第i天给卖了,对于本来就没股票的情况利润保持一致就行,对于卖掉股票的情况则需要在dp[i-1][1]的利润上加上卖掉股票增加的利润;
    dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i])同理,只不过一个收钱一个花钱罢了。

    class Solution {
    public:
        int maxProfit(vector<int>& prices) {
            int n = prices.size();
            vector<vector<int>> dp (n, vector<int> (2, 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], dp[i-1][0] - prices[i]);
            }
            return max(dp.back()[0], dp.back()[1]);
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    Python数据分析与机器学习20- 逻辑回归项目实战4-模型评估方法:混淆矩阵
    [MRCTF2020]套娃
    知识图谱从入门到应用——知识图谱的技术结构
    scrcpy笔记
    矩 阵 压 缩
    新库上线 | CnOpenData 新三板公司专利及引用被引用数据
    J2Cache
    盘点网安最好入手的10大岗位,最高月薪30K!
    Hard negtive node(硬负样本节点)与 Easy negative nodes(简单样本节点)
    i.MX8M Plus开发板交叉编译qt5.15.2
  • 原文地址:https://blog.csdn.net/weixin_43785314/article/details/132747022