Leetcode初学——买卖股票的最佳时机|| 及 贪心算法的简单介绍

题目:

分析:

我的计算方法就是当天买,第二天卖,如果第二天卖的价格是负数,则当天不买,一直到最后一天

即    如果     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;
    }
}

 

结果:

 

重点

什么是贪心算法?

       贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解

      贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

                                                                                                                                       ————摘自百度百科《贪心算法》

 

关键词:局部最优解      无后效性

 

我们上面对这道题目的解法就已经满足了局部最优解和无后效性

所以我们上面的解题方法就是贪心算法的应用

 

写在结尾

       贪心算法很神秘么?并不,我们只是通过了一步步的累加,我们就实现了贪心算法,从这里也就可以看出一些事情,算法本身并不神秘,但算法的名称很神秘。在我们没有接触算法时,听到贪心算法,动态规划这样的名词的时候,就容易对算法望而却步,但当我们实际学习并应用的时候,我们就能发现,所谓的贪心算法,就是在满足局部最优解和无后效性的累加,这时,我们对算法的畏惧之心也就淡了。

      我们对算法可以抱有一种敬重之心,但没必要去畏惧他。战胜算法恐惧的最好办法,就是去拨开算法的面纱,去看他的本质,以简单题目去应证自己的猜想,用自己的话去总结算法,这样我们就可以将算法,真正的掌握么,而不是一味的去套模板。

      仅以此拙笔浅文与各位共勉

 

 

 

 

 

 

 

 

 

 

 

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值