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

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

判断你是否能够到达最后一个位置。

示例 1:

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

示例 2:

输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————
解题思路:使用贪心算法,设定一个标记值indexindexindex,标记值indexindexindex初始值为数组numsnumsnums的终点位置,从倒数第二个数nums[i]nums[i]nums[i]往前(i⇒0)(i\Rightarrow 0)(i⇒0)遍历,查看是否存在满足条件的情况:nums[i]+i>=indexnums[i]+i>=indexnums[i]+i>=index如果满足条件,则把indexindexindex的值改为:index=iindex=iindex=i然后继续遍历,最后对indexindexindex进行判断。如果indexindexindex的值为0,表示能到达数组终点。

因为从indexindexindex所在的位置是一定能到达终点的,所以如果存在nums[i]+i>=indexnums[i]+i>=indexnums[i]+i>=index那么意思就是存在iii能到达indexindexindex所在的位置,所以从iii能到达终点。

具体的c++代码如下:

class Solution {public:bool canJump(vector<int>& nums) {int index = nums.size()-1;  # 初始化index为数组终点for(int i=nums.size()-1;i>=0;--i){if(nums[i]+i>=index)  # 如果符合判断条件index = i;  # 更新index的值}return index==0;  # 判断index是否为0,为0则返回true}
};

个人解法:因为只要数组中不存在0,则数组是一定可以从起点到达终点的。因为数组是非负数组,所以一定存在元素0。设0元素所在的索引为indexindexindex,这时候就要判断从起始点到0这段距离内,是否存在元素nums[i]nums[i]nums[i]使得nums[i]+i>indexnums[i]+i>indexnums[i]+i>index如果该条件成立,则数组可以跳过零元素继续向前移动;但是注意当0元素位于数组终点时,判断条件为nums[i]+i>=indexnums[i]+i>=indexnums[i]+i>=index其C++代码为

class Solution {public:int dfs(vector<int>& nums,int n)  # 递归函数,n是数组nums中零元素所在的位置{for(int i=0;i<n;i++)  # 遍历从起始点到零元素{if(nums[i]+i>n && n!=nums.size()-1)  # 如果零元素所在的位置不是数组终点return 1;else if(nums[i]+i>=n && n==nums.size()-1)  # 如果零元素所在的位置是数组的终点return 1;}return 0;  # 不能跳过零元素,则直接返回0}bool canJump(vector<int>& nums) {int flag = 1;  # 标记flag,当为1时表示能从起点到终点,当为0时表示不能if(nums.size()==1)  # 当数组长度为1时,一定可以到达终点,所以返回1return 1;for(int i=0;i<nums.size();i++)  # 遍历数组,寻找零元素的位置{if(nums[i]!=0)  # 如果当前元素不为零,直接跳过continue;if(nums[i]==0)  # 如果当前元素为零,进入判断函数flag = dfs(nums,i);if(flag==0) # 当flag为0时,表示存在元素0不能跳过,直接跳出循环,返回flagbreak;}return flag;}
};

leetcode - 55. 跳跃游戏相关推荐

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

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

  2. LeetCode 55. 跳跃游戏 中等难度

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

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

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

  4. Java实现 LeetCode 55 跳跃游戏

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

  5. LeetCode 55. 跳跃游戏

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

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

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

  7. 贪心法——LeetCode 55 跳跃游戏

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

  8. Leetcode 55.跳跃游戏 (每日一题 20210706)

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

  9. leetcode 55. 跳跃游戏 思考分析

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

最新文章

  1. 初学C++正则表达式(regex)
  2. WebBrowser1.Navigate重复载入同一页面时载入的是旧页面
  3. boost::container实现扩展bwd测试分配器程序
  4. python显示表格_在Python中获取Excel表格的数量
  5. mysql存储过程中怎么睡几秒_MySql的逻辑架构
  6. python重复命令_Python简化重复命令教案
  7. 实现数组和List之间的相互转换
  8. matlab求奶制品,数学建模案例之线性规划.ppt
  9. 路由器连接宽带(成功上网步骤方法)
  10. 基于Cocos2d-x开发guardCarrot--7 《保卫萝卜2》关卡选择页面开发
  11. python3 numpy二维方法_Python numpy:基于坐标创建二维值数组
  12. Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)
  13. 希尔伯特变换(matlab)
  14. 【Java】按要求编程输出2018年日历
  15. conda 速度慢 解决方案
  16. 手机号不用后,这操作必须要做,不然银行卡里的钱就别人花了
  17. java 线程管理_Java提供的线程池来创建多线程,进一步优化线程管理。
  18. PHP对接企业微信审批回调
  19. 看医疗行业如何建立信息化战略决策
  20. js算某天是今年的第几天

热门文章

  1. linux access
  2. Docker快速安装RabbitMQ服务
  3. 如何在Linux/MacOS系统上安装Microsoft SQL Server
  4. 如何在MySQL中创建新用户并授予权限
  5. Yarn 报错:error Couldn‘t publish package: “https://registry.yarnpkg.com/ 。。。Forbidden“
  6. 【C语言】无参函数调用实例
  7. 【HTML】输入密码访问
  8. 学习实践量子计算与量子
  9. JavaScript Try Catch:异常处理说明
  10. sql join语句语法_SQL Left Join语句:示例语法