455.分发饼干
原题:
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
对每个孩子?i
,都有一个胃口值?g[i]
,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干?j
,都有一个尺寸?s[j]
?。如果?s[j]?>= g[i]
,我们可以将这个饼干?j
?分配给孩子?i
?,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
解题思路:
读题发现适合采用贪心的思路,先把刚刚好能满足的发出去,再把剩下的大于等一个小孩的胃口的饼干发出去,由于数据不一定有序所有需要先排序再发放。
知识储备:
qsort函数,函数原型qsort(指针,要排序的元素个数,每个元素所占字节数,比较函数指针)
详细请见:每日力扣算法题(简单篇)-CSDN博客??????
都看到这里了点个赞吧,可以的话点个关注吧。
源代码:
int cmp(const void* a,const void* b)
{
int numa=*(int*)a;
int numb=*(int*)b;
return numa>numb?1:-1;
}
int findContentChildren(int* g, int gSize, int* s, int sSize) {
qsort(g,gSize,sizeof(int),cmp);
qsort(s,sSize,sizeof(int),cmp);
int top=0,count=0;
for(int i=0;i<sSize&&top<gSize;i++)
{
if(g[top]<=s[i])//先把刚好能满足一个小孩胃口的饼干分出去
{
s[i]=0;
top++;
}
}
for(int i=sSize-1;i>=0&&top<gSize;i--)
{
if(g[top]>s[i])//这个小孩的胃口比最大的饼干还大
{
break;
}else
{
top++;
}
}
return top;
}