leetcode 121. 买卖股票的最佳时机 简单 贪心

题目:
在这里插入图片描述
分析:买股票怎么买赚钱最多(贪心)。有可能陷入一个误区,从最低的价格买从最高的价格卖,看似没错,其实不一定,有可能最高的价格在最低的价格之前,那么就没办法做到从最低的价格买从最高的价格卖,但不能这样买不代表不能赚钱。如何做到赚钱最多这个问题有意义的话那么价格一定要是有波动的,如果一直上升那从头买从尾卖即可,如果一路下跌那么不买即可,既然价格有波动的话我们可以把问题转换一下,求价格之间的差值,然后从差值里求最大连续子序和,问题就转换了。
currentMax ,soFarMax分别记录当前位置的和最大值以及迄今为止的和最大值,先更新currentMax 再根据currentMax 更新soFarMax,soFarMax若比currentMax大,则暂时不买currentMax那天的股票,往后看再考虑

代码

class Solution {
    public int maxProfit(int[] prices) {
        if(prices == null || prices.length == 0){
            return 0;
        }
        int[] diff = new int[prices.length-1];
        for(int i = 0; i < diff.length; i++){
            diff[i] = prices[i+1] - prices[i];
        }
        //当前位置的和最大值
        int currentMax = 0;
        //迄今为止的和最大值
        int soFarMax = 0;
        for(int i = 0; i < diff.length; i++){
            currentMax = Math.max(currentMax+diff[i], diff[i]);
            //soFarMax若比currentMax大,则暂时不买currentMax那天的股票,往后看再考虑
            soFarMax = Math.max(currentMax, soFarMax);
        }
        if(soFarMax < 0){
            return 0;
        }
        return soFarMax;
    }
}

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值