剑指 Offer 63. 股票的最大利润

在这里插入图片描述

class Solution {
public:
    int maxProfit(vector<int>& prices) {

        // 毫无疑问,肯定时最低点买入时利润最大
        // 因为卖出点都是price[i],我买入时越低(低点在i之前),我的利润就越大

        // 1. 确定dp数组及下标含义
        //  dp[i] 代表前i天的最大利润

        // 2. 确定递推
        //  minPrice = min(minPrice, prices[i]);  //  更新最低点 
        //  dp[i] = max(dp[i-1], prices[i]-minPrice);  // 昨天利润更高 or 在最低点买入并在第i天售出时利润更高

        // 3. 确定初值
        //  minPrice = prices[0]
        //  dp[0] = 0   // 不买就不亏

        // 4. 确定遍历
        //  for(int i=1; i<prices.size(); i++)    <=0直接返回0

        // 5. 举例
        // [7, 1, 5, 3, 6, 4]
        // i =0 ,  minPrice = 7 , dp[0] = 0 
        // i = 1,  minPrice = 1 , dp[1] = 0
        // i = 2,  minPrice = 1,  dp[2] = 4
        // i = 3,  minPrice = 1,  dp[3] = 4
        //...

        int n = prices.size()-1;
        if(n<=0)
            return 0;

        vector<int> dp(n+1);
        int minPrice = prices[0];
        dp[0] = 0;

        for(int i = 1; i<=n; i++){
            minPrice = min(minPrice, prices[i]);
            dp[i] = max(dp[i-1], prices[i]-minPrice);
        }

        return dp[n];

    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值