前端算法系列(9):贪心

177 阅读1分钟

概述

贪心算法的每次计算的局部最优解可以推出最后的整体最优解。

可以用贪心算法的问题无后效性,即后面阶段的求解不会修改前面阶段的结果。

贪心算法求解之前往往需要预处理,比如排序

例题

这里介绍两个例题。

这个问题的基础是小饼干给胃口小的,可以充分利用饼干。 于是将饼干和小孩从小到大排序,一个个比对

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
};