关于贪心算法的一些介绍

本文介绍了贪心算法的核心思想,即通过局部最优解获取整体最优解。文章通过多个具体的LeetCode题目,如任务调度器、根据身高重建队列、跳跃游戏等,详细解释了贪心算法的解题策略。在每个例子中,都展示了如何寻找并利用局部最优解来逐步解决问题。文章适合想要学习和理解贪心算法的读者。
摘要由CSDN通过智能技术生成

贪心算法核心思想

1.局部最优解得到整体最优解

在这里插入图片描述
在这里插入图片描述

这个就写个遍历就行了,比较简单。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
区间按照结尾进行排序。

在这里插入图片描述
贪心算法,永远尽可能多的不断贪心的选取当前最优策略的算法。

在这里插入图片描述
贪心的核心在于可以用小的替换大的,不能替换的时候就不可以用贪心算法了。
在这里插入图片描述
在这里插入图片描述
问的是最多最多有介个孩子可以得到满足
孩子要尽可能多
所以我们应该用糖果去找孩子
看看我这个糖果能满足的最小的孩子是是谁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
子序列,本序列中删除一些数据之后剩下已然成立就是子序列。
摇摆序列说穿了就是,先升,后降低,然后再升,再降低
上面题目中,后面该降低了,所以选最大那个数15比较容易降低

在这里插入图片描述
在一段递增序列中,根据取舍,递增之后就是下降了,为了有更大下降空降,我们必须要在取舍时候,将递增序列中最大那个值需要的结果

在一段递减序列中同理为了递增我们也要选择最小那个值作为下将的取舍
其实这个题目,数那个折现就行了,每次都找波峰和波谷
然后数折就行了
最后那个折数量 + 1就是我们要的子序列的长度。

class Solution {
   
    public int wiggleMaxLength(int[] nums) {
   
        if(nums.length < 2){
   
            return nums.length;
        }

        //子序列可以不是连续的,原本序列中删除一些元素之后也叫子序列
        //因为中间可以跳过一些点

        //用count去统计那些点可以组成子摇摆序列
        //
        //作为判定上升还是下将依据,上升之后就该下降了
       

        //两个指针去遍历数组,pre ,next
        int pre = 0;
        int next = 1;
        int isUp;//1就是上升,0就是下降
        int isNow;//表示这一次是上升还是下降
        //看看前面有没有转折
        isUp = nums[pre] > nums[next] ? 0 : 1;//记录一下一开始是上升还是下
        int count = 1;//计算发生了多少次转折
        //两个指针放心往后走就行,发生转折就记录下来

        while(next < nums.length){
   
            isNow = nums[pre] > nums[next] ? 0 : 1;//记录一下一开始是上升还是下
            
            //相等时候不用处理
            //不相等时候才发生转折
            if(isUp != isNow){
   
                //说明发生了转折
                count++;//记录一次转折
                isUp = isNow;//isUp变化一下
            }
            pre++;
            next++;//无论如何指针都往后走

            
           

        }

        return count + 1;//统计节点数目



    }
}
class Solution {
   
    public int wiggleMaxLength(int[] nums) {
   
int down = 1, up = 1;
    for (int i = 1; i < nums.length; i++) {
   
        if (nums[i] > nums[i - 1])
            up = down + 1;
        else if (nums[i] < nums[i - 1])
            down = up + 1;
    }
    return nums.length == 0 ? 0 : Math.max(down, up);

    }
}

神级别代码
在这里插入图片描述

一个贪心题目
在这里插入图片描述
这个跳跃游戏最大的点就是在于,我每次追求的事情是
num[i] + i最大,我当年犯的错误就是仅仅是追求num[i]值,最大

class Solution {
   
    public int jump(int[] nums) {
   
        int end = 0;
    int maxPosition = 0; 
    int steps = 0;<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值