理论
本质:找到每个阶段的局部最优,然后去推导得到全局最优
两个极端:常识&&很难:
很多同学通过了贪心的题目,但都不知道自己用了贪心算法,因为贪心有时候就是常识性的推导,所以会认为本应该就这么做!
套路:
贪心没有套路,说白了就是常识性推导加上举反例
做题的时候,只要想清楚 局部最优 是什么,如果推导出全局最优,其实就够了。
贪心算法一般分为如下四步:
将问题分解为若干个子问题
找出适合的贪心策略
求解每一个子问题的最优解
将局部最优解堆叠成全局最优解
这个四步其实过于理论化了,我们平时在做贪心类的题目 很难去按照这四步去思考,真是有点“鸡肋”。
Leetcode题目简单题455.分发饼干
思路:大饼干 喂 胃口大的kid,才能充分利用
class Solution { public int findContentChildren(int[] g, int[] s) { Arrays.sort(g); Arrays.sort(s); int j=s.length-1; int sum = 0; for(int i=g.length-1;i>=0;i--){ if(j>=0 && s[j]>=g[i]){ sum++; j--; } } return sum; }}
中等题序列问题—376. 摆动序列股票问题—122. 买卖股票的最佳时机 II两个维度权衡问题—135. 分发糖果