核心思路:
给一个孩子的饼干应当尽量小并且又能满足该孩子,这样大饼干才能拿来给满足度比较大的孩子。
因为满足度最小的孩子最容易得到满足,所以先满足满足度最小的孩子。
贪心算法
在以上的解法中,我们只在每次分配饼干时选择一种看起来是当前最优的分配方法,但无法保证这种局部最优的分配方法最后能得到全局最优解。我们假设能得到全局最优解,并使用反证法进行证明,即假设存在一种比我们使用的贪心策略更优的最优策略。如果不存在这种最优策略,表示贪心策略就是最优策略,得到的解也就是全局最优解。
假设一个孩子的胃口是1,我们有1和2两个大小的饼干,如果把2给这个孩子,则如果后面还有胃口为2的孩子则没有饼干能给;而先用尽量小的饼干去满足孩子,这样才能满足胃口比较大的孩子。
class Solution { public int findContentChildren(int[] g, int[] s) { if(g.length==0||s.length==0) return 0; Arrays.sort(g); Arrays.sort(s); int g1=0,s1=0; while(g1<g.length&&s1<s.length){ //如果只剩下饼干或者只剩下孩子都没有继续计算下去的意义 if(g[g1]<=s[s1]){ g1++; //如果能够满足当前孩子的胃口,则计数,如果不能满足则将饼干指针往后移,用更大的饼干 //去试图满足当前孩子的胃口 } s1++;//向后移动饼干,要么由于该孩子已被满足,要么由于之前的饼干太小,现在用下一个更大的 //饼干尝试 } return g1; } }
注意:
用的是Arrays.sort进行快排,而不是Array。