贪心算法案例 - 分发饼干(Easy)
1. 题目描述
有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小。每个孩子只能吃最多一个饼干,且只有饼干的大小大于孩子的饥饿度时,这个孩子才能吃饱。求解最多有多少孩子可以吃饱?
2. 输出案例
输入两个数组,分别代表孩子的饥饿度和饼干的大小。输出最多有多少孩子可以吃饱的数量。
Input: [1,2], [1,2,3]
Output: 2
在上面的输入案例中,可以给孩子分配[1, 2], [1, 3], [2, 3] 这三种组合的任意一种。
3. 分析
要求最多有多少个孩子可以吃饱,也就是说每个孩子尽可能的被分配到和它饥饿度近似的饼干。由于饥饿度最小的孩子可以吃最少的饼干就能吃饱,因此我们可以首先考虑饥饿度最小的孩子。为了尽量使得剩下的饼干可以满足饥饿度更大的孩子,所以我们应该把大于等于这个孩子饥饿度的、且大小最小的饼干给这个孩子。满足了这个孩子之后,我们采取同样的策略,考虑剩下孩子里饥饿度最小的孩子,直到没有满足条件的饼干存在。
本题的贪心策略:给剩余孩子中最小饥饿度最小的孩子分配最小的,能够满足该孩子的饼干。
4. 代码
class Solution {
public int findContentChildren(int[] childes, int[] cookies) {
// 对孩子的饥饿度进行排序
Arrays.sort(childes);
// 对于每个饼干的大小进行排序
Arrays.sort(cookies);
int cookie = 0, child = 0; // cookie表示当前饼干的索引, child表示当前孩子的索引
while (child < childes.length && cookie < cookies.length) {
// 当前该饼干能够满足当前该孩子,选择下一个孩子和饼干继续判断
if (childes[child] <= cookies[cookie]) {
child++;
cookie++;
} else { // 当前孩子不能满足当前该孩子,选择更大的饼干
cookie++;
}
}
return child;
}
}
标签:分发,饼干,孩子,最小,childes,饥饿,child,贪心
From: https://www.cnblogs.com/lilyflower/p/18508667