day-31 代码随想录算法训练营(19)贪心part01

455.分发饼干

思路一:贪心思路,大饼干先分给大胃口
思路二:小饼干先分给小胃口

376.摆动序列

分析摆动:记 presub 为前面与当前数之差,lastsub 为当前与后面数之差
思路:
  • 1.正常摆动时,需要 presub 和 lastsub 同为异号
  • 2.出现平路,需要 presub 为0且lastsub不为0时才出现摆动
  • 3.单调坡上出现平路时,注意presub的变化,只有当峰值出现presub才改变;如图中所示,不出现峰值时presub不改变,所以平坡的末端处,presub和lastsub是同号的,不会引起计数变化
cpp 复制代码
class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        //思路一:直接计算峰顶和峰底的个数
        if(nums.size()<=1) return nums.size();
        int curDiff=0;//当前数和后一个数的差值
        int preDiff=0;//前一个数和当前数的差值(初始化为0方便第一个元素计算)
        int sum=1;
        for(int i=0;i<nums.size()-1;i++){
            curDiff=nums[i+1]-nums[i];
            //出现峰值的情况
            if((preDiff<=0 && curDiff>0) || (preDiff>=0 && curDiff<0)){
                sum++;
                preDiff=curDiff;//峰值出现后更新prediff
            }
        }
        return sum;
    }
};

53.最大子序和

思路:直接遍历计算数组和,
当数组和大于最大子序和时,更新最大子序和;
当数组和小于等于0时,直接把数组和记录为0,原地开启下一次求和

注意:存在负数,所以最大子序和的初始值为INT_MIN;(头文件为 #include<limits.h>)

cpp 复制代码
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int n=nums.size();
        int maxsum=INT_MIN,sum=0;
        for(int i=0;i<n;i++){
            sum+=nums[i];
            if(sum>maxsum)
                maxsum=max(maxsum,sum);//更新子序和
            if(sum<=0)//重新开始求和
                sum=0;
            
        }
        return maxsum;
    }
};

45.跳跃游戏||

思路:求最少跳跃次数,即需要求最大覆盖范围,并且在覆盖范围内再求最大覆盖范围
1.记录最大覆盖范围
2.在最大覆盖范围内更新最大覆盖范围
3.当走到上一次最大覆盖范围的末尾,判断是否到达了终点;
  • 如果没到,则还进行跳跃计数
  • 把当前的最大覆盖范围更新
  • 判断当前最大覆盖范围是否能到达终点,如果能到达直接跳出(因为这一次跳跃已经计数)
cpp 复制代码
class Solution {
public:
    int jump(vector<int>& nums) {
        //思路:在覆盖中寻找跳的最远的
        if(nums.size()==1) return 0;
        int count=0;
        int cur=0,next=0;
        for(int i=0;i<nums.size();i++){
            next=max(next,nums[i]+i);
            if(i==cur){//上一次最大覆盖范围走到末尾
                if(cur!=nums.size()-1){//上一次覆盖范围没有到达终点
                    count++;//进行下一步跳跃计数
                    cur=next;//更新最大覆盖范围
                    if(cur>=nums.size()-1) break;//如果最大覆盖范围大于终点
                }
            }
        }
        return count;
    }
};
相关推荐
码流之上15 分钟前
【一看就会一写就废 指间算法】设计电子表格 —— 哈希表、字符串处理
javascript·算法
快手技术2 小时前
快手提出端到端生成式搜索框架 OneSearch,让搜索“一步到位”!
算法
CoovallyAIHub1 天前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
NAGNIP1 天前
Serverless 架构下的大模型框架落地实践
算法·架构
moonlifesudo1 天前
半开区间和开区间的两个二分模版
算法
moonlifesudo1 天前
300:最长递增子序列
算法
CoovallyAIHub1 天前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
聚客AI2 天前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v2 天前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法