题目链接: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;
}
}
这一篇博客就到这了,如果你有什么疑问和想法可以打在评论区,或者私信我。
我很乐意为你解答。那么我们下篇再见!