当前位置: 首页 > news >正文

Day29 第八章 贪心算法 part02

一. 学习文章及资料

  • 122.买卖股票的最佳时机II
  • 55.跳跃游戏
  • 45.跳跃游戏II

二. 学习内容

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

收集正利润的区间,就是股票买卖的区间,而我们只需要关注最终利润,不需要记录区间。
那么只收集正利润就是贪心所贪的地方!

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

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

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. 跳跃游戏

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

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

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

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

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

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

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;
    }
}

相关文章:

  • 分布式主键生成服务
  • 医院HIS接入大模型:算力基础设施与训练能力的深度剖析与测算
  • 树莓集团:数字影像领航,开启未来影像变革
  • 【STL学习】(5)list
  • Android内存优化指南:从数据结构到5R法则的全面策略
  • 浅显易懂HashMap的数据结构
  • 玩转 Netty : 如何设计高性能RPC通信组件
  • 【计算机网络协议01】应用层协议HTTP
  • PS渐变工具
  • 【项目实施阶段一】【软件部署与环境搭建】
  • MySQL DBA技能指南
  • 表单input 通过点击按钮新增input框(Vue3)
  • 锂电池保护板测试仪:电池安全的守护者与创新驱动力
  • 使用pinia存储登录用户的全部个人信息
  • React面试(一)
  • 数据库并发问题有那些以及解决办法
  • linux 系统 安装禅道教程
  • 策略模式环境类的实现方式对比
  • C++ Qt常见面试题(1):Qt信号槽的理解
  • 从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(四) 实现注册功能
  • 苹果手机为何无法在美制造?全球供应链难迁移
  • 美乌签署协议建立美乌重建投资基金
  • 全文丨中华人民共和国传染病防治法
  • 市场监管总局出手整治涉企乱收费,聚焦政府部门及下属单位等领域
  • 亚马逊拟为商品标注“关税成本”,特朗普致电贝索斯讨说法
  • 零食连锁鸣鸣很忙递表港交所:去年营收393亿元,门店超1.4万家,净利润率2.1%