概述
贪心算法的每次计算的局部最优解可以推出最后的整体最优解。
可以用贪心算法的问题无后效性,即后面阶段的求解不会修改前面阶段的结果。
贪心算法求解之前往往需要预处理,比如排序
例题
这里介绍两个例题。
这个问题的基础是小饼干给胃口小的,可以充分利用饼干。 于是将饼干和小孩从小到大排序,一个个比对
var findContentChildren = function(g, s) {
g.sort((a,b)=>a-b)
s.sort((a,b)=>a-b)
let size=0
for(let i=0;i<s.length;i++){
if(s[i]>=g[size]){
size++
}
}
return size
};
这个问题的基础是元素的右边界约小,越能容下更多元素,从而移除更少的元素。
于是按右边界升序排列,如果遇到有重叠的就移除,否则保留。
var eraseOverlapIntervals = function(intervals) {
let len=intervals.length
if(len===0) return 0
intervals.sort((a,b)=>a[1]-b[1])
let size=1,cur=intervals[0][1]
for(let i=1;i<len;i++){
if(intervals[i][0]>=cur){
size++
cur=intervals[i][1]
}
}
return len-size
};