day31 贪心算法 分发饼干 摆动序列 最大子序和

题目1:455 分发饼干

题目链接:455 分发饼干

题意

给孩子分发饼干,每个孩子最多只能有1块饼干

每个孩子i都有一个胃口值gi ,每块饼干j的尺寸是sj 如果sj>=gi可以将这个饼干分配给孩子i 孩子就会得到满足,尽可能多地满足孩子,输出最大值

局部最优:将大尺寸的饼干分配给大胃口的孩子,充分利用饼干

全局最优:满足数量多的孩子

代码

cpp 复制代码
class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        //排序
        sort(g.begin(),g.end());
        sort(s.begin(),s.end());
        int result = 0;
        int index = s.size()-1;
        //先遍历胃口
        for(int i=g.size()-1;i>=0;i--){
            if(index>=0 && s[index]>=g[i]){
                index--;
                result++;
            }
        }
        return result;
    }
};
  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(1)

题目2:376 摆动序列

题目链接:376 摆动序列

题意

连续数字之间的差在正数和负数之间交替,这样的数字序列称为摆动序列 仅由1个元素或两个不等元素的序列也是摆动序列

子序列可以从原始序列中删除或不删除元素获得,其余元素保持原始顺序不变

返回整数数组中摆动序列最长子序列的长度

局部最优:删除单调坡中的元素,全局最优:最长摆动序列

不用真正删除数组中的元素(O(n)),直接计数长度即可

默认数组有一个摆动序列的长度

代码

cpp 复制代码
class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        int result = 1;//计数序列的最右边
        int prediff = 0;
        int curdiff = 0;
        for(int i=0;i<nums.size()-1;i++){
            curdiff = nums[i+1] - nums[i];
            if((prediff>=0 && curdiff<0) || (prediff<=0 && curdiff>0)){
                result++;
                prediff = curdiff;
            }
        }
        return result;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

题目3:53 最大子序和

题目链接:53 最大子序和

题意

找出整数数组nums中具有最大和的连续子数组,返回最大和

连续和是负数,加上后面的数只会拖累后面的数,让后面的数更小,所以从后面的数重新计算连续和;只要连续和是正数,该连续和加上后面的数,就会增大后面的数

局部最优:连续和为负数,立刻抛去连续和,以下一个数为起点计算连续和

全局最优:找到最大连续和

贪心算法

代码

cpp 复制代码
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int result = INT_MIN;
        int count = 0;
        for(int i=0;i<nums.size();i++){
            //计算连续和
            count += nums[i];
            if(count>result) result = count;
            if(count<0) count = 0;
        }
        return result;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
相关推荐
机器人零零壹41 分钟前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
ZhengEnCi3 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是4 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考5 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
nm_zfyjt7 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
w_zero_one8 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼8 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
小超人诞生日记10 小时前
C++ 智能指针的使用及其原理详解
c++·算法
AiNightVision13 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件