在本题中,我们需要采用贪心算法。考虑局部最优解,然后再考虑全局最优解。
比如,在本题中,我们先把胃口和饼干排序,排序之后我们可以采用用大饼干来喂大胃口的孩子,如果此时能满足,那么计数加一;如果不能满足,那就用这个饼干去喂胃口稍微小一点的孩子,以此类推。
注意,在本题中,以胃口为for循环进行遍历,无论当前饼干是否满足胃口,都会走到下一个孩子处,如果满足,那么饼干也选择下一个,如果不满足,就用当前饼干去喂下一个孩子。
这就是倒序的遍历,以胃口为遍历条件,无论怎样都移动胃口,然后根据是否满足条件,来移动饼干。
class Solution {
// 思路2:优先考虑胃口,先喂饱大胃口
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int count = 0;
int start = s.length - 1;
// 遍历胃口
for (int index = g.length - 1; index >= 0; index--) {
if(start >= 0 && g[index] <= s[start]) {
start--;
count++;
}
}
return count;
}
}
也可以遍历饼干,用小饼干去满足小胃口,
class Solution {
// 思路1:优先考虑饼干,小饼干先喂饱小胃口
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int start = 0;
int count = 0;
for (int i = 0; i < s.length && start < g.length; i++) {
if (s[i] >= g[start]) {
start++;
count++;
}
}
return count;
}
}