@ 代码随想录算法训练营第5周(C语言)|Day31(贪心算法)

@ 代码随想录算法训练营第5周(C语言)|Day31(贪心算法)

Day31、贪心算法(包含题目 455.分发饼干 376. 摆动序列 53. 最大子序和 )

455.分发饼干

题目描述

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

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

题目解答

c 复制代码
void quicksotr(int *nums,int left,int right){
    if(left>right){
        return;
    }
    int left1=left;
    int right1=right;
    int k=nums[left1];
    while(left1<right1){
        //做快排的时候一定要注意这个left1<right1条件
        while(left1<right1&&k<=nums[right1]){
            right1--;
        }
        nums[left1]=nums[right1];
        while(left1<right1&&k>=nums[left1]){
            left1++;
        }
        nums[right1]=nums[left1];

    }
    nums[left1]=k;
    quicksotr(nums,left,left1-1);
    quicksotr(nums,left1+1,right);
    return;
}
int findContentChildren(int* g, int gSize, int* s, int sSize) {
    quicksotr(g,0,gSize-1);
    quicksotr(s,0,sSize-1);
    int gi=0;
    for(int i=0;i<sSize;i++){
        if(gi<gSize&&g[gi]<=s[i]){
            gi++;
        }
    }
    return gi;
    
}

题目解答

做快排的时候一定要注意这个left1<right1条件。

376. 摆动序列

题目描述

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。

例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。

给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元素来获得子序列,剩下的元素保持其原始顺序。

题目解答

c 复制代码
int wiggleMaxLength(int* nums, int numsSize){
    if(numsSize==1){
        return 1;
    }
    if(numsSize==2){
        return nums[0]!=nums[1]?2:1;
    }
    int prediff=0;
    int curdiff=0;
    int res=1;
    for(int i=1;i<numsSize;i++){
        curdiff=nums[i]-nums[i-1];
        if((prediff>=0&&curdiff<0)||(prediff<=0&&curdiff>0)){
            res++;
            prediff=curdiff;
        }

    }
    return res;
}

题目总结

利用摆动序列的性质一高一低就计数加一,从零开始,终点不算。

53. 最大子序和

题目描述

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

题目解答

c 复制代码
int max(int a,int b){
    return a>b?a:b;
}
int maxSubArray(int* nums, int numsSize) {
    int dp[numsSize];
    dp[0]=nums[0];
    int res=nums[0];
    for(int i=1;i<numsSize;i++){
        dp[i]=max(dp[i-1]+nums[i],nums[i]);
        res=max(res,dp[i]);
    }
    return res;
}

题目总结

用动态规划,dp数组为前i项(包含nums[i]的)最大的连续子序列之和。

相关推荐
铉铉这波能秀几秒前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
踢足球09294 分钟前
寒假打卡:2026-2-8
数据结构·算法
IT猿手14 分钟前
基于强化学习的多算子差分进化路径规划算法QSMODE的机器人路径规划问题研究,提供MATLAB代码
算法·matlab·机器人
千逐-沐风15 分钟前
SMU-ACM2026冬训周报3rd
算法
wangjialelele22 分钟前
Linux下的IO操作以及ext系列文件系统
linux·运维·服务器·c语言·c++·个人开发
铉铉这波能秀36 分钟前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple
晚霞的不甘42 分钟前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
㓗冽1 小时前
60题之内难题分析
开发语言·c++·算法
大江东去浪淘尽千古风流人物1 小时前
【VLN】VLN仿真与训练三要素 Dataset,Simulators,Benchmarks(2)
深度学习·算法·机器人·概率论·slam
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之字典(Dictionary)Python2026新版
数据结构·python·算法·leetcode·字典·dictionary