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 天整体去考虑!<