LeetCode每日一题,455. Assign Cookies
先看题目描述
大意就是给定两个数组 g 和 s,g 中存储的元素代表每个孩子的胃口,s 中存储的元素代表每个饼干的尺寸,我们现在需要给孩子分发饼干,为了满足孩子,给孩子分配的饼干的尺寸必须不小于孩子的胃口,且最多给每个孩子分配一块饼干,问可以满足的孩子的最大数量是多少
算法和思路
贪心+排序+双指针
为了尽可能满足最多数量的孩子,从贪心的角度考虑,应该按照孩子的胃口从小到大的顺序依次满足每个孩子,对于每个孩子,应该选择可以满足这个孩子的胃口且尺寸最小的饼干
算法流程
- 将 g 数组和 s 数组按照升序排列
- 设 g 数组和 s 数组的长度为 m 和 n,初始化两个指针 i 和 j 均等于 0,维护已满足孩子数量的变量 res 初始化为 0
- 当 i < m 且 j < n 时执行循环:
- 若 g[i] <= s[j],说明该饼干能满足当前的孩子,将 res + 1,i 和 j 指针同时向右移动一位,去满足下一位孩子
- 否则,说明该饼干不能满足当前的孩子,则将 j 指针右移,寻找可以满足当前孩子的胃口且尺寸最小的饼干
- 最后返回 res 即可
算法源码
1 | class Solution { |