什么是贪心算法
在讲解本体前肯定有同学会有疑问,什么是贪心算法呢?
贪心算法总结成一句话,就是:由局部最优解推出全局最优解
可能在你看到了这句话以后还是不太清楚贪心算法的具体用法,没关系,我们从题目中入手,就能够更直观地看出贪心算法的应用
122. 买卖股票的最佳时机 II
先来看看具体的题目:
问题分析
简单来说,就是给你当日的股票价格,每天只能买进或者卖出股票,要求得这些天中能获得的最大利润
解题思路
股票嘛,有涨有跌。提起股票,我们脑中是不是浮现了股票走势的曲线图?那我们就可以把题目给出的数据转化为折线图先看看。
我们先以第一组数据为例:
局部最优解
我们再从图中观察,怎么样才算是我们赚了呢?很简单,就是折线上升的这些距离
全局最优解
想要求得给定天数中获得的最大利润,我们就将所有处于上升阶段的线段加和就可以了
代码
经过上面的详细分析,我们很容易写出如下代码:
class Solution {
public int maxProfit(int[] prices) {
if(prices.length<=1) return 0;
int res=0;
for(int i=1;i<prices.length;i++){
int curProfit=prices[i]-prices[i-1];
if(curProfit>0)
res+=curProfit;
}
return res;
}
}
总结
怎么样,这题的思路是不是很简单?而且我们在不知不觉中就已经使用的贪心算法
还记得我们是怎么描述贪心算法的吗? 由局部最优解推出全局最优解
局部最优解在此题中我们可以理解为图中的上升线段
那么全局最优解就是所有上升线段的加和啦
怎么样,了解了贪心算法后是不是以前在不知不觉中也曾经用过贪心算法?贪心算法本身是一种非常常见的思考问题的方法,多加练习,相信大家一定能够更加熟练地掌握贪心算法!