121. 买卖股票的最佳时机

在这里插入图片描述
差点又写成暴力了,来一个minn记录当天之前的最小值即可,记得更新minn,minn初始化prices[0]

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //最优解=dp
        //dp[i]记录从这一天买入后,后面哪天卖出自己赚的最多,如果往后就是暴力了
        //所以dp[i]是今天卖出所能最多赚到的钱,用一个minn记录前面的最小值,如果最小值都大于今天的,就是0
        int minn = prices[0];
        int res = 0;
        for(int i = 1; i < prices.size(); ++i){
            res = max(res,prices[i]-minn);
            minn = min(minn,prices[i]);
        }
        return res;
    }
};

二刷,记录当天之间的最小值即可。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //暴力就是记录当前元素之前最小的元素是多少
        //dp[i]记录的是前i天,不包括自身的买股票的最低价格
        //因为只要记录最小值,所以一个数字即可
        int minn = INT_MAX;
        int res = 0;
        for(int i = 0; i < prices.size(); ++i){
            res = max(res,prices[i]-minn);
            minn = min(prices[i],minn);
        }
        return res;
    }
};

三刷,记录当前天之前的最小值即可,用当前减去前面的最小值,看看能否更新res。用完minn之后看看当前天能否更新minn

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //dp,dp[i]记录的是以当天卖出最多能赚多少钱
        if(prices.size()<=1) return 0;
        //和dp没关系,来一个记录最小的,用当天减去最小看看能否更新res即可
        int res = 0;
        int minn = INT_MAX;
        for(int i = 0; i < prices.size(); ++i){
            res = max(prices[i]-minn,res);
            minn = min(prices[i],minn);
        }
        return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值