Day29 第八章 贪心算法 part02

一. 学习文章及资料

二. 学习内容

1. 买卖股票的最佳时机II

收集正利润的区间,就是股票买卖的区间,而我们只需要关注最终利润,不需要记录区间。

那么只收集正利润就是贪心所贪的地方!

局部最优: 收集每天的正利润
全局最优:求得最大利润。

局部最优可以推出全局最优,找不出反例,试一试贪心!

java 复制代码
class Solution {
    public int maxProfit(int[] prices) {
        int result=0;
        for(int i=1;i<prices.length;i++){
            //第二天开始才有收益,只取正收益,亏就抛
            result+=Math.max(prices[i]-prices[i-1],0);
        }
        return result;
    }
}

2. 跳跃游戏

局部最优: 每次取最大跳跃步数(取最大覆盖范围)
**全局最优:**最后得到整体最大覆盖范围,看是否能到终点。

局部最优推出全局最优,找不出反例,试试贪心!

java 复制代码
class Solution {
    public boolean canJump(int[] nums) {
        // 只有一个元素,就是能达到
        if(nums.length==1) return true;
        int far=0;
        // 注意这里是小于等于far
        for(int i=0;i<=far;i++){
            far=Math.max(i+nums[i],far);
            // 说明可以覆盖到终点了
            if(far>=nums.length-1) return true;
        }
        return false;
    }
}

3. 跳跃游戏II

从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最少步数!

这里需要统计两个覆盖范围,当前这一步的最大覆盖和下一步最大覆盖

如果移动下标达到了当前这一步的最大覆盖最远距离了,还没有到终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。

java 复制代码
class Solution {
    public int jump(int[] nums) {
        int count=0;      //记录的步数
        int curDistant=0; //当前步数到达最远距离
        int nextDistant=0;//下一步数到达最远距离
        for(int i=0;i<nums.length;i++){
            nextDistant=Math.max(i+nums[i],nextDistant);
            if(nextDistant>=nums.length-1){ //如果下一步能到达终点
                count++; //说明再走一步就行了
                break;
            }
            if(i==curDistant){ //到达当前步数最远的地方还没到终点
                curDistant=nextDistant; //更新覆盖距离
                count++;
            }
        }
        return count;
    }
}
相关推荐
梁下轻语的秋缘1 小时前
每日c/c++题 备战蓝桥杯 ([洛谷 P1226] 快速幂求模题解)
c++·算法·蓝桥杯
CODE_RabbitV1 小时前
【深度强化学习 DRL 快速实践】逆向强化学习算法 (IRL)
算法
mit6.8242 小时前
[贪心_7] 最优除法 | 跳跃游戏 II | 加油站
数据结构·算法·leetcode
keep intensify2 小时前
通讯录完善版本(详细讲解+源码)
c语言·开发语言·数据结构·算法
shix .2 小时前
2025年PTA天梯赛正式赛 | 算法竞赛,题目详解
数据结构·算法
风铃儿~2 小时前
Java面试高频问题(26-28)
java·算法·面试
wuqingshun3141592 小时前
蓝桥杯 4. 卡片换位
算法·职场和发展·蓝桥杯
江沉晚呤时2 小时前
深入了解C# List集合及两种常见排序算法:插入排序与堆排序
windows·sql·算法·oracle·c#·排序算法·mybatis
Eric.Lee20213 小时前
数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall
人工智能·算法·yolo·目标检测·计算机视觉
Gsen28193 小时前
AI大模型从0到1记录学习 数据结构和算法 day20
数据结构·学习·算法·生成对抗网络·目标跟踪·语言模型·知识图谱