这个题是个复杂的跳台阶问题,主要是测试能否跳到最后,它不像之前那些跳台阶问题了,之前的不会考虑能否跳出去的问题。所以之前的程序用在这里很可能会导致死循环;我的主要思路是"贪心算法+筛选条件"来解题。

1.贪心算法主要是用来减少跳的次数

我们可以从当前位置(cur)可以跳的步数(N),以及当前位置所跳的范围内[cur~cur+N]中每个台阶能跳的最大距离;用这两者综合起来决定下一次应该跳的位置。有人会说这样还不会漏掉问题的正解呢?下面的判断条件可以说明该问题的。

2.筛选条件是用来过滤掉"死台阶(该台阶能跳的距离为 0)"

筛选条件是过滤掉下一个位置中跳的距离为0的台阶,若下一个台阶能跳的距离为0 则该台阶不能跳,我们应该过滤掉下一个能跳的台阶中所有能跳的距离为0的台阶;因为我们每次都是过滤掉不能跳的台阶,这样不仅不会漏掉正解,反而能帮助我们找到正解的,若是这个不能明白的话,建议好好看看代码并自己亲手在纸上去测试一下该方法的可行度。

以上两种方法其实是同时进行的,所以在写代码的时候需要注意这些问题,代码如下,其中关键位置给出了注释,希望帮助大家理解思路。

class Solution {
public:int canJump(vector<int>& nums){/*这类问题还是使用贪心算法*/int length = nums.size();int index = 0;if (length == 0){return 0;}while (index < length - 1){int next = 0;int begin = index;int onejump = 0;for (int i = 1; i <= nums[index]; ++i){if (nums[index] >= length - 1 || index + i >= length-1 || index + nums[index + i] >= length-1){           return true;}if (i + nums[index + i] > onejump && nums[index+i]!= 0){next = i;onejump = i + nums[index + i];}}if (next == 0){return false;}index += next;}return (index >= length - 1);}
};

结果如下:

LeetCode 55相关推荐

  1. 贪心——跳跃游戏(Leetcode 55)

    题目选自Leetcode 55. 跳跃游戏 这道题表面上不是求最值,但是可以改一改: 请问通过题目中的跳跃规则,最多能跳多远?如果能够越过最后一格,返回 true,否则返回 false. 所以解题关键 ...

  2. 【贪心 和 DP】LeetCode 55. Jump Game

    LeetCode 55. Jump Game 貌似一直就没做几个贪心的题,是时候好好学习一个了.. 参考网址:http://www.cnblogs.com/grandyang/p/4371526.ht ...

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

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

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

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

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

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

  6. 【LeetCode 55】【LeetCode 45】 跳跃游戏

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

  7. leetcode 55. Jump Game | 55. 跳跃游戏(暴力递归->傻缓存->DP)

    题目 https://leetcode.com/problems/jump-game/ 题解 又是经典套路,暴力递归->傻缓存->DP 没写草稿,直接看代码吧 class Solution ...

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

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

  9. leetcode - 55. 跳跃游戏

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

  10. 【贪心】LeetCode 55. Jump Game

    LeetCode 45. Jump Game II 参考网址:http://www.cnblogs.com/grandyang/p/4373533.html Solution1: 贪心算法,这里贪婪并 ...

最新文章

  1. MySQL/MariaDB查询执行路径
  2. python str输出到txt_Python 速学!不懂怎么入门python的小白看这篇就够了!
  3. Fabric入门之架构
  4. 转向AIOps之前,你应该做好哪些准备?
  5. 数据库表-权限表应用
  6. ubuntu中mysql操作_uBuntu下安装MySql,及mySql操作!
  7. PCA原理分析和意义(二)
  8. mysql update 顺序_MySQL的Update语句Set顺序问题
  9. python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接。问题解决方案
  10. python没有报错但是没结果_python爬取豆瓣top250的电影的信息,没有报错哦,但是没有结果...
  11. POJ-3267 The Cow Lexicon---删除字符匹配单词
  12. imei模拟修改_自动修改android模拟设备号imei的小程序
  13. winhex数据恢复linux,winhex数据恢复完整图文教程
  14. CISP 考试教材《第 10 章 知识域:软件开发安全》知识整理
  15. 1万美元FS-ISAC网络安全奖学金
  16. iOS设置App的名称和简单的版本国际化与本地化
  17. 关于为什么不能减小rb来消除截止失真
  18. android apn切换工具,Android修改和添加APN网络
  19. 时间序列之AR、MA、ARMA、ARIMA模型
  20. obs有没有android版本,obs插件手机版下载-obs插件 安卓版v1.0.0-pc6手机下载

热门文章

  1. 狂飙!GPT-4最新20+个应用案例集锦,附视频
  2. python超越方程_matlab简单的超越方程求解近似值
  3. 【研究院】一年了,再看看江湖中的达摩院
  4. 相信未来  作者:食指
  5. python 迭代器和生成器 小斟
  6. 使用安卓实现一个二维码扫描功能(基于Android Studio)
  7. 心田花开:三年级语文期末复习资料
  8. 电子招标采购系统源码—互联网+招标采购
  9. 如何在Mirth Connect中创建和调用自定义Java代码
  10. 如何申请163邮箱账号,用好电子邮箱办公效率提升N+