力扣455.分发饼干(java)-贪心算法思想及基本步骤

贪心算法核心思想

贪心算法的基本思想是每一步都做出当时看起来最佳的选择,可以理解为,贪心算法在求解过程中的每一步都选择一个局部最优的策略,把整个问题的规模压缩,,最后把每一步的结果合并起来形成最终的节,希望通过局部最优解得到全局的最优解。

基本步骤

(1)从一个初始解开始;
(2)采用迭代的过程,当可以向目标前进一步时,就根据局部最优的策略,得到一个部分解,将问题规模缩小;
(3)将所有的解综合起来。

455.分发饼干(Java)

接下来通过求解力扣上分发饼干这道题,加深对贪心的理解。

1.需要考虑的问题

  1. 核心问题为尽可能满足越多数量的孩子寻找局部最优解(求解重点);
  2. 如何将饼干的大小和孩子的胃口进行比较;

2.方案(序号分别与问题对应)

结合贪心的思想:将大问题分解为每个小问题,为每个小问题做出最优的解,再将所有解结合就是整个问题的解。

  1. 根据贪心的思想,先将整个问题拆分成为每个孩子分饼干,同时需要分配的孩子尽可能多,那么就需要合理利用资源(不能浪费饼干),采取的策略是大胃口对大饼干,小胃口对小饼干(反例:如果小胃口对应大饼干,虽然能够满足小胃口,但是小饼干却不能满足大胃口的孩子)。
  2. 为了方便比较(大对大,小对小),将两个数组事先排序即可,全都从头遍历,或者全都从尾开始遍历。
  3. 具体实现(java):
class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);    //对两个数组排序
        int maxKid = 0;    //记录孩子的数量
        int gNode=0;       //孩子胃口数组的下标
        for (int i = 0; i < s.length && gNode < g.length; i++) {
            if (s[i] >= g[gNode]) {    //如果饼干大小大于孩子的胃口
                gNode++;        
                maxKid++;              //说明可以将这个孩子喂饱
            }
        }
        return maxKid;                //返回结果
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值