代码随想录day31|455.分发饼干 、376. 摆动序列 、53. 最大子序和

本文介绍了两个C语言函数findContentChildren用于处理分发饼干问题,以及wiggleMaxLength和maxSubArray算法,分别用于求解摆动序列的最大长度和最大子数组和问题。

455. 分发饼干

大饼干喂饱大胃口

int cmp(int* a, int* b) { return *a - *b; }

int findContentChildren(int* g, int gSize, int* s, int sSize) {
    if (sSize == 0)
        return 0;

    qsort(g, gSize, sizeof(int), cmp);
    qsort(s, sSize, sizeof(int), cmp);

    int count = 0;
    int start = sSize - 1;

    for (int i = gSize - 1; i >= 0; i--) {
        if (start >= 0 && s[start] >= g[i]) {
            start--;
            count++;
        }
    }
    return count;
}

小饼干喂饱小胃口 

int cmp(int* a, int* b) {
    return *a - *b;
}

int findContentChildren(int* g, int gSize, int* s, int sSize){
    if(sSize == 0)
        return 0;

    qsort(g, gSize, sizeof(int), cmp);
    qsort(s, sSize, sizeof(int), cmp);

    int numFedChildren = 0;
    int i = 0;
    for(i = 0; i < sSize; ++i) {
        if(numFedChildren < gSize && g[numFedChildren] <= s[i])
            numFedChildren++;
    }
    return numFedChildren;
}

376. 摆动序列

这道题可以将抽象一张图,条件就是有坡峰

然后题目中提及到删除,但是我们并不需要真的去删除,我们只需要将出现坡峰的值记录下来就好了

有三种情况

第一种:上下坡中有平坡

第二种:只有首尾只有两个元素

第三种:单调坡中有平坡



int wiggleMaxLength(int* nums, int numsSize){
 if(numsSize <= 1){
    return numsSize;
 }
 int length = 1;
 int preDiff, curDiff;
 preDiff = curDiff = 0;
 for(int i = 0; i < numsSize - 1; ++i){
    curDiff = nums[i+1] - nums[i];
    if((curDiff > 0 && preDiff <= 0) || (preDiff >= 0 && curDiff < 0)){
        preDiff = curDiff;
        length++;
    }
 }
 return length;
}

53. 最大子数组和

当我的连续和为负数的时候,那么再继续加下去,也没有用,会使得值变小,所以要舍弃前面的,从当前位置重新来,

int maxSubArray(int* nums, int numsSize){
    int maxVal = INT_MIN;
    int subArrSum = 0;

    int i;
    for(i = 0; i < numsSize; ++i) {
        subArrSum += nums[i];
     
        maxVal = subArrSum > maxVal ? subArrSum : maxVal;
       
        subArrSum = subArrSum < 0 ? 0 : subArrSum;
    }

    return maxVal;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值