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

73 阅读2分钟

题目链接: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;
     }
 }

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

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