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;
    }
};
相关推荐
z小猫不吃鱼41 分钟前
模型剪枝经典论文精读:Channel Pruning for Accelerating Very Deep Neural Networks
算法·机器学习·剪枝
njsgcs1 小时前
已知链中心距用节数算中间电机摆放位置 常量弧长 三链轮弦长模型算法
算法
2601_962440842 小时前
计算机毕业设计之jsp旅游网站管理系统
java·开发语言·算法·课程设计·旅游·推荐算法
池塘的蜗牛2 小时前
AFDM波形基于DFT的通感一体化
算法
147API3 小时前
Claude global workspace 研究给智能体测试提了一个醒
人工智能·算法·机器学习
葫三生3 小时前
《论三生原理》与模糊数学的关联、异同、互补关系?
人工智能·科技·算法·机器学习·开源
我命由我123453 小时前
方差(实例实操、与标准差的区别)
java·数据结构·算法·数据分析·java-ee·intellij-idea·idea
闲研随记3 小时前
【文献阅读 ICML 2026】RL算法:Critique-GRPO
论文阅读·算法·llm·强化学习·rl·icml·grpo
民乐团扒谱机3 小时前
【微实验】从迷雾中看清世界:卡尔曼滤波的数学诗意与MATLAB实践
人工智能·算法·matlab·卡尔曼滤波·kalman
努力努力再努力wz3 小时前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http