力扣122-买卖股票的最佳时机 II(java详细题解)

题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)

前情提要:

因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。

贪心方法:局部最优推出全局最优。

如果一个题你觉得可以用局部最优推出全局最优,并且没有反例来反驳的话就可以用贪心来试试。

题目思路:

该题大家一开始可能不太好入手,一开始想的都是我在最低一天的买入,再在最高的一天卖出。

但是这样你不好把握这个区间,我在最低的买,最高的卖就一定能达到最大利润吗?

也不一定,所以我们要把区间分的更细,拿每一天的利润来计算总利润。

局部最优:每一天的利润只要是正数,就加上,如果是负的就不管。

全局最优:达到最大利润。

因为只要每天的利润是正的就会让总利润增加,这就是我们贪的地方。

最终代码:

class Solution {
    public int maxProfit(int[] prices) {
        //思路分析 该题的关键就是将每天的利润都表示出来
        //遇到正的利润才会让我的总利润增加
        //所以局部最优:选取每天为正的利润
        //全局最优:获得最大利润
        int result = 0;
        //遍历每一个元素 注意这里的i为1 是指我在第二天我才知道我第一天的利润 
        //拿第二天减去第一天才是第一天的利润 如果是0 那第一天的利润就算不出来了
        for(int i = 1;i < prices.length;i ++){
            //prices[i] - prices[i - 1]就是每天的利润 将该利润与0相比  如果比0大那么就取利润本身
            //如果比0小 即负利润 就取0 即不加这个利润
            result += Math.max(prices[i] - prices[i - 1],0);
        }
        return result;
    }
}

这一篇博客就到这了,如果你有什么疑问和想法可以打在评论区,或者私信我。

我很乐意为你解答。那么我们下篇再见!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值