引言
首先贪心算法与大部分算法不同的是,贪心算法不是只需要掌握核心模版就可以解决所有问题的一种算法,与其说贪心是一种算法不如说是一种贪心策略,每一道题都可以使用不同的贪心策略,所以贪心算法也是一种学无止境的算法
贪心算法的底层原理是->局部最优推导到全局最优
1.把原始问题分为若干步,解决每一步问题
2.解决每一步时都需要选择解决当前步的最优方案
3."希望"找到全局最优解
4.贪心策略是没有模板的,每一道题都可能是不同的贪心策略
5.贪心策略的正确性需要被证明,否则贪心策略可能是错误的(证明方法就是数学中的证明方法)
1.题目解析
题目来源
860.柠檬水找零——力扣
测试用例
2.算法原理
3.实战代码
class Solution {
public:
bool lemonadeChange(vector<int>& bills)
{
int five = 0,ten = 0;
for(auto e : bills)
{
if(e == 5)
{
five++;
}
else if(e == 10)
{
if(five == 0)
{
return false;
}
ten++;
five--;
}
else
{
if(ten && five)
{
five--;
ten--;
}
else if(five >= 3)
{
five -= 3;
}
else
{
return false;
}
}
}
return true;
}
};
4.贪心策略正确性的证明