题目:

分析:
我的计算方法就是当天买,第二天卖,如果第二天卖的价格是负数,则当天不买,一直到最后一天
即 如果 prices[i+1]-prices[i]>0 则 res+= prices[i+1]-prices[i]
如果 prices[i+1]-prices[i]<=0 则 res+= 0
i为天数 i+1<=最大天数
我们从几种可能性来分析这道题
持续上涨型
像这样的类型
我们始终可以做到prices[i+1]-prices[i]>0
一天一天累加即可得到res=4
持续下跌型
像这样的类型
我们每天得到的都是prices[i+1]-prices[i]<0
所以我们res每天都是+0
最终res就是0
跌宕起伏型
对于这样的类型,我们可以一天一天来看
第一天 prices[i+1]-prices[i]<0 res+=0
第二天prices[i+1]-prices[i]>0 res+=prices[i+1]-prices[i] =4
第三天 prices[i+1]-prices[i]<0 res+=0
第四天prices[i+1]-prices[i]>0 res+=prices[i+1]-prices[i] =10
此时i+1=5 达到我们的限制条件
代码:
class Solution {
public int maxProfit(int[] prices) {
int res=0;
for(int i=0;i<prices.length-1;i++){
if(prices[i+1]-prices[i]>0)
res+=prices[i+1]-prices[i];
}
return res;
}
}
结果:
重点
什么是贪心算法?
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
————摘自百度百科《贪心算法》
关键词:局部最优解 无后效性
我们上面对这道题目的解法就已经满足了局部最优解和无后效性
所以我们上面的解题方法就是贪心算法的应用
写在结尾
贪心算法很神秘么?并不,我们只是通过了一步步的累加,我们就实现了贪心算法,从这里也就可以看出一些事情,算法本身并不神秘,但算法的名称很神秘。在我们没有接触算法时,听到贪心算法,动态规划这样的名词的时候,就容易对算法望而却步,但当我们实际学习并应用的时候,我们就能发现,所谓的贪心算法,就是在满足局部最优解和无后效性的累加,这时,我们对算法的畏惧之心也就淡了。
我们对算法可以抱有一种敬重之心,但没必要去畏惧他。战胜算法恐惧的最好办法,就是去拨开算法的面纱,去看他的本质,以简单题目去应证自己的猜想,用自己的话去总结算法,这样我们就可以将算法,真正的掌握么,而不是一味的去套模板。
仅以此拙笔浅文与各位共勉