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

跳跃游戏||力扣--45

题目

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]

每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i] 
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2

     从下标为 0 跳到下标为 1 的位置,跳 1步,然后跳 3步到达数组的最后一个位置。

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 1000
  • 题目保证可以到达 nums[n-1]

思路

还是看覆盖范围

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

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

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

当移动下标达到了当前覆盖的最远距离下标时

  • 如果当前覆盖最远距离下标不是是集合终点,步数就加一,还需要继续走。
  • 如果当前覆盖最远距离下标就是是集合终点,步数不用加一,因为不能再往后走了。

代码

class Solution {
    public int jump(int[] nums) {
        if(nums.length==0||nums==null||nums.length==1){
            return 0;
        }
        //记录跳跃的次数
        int count=0;
         //当前的覆盖最大区域
        int index=0;
        //最大的覆盖区域
        int distinct=0;
        for(int i=0;i<nums.length;i++){
             //在可覆盖区域内更新最大的覆盖区域
            distinct=Math.max(distinct,i+nums[i]);
            //说明当前一步,再跳一步就到达了末尾
            if(distinct>=nums.length-1){
                count++;
                break;
            }
             //走到当前覆盖的最大区域时,更新下一步可达的最大区域
            if(i==index){
                index=distinct;
                count++;

            }
        }
        return count;
    }
}


http://www.kler.cn/a/573406.html

相关文章:

  • 【零基础到精通Java合集】第二十九集:SQL常用优化手段
  • 雷军曝光小米影像外挂,大镜头吸附,手机变单反
  • 山东大学计算机科学与技术学院软件工程实验日志
  • Spring IoC配置(xml+FactoryBean)
  • doris: PostgreSQL
  • 极狐GitLab 17.9 正式发布,40+ DevSecOps 重点功能解读【三】
  • gmock和cppfreemock原理学习
  • 统计建模小贴士
  • CC++链接数据库(MySQL)超级详细指南
  • Rust编程实战:Rust实现简单的Web服务,单线程性能问题
  • CHAPTER 6 Object References, Mutability, and Recycling
  • ARM 架构下 cache 一致性问题整理
  • CAD2025电脑置要求
  • MySQL篇:基础知识总结与基于长期主义的内容更新
  • 使用Docker搭建Oracle Database 23ai Free并扩展MAX_STRING_SIZE的完整指南
  • (二 十)趣学设计模式 之 迭代器模式!
  • UDP透传程序
  • 【踩坑随笔】`npm list axios echarts`查看npm依赖包报错
  • Redis maven项目 jedis 客户端操作(一)
  • 在https的网站里访问http的静态资源