问题描述

给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

说明:

假设你总是可以到达数组的最后一个位置。

问题解法

我们总是可以到达数组的最后一个位置但是要保证跳数最少。我们就要保证我们选的这一步可以跳的更远。假设在某个位置我们可以从i跳到i+a[i]这个位置,在这之间的任意位置我们都可以达到,那么最优的一定是(i,i+a[i]]之间最大的那个即max=max(j+a[j])i<j<=i+a[i]。再从这个位置继续向下跳,这个时候我们已经遍历过i+a[i]了(都没有当前这个位置大,我们再次遍历的时候就要从i+a[i]开始。因此我们需要将这个值记录下来。
除此之外就是特殊情况。当数组只有一个数时,只要能跳的步数合法可以到达(一定合法,题目要求)。

class Solution {public int jump(int[] nums) {if(nums.length==1&&nums[0]>=0)return 0;//num计数,max表示当前可以y跳到的最远距离,maxIndex标识t从maxIndex跳才能达到最远距离,index表示已经记录过的下标。x是上一次的最大下标因为随着max的更新for的条件判断会改变。int num=1,max=nums[0],maxIndex=0,x=0,index=0;while(true){if(max>=nums.length-1)return num;for(int i=index+1;i<=x+nums[x];i++){if(i+nums[i]>max){max=i+nums[i];maxIndex=i;}}index=nums[x]+x;x=maxIndex;num++;}}
}

运行结果

Leetcode之跳跃游戏Ⅱ相关推荐

  1. LeetCode:跳跃游戏【55】

    LeetCode:跳跃游戏[55] 题目描述 给定一个非负整数数组,你最初位于数组的第一个位置.数组中的每个元素代表你在该位置可以跳跃的最大长度.判断你是否能够到达最后一个位置. 示例 1: 输入: ...

  2. LeetCode 1871. 跳跃游戏 VII(贪心)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump . 一开始,你在下标 0 处,且该位置的值一定为 '0' . ...

  3. LeetCode 1696. 跳跃游戏 VI(优先队列 / 单调队列)

    文章目录 1. 题目 2. 解题 2.1 贪心错误解 2.2 优先队列/单调队列 1. 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k . 一开始你在下标 0 处.每一步,你最多可 ...

  4. LeetCode 1306. 跳跃游戏 III(广度优先搜索BFS)

    1. 题目 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处. 当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]. 请你判断自己是否能够 ...

  5. LeetCode 1340. 跳跃游戏 V(DP)

    1. 题目 给你一个整数数组 arr 和一个整数 d .每一步你可以从下标 i 跳到: i + x ,其中 i + x < arr.length 且 0 < x <= d . i - ...

  6. LeetCode 45. 跳跃游戏 II(贪心/BFS,难)

    文章目录 1. 题目 2. 解题 2.1 贪心 2.2 BFS 1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的 ...

  7. LeetCode 55. 跳跃游戏(贪心)

    1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1:输入: [2,3,1,1,4] 输出: ...

  8. 【LeetCode】跳跃游戏Ⅰ~Ⅵ(我真的跳晕了@_@)

    [LeetCode]跳跃游戏Ⅰ~Ⅵ

  9. Leetcode 45. 跳跃游戏 II

    Leetcode 45. 跳跃游戏 II 题目 给你一个非负整数数组 nums ,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组 ...

  10. LeetCode—55.跳跃游戏(Jump Game)——分析及代码(C++)

    LeetCode-55.跳跃游戏[Jump Game]--分析及代码[C++] 一.题目 二.分析及代码 1. 贪心 (1)思路 (2)代码(简洁) (3)代码(高效) (4)结果 三.其他 一.题目 ...

最新文章

  1. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...
  2. 经典mysql数据库表案例_MySQL数据库的“十宗罪”(附10大经典错误案例)
  3. java 中流的使用
  4. QList模板类常用接口函数
  5. linux下覆盖文件命令,在Linux中使用命令行进行文件覆盖的操作
  6. leetcode557. 反转字符串中的单词 III python,处理字符串的神!
  7. 简述python爬虫_python爬虫入门篇了解
  8. getconnectiontimeoutexception 网络问题排查_家里wifi信号差?给小白的无线排查操作指南...
  9. VS 2010 安装 .net framework2.0/3.0/3.5
  10. android 模拟器 itools,itools安卓模拟器
  11. java实现在线预览--poi实现word、excel、ppt转html
  12. 中国土地交易数据库:300w数据中国土地高频交易数据2000-2022
  13. 民生银行香港卡的办理经历,和踩过的那些坑····
  14. LaTex(PART IV) 各级标题
  15. JavaScript边学边玩的小游戏、好用的js网站:
  16. 程序员应该知道的国外技术网站
  17. 根据先序和中序(中序和后序)确定二叉树
  18. 基础实验7-2.1 魔法优惠券 (贪心)
  19. word/ppt中如何插入11以上带圆圈的数字序号
  20. .Net培训教你用C#开发手机游戏!

热门文章

  1. DeepWalk学习
  2. Android Studio运行程序出现Session ‘app’: Error Launching activity 解决办法
  3. Effective Objective-C 的读书笔记
  4. myeclipse-10.7-offline-installer-windows安装图解及注意事项
  5. MFC 中获取各种类指针的方法
  6. “error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用”解决方法。
  7. 腾讯云 python接口_python调用腾讯云短信接口
  8. [16]manjaro安装nvidia驱动
  9. 浅谈极限编程(更新中)
  10. 用开关控制蜂鸣器_蜂鸣器驱动电路(实践出真理)