首页 > 其他 > 详细

LeetCode(#455):分发饼干

时间:2021-03-28 17:05:06      阅读:15      评论:0      收藏:0      [点我收藏+]

技术分享图片

一、前言

本题为LeetCode第455题,是一道 贪心算法 相关的算法题,难度简单。

本题链接:#455.分发饼干

二、题目

有一群孩子和一堆饼干,每个孩子只能得到一个饼干。每个孩子 i 有一个对应的胃口值 g[i] ,每个饼干 j 有一个对应的尺寸 s[j] 。只有饼干的尺寸不小于孩子的胃口值时,这个孩子才能满足。求解最多有多少孩子可以满足。

示例1:

Input: [1,2], [1,2,3]	// 分别代表孩子胃口值和饼干尺寸
Output: 2	// 表示最多能满足2个孩子

示例二:

Input: [1,2,3], [1,1]
Output: 1

三、思路

? 首先分析题干要求,每个孩子只能得到一块饼干,饼干尺寸不小于孩子胃口值才能使孩子满足,求解满足孩子数量的最大值。这是一道求最优解的题目,并且考虑整体最优解(同时考虑所有孩子)比较复杂,可以拆分成一个个子问题,即每次只考虑一个孩子,求出局部最优解,最终将所有的局部最优解合成整体最优解。也就是贪心策略。

? 由于胃口值最小的孩子最容易得到满足,因此我们先考虑这个孩子。为了能够最多地满足后面胃口值更大的孩子,我们应该尽量把尺寸小但又能满足这个孩子的饼干分给他,即尺寸大于等于这个孩子胃口值且尺寸最小的饼干,这就是局部最优解。满足这个孩子后,我们根据相同的方法,考虑剩余孩子中胃口值最小的那个孩子,直到不存在满足条件的饼干为止。

四、Java代码

public class soultion {
    public int assignCookies(int[][] g, int[][] s) {
        // 首先将胃口值数组g和尺寸值数组s内的元素进行排序
        Arrays.sort(g);
        Arrays.sort(s);
        int n = 0;
        
        // for循环遍历饼干尺寸数组,找出符合条件的饼干
        // 也可用while循环,可自己尝试
        for(int i = 0; i < s.length; i++) {
            if( s[i] >= g[n] ) n++;
            if( n == g.length ) break;
        }
        
        return n;
    }
}

LeetCode(#455):分发饼干

原文:https://www.cnblogs.com/ziqin/p/14588245.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!