20200404

题目 :跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否可以到达最后的位置。

示例:

输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。

answer1

  • 利用递归回溯模拟从第一个位置跳到最后位置的所有方案
  • 递归算法的本质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。

本程序执行思路

  • 首先有递归调用的结束条件,不然会一直执行,导致栈溢出。
if(position == nums.length - 1){return true;
}
  • 执行递归方法,不断把一个大问题分解成小问题,直到满足递归结束的条件,此时开始返回上一级方法。
if(canJumpPosition(nextPostion,nums))
  • 当这个满足时,就返回true,之后不断返回true

code

class Solution{public boolean canJump(int[] nums){return canJumpFromPosition(0,nums);}public boolean canJumpFromPostion(int postion,int nums){//递归的结束条件if(position == nums.length - 1){return true;}int furthestJump = Math.min(postion + nums[postion],nums.length -1);for(int nextPositon = position + 1; nextPosition <= furthJump;nextPostion++){if(canJumpFromPosition(nextPosition,nums)){return true;}}return false;}
}

answer2 :自顶向下的动态规划

优化回溯算法

利用一个记录数组memo进行记录,优化递归。

步骤

  • 初始化memo的所有元素为UNKNOWN,除了最后一个为GOOD
  • 优化递归算法,每步回溯前先检查这个位置是否计算过。
    • 如果已知直接返回结果True/False
    • 否则按照之前的回溯步骤计算

code

enum Index{GOOD,BAD,UNKNOWN
}
public class Solution{Index[] memo;public boolean canJumpFromPostion(int position, int[] nums){if(memo[position] != Index.UNKNOWN){return memo[position] == Index.GOOD ? true : false;}int furthestJump = Math.min(position + nums[position],nums.length-1);for(int nextPosition = position + 1; nextPosition <= furthestJump;nextPosition++){if(canJumpFromPostion(nextPosition, nums)){memo[position] = Index.GOOD;return true;}}memo[position] = Index.BAD;return false;}public boolean canJump(int[] nums){memo = new Index[nums.length];for(int i=0;i<memo.length;i++){memo[i] = Index.UNKNOWN;}memo[memo.length-1] = Index.GOOD;return canJumpFromPosition(0,nums);}
}

answer3 :自底向上的动态规划

自底向上和自顶向下动态规划的区别就是消除了回溯,在实际使用中,自底向上的方法有更好时间效率。我们从右边开始动态规划,每次查询右边节点的信息,都是已经计算过的,不再需要额外的递归开销。

code

enum Index{GOOD,BAD,UNKNWON
}
public class Solution{public boolean canJump(int[] nums){Index[] meomo = new Index[nums.length];for(int i=0;i<memo.length;i++){memo[i] = Index.UNKNOWN;}memo[memo.length - 1] = Index.GOOD;for(int i=numslength - 2;i>=0;i--){int furthestJump = Math.min(i + nums[i],nums.length-1);for(int j=i+1;j<=furthestJump;j++){if(memo[j] == Index.GOOD){memo[i] = Index.GOOD;break;}}}return memo[0] == Index.GOOD;}
}

LeetCode(跳跃游戏)相关推荐

  1. Leetcode跳跃游戏

    文章目录 Leetcode跳跃游戏 题目简介 跳跃游戏1 跳跃游戏2 Leetcode跳跃游戏 题目简介 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最 ...

  2. leetcode 跳跃游戏系列 c++

    文章目录 [55. 跳跃游戏](https://leetcode-cn.com/problems/jump-game/) [45. 跳跃游戏 II](https://leetcode-cn.com/p ...

  3. Leetcode 跳跃游戏

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

  4. leetcode跳跃游戏C语言,LeetCode:跳跃游戏

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

  5. leetcode:跳跃游戏 IV

    dijk 22/32 class Solution {public:int minJumps(vector<int>& arr) {// dijk? 最短路径?if(arr.siz ...

  6. 《LeetCode力扣练习》第55题 跳跃游戏 Java

    <LeetCode力扣练习>第55题 跳跃游戏 Java 一.资源 题目: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 . 数组中的每个元素代表你在该位置可以跳跃的最大 ...

  7. LeetCode:跳跃游戏【55】

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

  8. LeetCode 55跳跃游戏56合并区间57插入区间

    原创公众号:bigsai 希望和优秀的你做朋友,感觉不错还请一键三连. 回复进群即可加入和200+人一起打卡.上周打卡: LeetCode 47全排列Ⅱ&48旋转图像 LeetCode 49字 ...

  9. LeetCode 45跳跃游戏46全排列

    原创公众号:bigsai,回复进群加入力扣打卡群. 昨日打卡:LeetCode 42字符串相乘&43通配符匹配 跳跃游戏 题目描述: 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中 ...

最新文章

  1. linux释放内存命令
  2. 像“毒液”一样的粘液机器人火了,能取出体内异物,穿过1.5mm细缝无压力 | 哈工大港中大...
  3. EasyUI Combogrid Bug
  4. 啊哈算法中的Dijkstra最短路算法(好理解!!!)
  5. 5道Python函数练习
  6. python3列表del 语句
  7. jQuery formValidator表单验证插件4.1.0 下载 演示 文档 可换肤 代码生成器
  8. uc3842开关电源电路图_UC3842 的原理及应用详解 (上)
  9. boot gwt_带Spring Boot的GWT
  10. ip地址合不合法怎么看_电子印章合不合法?两部门再发意见认定
  11. 【数据结构与算法】二叉树结点最小深度求解算法
  12. 深度学习“三巨头”、图灵奖得主 Yann LeCun:我没有天赋,所以才追随聪明人...
  13. 使用webbench进行压力测试
  14. 年度最强浏览器插件来袭,打造个人完美生产力
  15. 医学诊断报告生成论文综述
  16. matlab建空数组,matlab数组的创建与操作
  17. adobe bridge是什么软件?
  18. 【软考-软件设计师精华知识点笔记】第三章 数据结构
  19. ansys linux卸载干净,安装了几次ansys14.5,都没有成功,删除重新安装后许可安装不了了...
  20. weblogic反序列化漏洞修复

热门文章

  1. 计算机弹歌光年之外谱子,邓紫棋《光年之外》完整钢琴谱
  2. 消息循环中TranslateMessage和Dispatch函数的作用
  3. 城市C友会【官方牵头更多的线下交流的机会,你有怎样的期待?】
  4. 2021年计算机视觉工程师学习路线
  5. RabbitMQ 入门到应用 ( 六 ) 消息可靠性
  6. eclipse 项目中搜索资源(类方法,文件名,文件中的字符串)
  7. Golang开发入门
  8. BBS 与 BLog(博客)的区别到底是什么?[转载]
  9. 截图工具FastStone Capture 10.0官方简体中文版
  10. FIR滤波器,低通、高通、带通、带阻VC实现