Bootstrap

Day28 贪心算法 part02

122.买卖股票的最佳时机II

本题解法很巧妙,本题大家可以先自己思考一下然后再看题解,会有惊喜!

class Solution {
    public int maxProfit(int[] prices) {
        //分析每一天的情况。只要保证今天买,明天卖可以不亏钱,那就是最大的利润。把每一天可以赚钱的机会都不放过,先把能挣到的钱放进口袋里。
        int sum = 0;
        for(int i = 0; i < prices.length - 1; i++){
            if(prices[i+1] > prices[i]){
                sum += (prices[i+1]-prices[i]);
            }
        }
        return sum;       
    }
}

总结

1.本题是贪心算法最直观的体现。我们怎么保证总的利润最大呢?分析每一天的情况。只要保证今天买,明天卖可以不亏钱,然后把每一天可以赚钱的机会都不放过,先把能挣到的钱放进口袋里,那就是最大的利润。

2.重点是分析每一天的情况,只要今天买,明天卖可以挣到钱就行。不要想着今天买,隔几天再卖,这种方法和 今天买,明天卖 最后累加的收益是一样的。

3.本题中理解利润拆分是关键点! 不要整块的去看,而是把整体利润拆为每天的利润。一旦想到这里了,很自然就会想到贪心了,即:只收集每天的正利润,最后稳稳的就是最大利润了。利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑!<

;