本题为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
? 首先分析题干要求,每个孩子只能得到一块饼干,饼干尺寸不小于孩子胃口值才能使孩子满足,求解满足孩子数量的最大值。这是一道求最优解的题目,并且考虑整体最优解(同时考虑所有孩子)比较复杂,可以拆分成一个个子问题,即每次只考虑一个孩子,求出局部最优解,最终将所有的局部最优解合成整体最优解。也就是贪心策略。
? 由于胃口值最小的孩子最容易得到满足,因此我们先考虑这个孩子。为了能够最多地满足后面胃口值更大的孩子,我们应该尽量把尺寸小但又能满足这个孩子的饼干分给他,即尺寸大于等于这个孩子胃口值且尺寸最小的饼干,这就是局部最优解。满足这个孩子后,我们根据相同的方法,考虑剩余孩子中胃口值最小的那个孩子,直到不存在满足条件的饼干为止。
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;
}
}
原文:https://www.cnblogs.com/ziqin/p/14588245.html