Leetcode刷题笔记(455 分发饼干)
题目:详见力扣
主要思路:(贪心算法)
- 直观想法:由于每位小朋友的胃口不同,优先满足胃口小的小朋友,显然能够有更多小朋友满足,而对于每个小朋友来说,使用更接近于其胃口的饼干也能够方便更多小朋友满足。
- 具体实现:将小朋友的胃口和饼干的大小都从小到大排序。从头开始对每一位小朋友分配饼干,同时使用一个指针指向当前首个待分配的饼干。如果该饼干能够满足小朋友则满足的小朋友个数增加,同时饼干的指针后移;如果不能满足且还有更大的饼干则后移指针继续找,否则结束饼干的分配。
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g); //从小到大排序
Arrays.sort(s);
int j=0;
int ContentChildren=0;
for (int i=0;i<g.length;i++)
{
while (j<s.length&&s[j]<g[i]) j++; //查找可行的饼干
//System.out.println("i="+i+" j="+j);
if (j<s.length) //饼干成功分配
{
ContentChildren++;
j++; //注意j要加表示这个饼干已经使用
}
else break;
}
return ContentChildren;
}
}
时间复杂度:不考虑排序部分,则时间复杂度为 O ( m + n ) , n = g . l e n g t h , m = s . l e n g t h O(m+n),n=g.length,m=s.length O(m+n),n=g.length,m=s.length