给定一个数组,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择某一天买入这只股票,并选择在未来的一个不同的日子卖出该股票。【LeetCode Hot 100】

力扣热题100之第121题:

先贴代码:

class Solution {
    public int maxProfit(int[] prices) {
        /**
        * 遍历数组找到历史价格最低点,再往后遍历,如果出现那一天价格比最低点高,说明有利润(差值)
        * 记录下这个利润,继续往后遍历,记录下最大利润,如果最低点后面无元素了,说明
        * 这笔交易里没有利润可赚。
        */
        //定义最低价格min,初始值为第一天的价格
        int min = prices[0];
        //定义最大差值diffence
        int diffence = 0;
        //for循环遍历,若有一天价格小于最低价格,则更新最低价格,若大于则求其利润,并维护最大利润
        for(int i = 0;i < prices.length;i++){
            if(prices[i] < min){
                min = prices[i];
            }else if(prices[i] - min > diffence){
                diffence = prices[i] - min;
            }
        }
        return diffence;
    }
}

情景再现:

假设我们并不知道股票的行情,又想获得最大的利润,那么我先买下第一天的股票,等到第二天如果股票价格下跌,我就赶紧卖掉,重新买了第二天的股票,如果第三天股票继续下跌,那么我就赶紧再卖掉,买第三天的股票。

如果第三天股票上涨啦,那么我不立马卖掉,我先留在手里观望,等到股票涨到最大值的时候我再卖,就可以获得最大利润了。第四天股票继续上涨,太好了,我再观望一手,看看明天怎么说。结果等到第五天,股票下跌了!比第二天的股票价格还低,完蛋,现在后悔死了,早知道我第四天的时候卖就好了,这时候莫得办法,只能把第二天的股票卖掉,买了第五天的股票

又到了第六天,看了眼股票,发现上涨了好多,比第四天还要高好多哦!这下我得赶紧卖股票了,因为第七天就收盘不许买卖了,而且今天卖掉的话是可以获得最大利润的,所以我就立马给股票卖掉了,获得了最大利润。

思路解析:

通过以上的实景还原,我们知道了,先买下第一天的股票,若之后有第 i 天股票比第一天的低,那么就重新买那一天的股票,之后在看是否股票会涨,如果股票一直呈现下跌的趋势,那么就说明不会获得利润了;如果遇到了上涨的股票,就先记下那一天(第 j 天)可以获得的利润,如果之后的股票虽然会有上涨但是涨幅不必之前的利润,就说明那一天是可以获得最大利润的,那么我就在那一天卖掉股票,以获取最大利润。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值