假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
对每个孩子 i
,都有一个胃口值 g[i]
,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j
,都有一个尺寸 s[j]
。如果 s[j] >= g[i]
,我们可以将这个饼干 j
分配给孩子 i
,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
此题涉及到排序+双指针+贪心
为了尽可能满足最多数量的孩子,从贪心的角度考虑,应该按照孩子的胃口从小到大的顺序依次满足每个孩子,且对于每个孩子,应该选择可以满足这个孩子的胃口且尺寸最小的饼干
int cmp(int*a,int*b)
{
return *a-*b;
}
int findContentChildren(int* g, int gSize, int* s, int sSize) {
qsort(g,gSize,sizeof(int),cmp);
qsort(s,sSize,sizeof(int),cmp);
int count=0;
int m=gSize,n=sSize;
for(int i=0,j=0;i<m&&j<n;i++,j++)
{
while(j<n&&g[i]>s[j])
j++;
if(j<n)
count++;
}
return count;
}
下面提供python的写法
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g.sort()
s.sort()
m,n=len(g),len(s)
i=j=count=0
while i<m and j<n:
while j<n and g[i]>s[j]:
j+=1
if j<n:
count+=1
i+=1
j+=1
return count