什么是贪心
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
贪心的套路(什么时候用贪心)
刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。
贪心一般解题步骤
将问题分解为若干个子问题
找出适合的贪心策略
求解每一个子问题的最优解
将局部最优解堆叠为全局最优解
这个四步其实过于理论化了,我们平时在做贪心类的题目 很难去按照这四步去思考,真是有点“鸡肋”。
做题的时候,只要想清楚 局部最优 是什么,如果推导出全局最优,其实就够了。
不好意思了,贪心没有套路,说白了就是常识性推导加上举反例。
分发饼干
思路
大饼干先满足大胃口的人,局部最优到全局最优,人数最多
对胃口进行遍历,用index控制 饼干数组的遍历
当遇到饼干>=人的胃口 result++ 饼干索引--
摆动序列
思路
局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值了
整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列
统计峰值就行。
prediff<0 curdiff>0 || > < 有波动 就统计
要注意三种情况
上下坡中有平坡 数组首尾两端 单调坡中有平坡
最大子序和
局部最优到全局最优
局部最优:当连续和 为负数时,立刻放弃,从下一个元素重新计算连续和,因为负数加上下一个连续和只会越来越小