力扣455分发饼干

haimian
2024-11-23 / 0 评论 / 4 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年11月23日,已超过147天没有更新,若内容或图片失效,请留言反馈。

这个题目属于很典型的贪心算法,贪心算法的具体可以见我下一篇博文,我将会有很详细的解释,我接下来先当着这道题目进行一个简单的解释

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是满足尽可能多的孩子,并输出这个最大数值。

示例 1:

输入: g = [1,2,3], s = [1,1]
输出: 1
解释:
你有三个孩子和两块小饼干,3 个孩子的胃口值分别是:1,2,3。
虽然你有两块小饼干,由于他们的尺寸都是 1,你只能让胃口值是 1 的孩子满足。
所以你应该输出 1。
示例 2:

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

很简单的思想,我们如何先对g和s进行排序的话,那么我们就按照g的1 2 3 s的1 1 那么我们可以很轻松的推出来,g的第一个和s的第一个开始进行匹配
需要注意的是 我们需要注意qsort的函数的使用方法

void qsort(void base, size_t nitems, size_t size, int (compar)(const void , const void ));

以上是qsort函数的内部参数,
base:指向要排序的数组的起始地址的指针,它可以是任何类型的数组,因为它被声明为 void * 类型,这是一个通用指针类型,可以指向任意类型的数据。
nitems:要排序的数组中的元素个数。
size:数组中每个元素的大小,以字节为单位。这个参数很重要,因为 qsort 需要知道每个元素的实际大小,以便正确地对数组进行操作。
compar:一个指向比较函数的指针,这个比较函数用于确定数组中元素的排序顺序。比较函数需要接受两个 const void * 类型的参数,并返回一个整数,用于表示两个元素的相对大小关系。

第三个参数需要注意一下就是需要指明是如传入的
比如接下来的写法就是从大到小的排序
int cmp(const voida,const voidb){return (int)b - (int)a}
因为他返回的是一个负值那么默认会把b排到a前面,接下来就是上真正的代码了

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(int),cmp);
    qsort(s,sSize,sizeof(int),cmp);
    int i = 0;
    int j = 0;
    for(j;j<sSize;j++){
        if(i<gSize && g[i] <= s[j]){
            i++;
        }
    }
    return i;
}

m3uc5ky2.png

0

评论 (0)

取消