Leetcode455. 分发饼干(C语言)

Leetcode455. 分发饼干(C语言)

算法-贪心思想:算法与数据结构参考

题目:
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
每个孩子 i 都有一个胃口值 gi ,这是能满足孩子胃口的饼干最小尺寸;
每块饼干 j ,都有一个尺寸 sj 。
如果 sj >= gi ,可将饼干 j 分配给孩子 i ,孩子会得到满足。尽可能满足越多数量的孩子,并输出这个最大数值。例:
输入: [1,2], [1,2,3]
输出: 2

解释:
你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。
你拥有的饼干数量和尺寸都足以让所有孩子满足。所以输出2。

思路:
先分别按孩子胃口给孩子排序,饼干大小给饼干排序。
若饼干j能满足孩子i,则count计数,否则饼干后移一个继续比较(更大尺寸)。

可直接调用c语言自带的快速排序函数qsort:
函数声明:
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void , const void))
参数:
base-- 指向要排序的数组的第一个元素的指针。
nitems-- 由 base 指向的数组中元素的个数。
size-- 数组中每个元素的大小,以字节为单位。
compar-- 用来比较两个元素的函数,即函数指针(回调函数)

compar参数指向一个比较两个元素的函数,必须是const void *型,compar实质为函数指针,这里称它所指向的函数也为compar。在compar函数内部会将const void *型转换成实际类型。
int compar(const void *p1, const void *p2);
  如果compar返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的左面;
  如果compar返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定;
  如果compar返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的右面。

代码:

int cmp ( const void *a , const void *b ) 
{ 
	return *(int *)a - *(int *)b; 
} 	//从小到大排列

int findContentChildren(int* g, int gSize, int* s, int sSize){
    qsort(g,gSize,sizeof(g[0]),cmp);
    qsort(s,sSize,sizeof(s[0]),cmp);
    
    int i=0,j=0,count=0;
    while(i<gSize && j<sSize){
        if(g[i]>s[j])   j++;
        else{
            count++;
            i++;
            j++;
        }
    }
    
    return count;
}

你可能感兴趣的:(数据结构&算法)