题目:

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。

示例 1:

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

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

解法1:贪心计算能走到的每个地方能达到的最远地方

class Solution {
public:bool canJump(vector<int>& nums) {int len = nums.size();if (0 == len)return false;if (1 == len)return true;int sum = 0;for (int i = 0; i < len; i++) {if (i <= sum) {                  //已可达之处之内,求得最远处sum = max(sum, i+nums[i]);if (sum >= len-1)return true;}}return false;}
};

这种解法的另一种实现是:

class Solution {
public:bool canJump(vector<int>& nums) {int len = nums.size();if (0 == len)return false;if (1 == len)return true;int sum = 0;for (int i = 0; i < len; i++) {if (i > sum)return false;sum = max(sum, i+nums[i]);}return true;}
};

解法2:失败是因为0

class Solution {
public:bool canJump(vector<int>& nums) {int len = nums.size();if (0 == len)return false;if (1 == len)return true;int sum = 0, j;for (int i = 0; i < len-1; i++)    //前len-1个数如果有0可能会失败if (0 == nums[i]) {for (j = 0; j < i; j++)if (nums[j] + j > i)   //还能向后移动break;if (j == i)return false;}return true;}
};

也可实现如下

class Solution {
public:bool canJump(vector<int>& nums) {int len = nums.size();if (len < 2)return true;if (nums[0] == 0)return false;for (int i = 1; i < len-1; ++i) {if (nums[i] == 0) {         //有0可能失败int j = 0;for (; j < i; ++j) {if (nums[j] > i-j)  //0之前有能越过此0的坑位break;}if (j == i)return false;}}return true;}
};

55. 跳跃游戏 (两种解法)相关推荐

  1. 代码随想录算法训练营第三十二天_第八章_贪心算法 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

    LeetCode 122.买卖股票的最佳时机II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票 ...

  2. 约瑟夫环问题的两种解法(详解)

    约瑟夫环问题的两种解法(详解) 题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆 ...

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

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

  4. _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II 、55.跳跃游戏、45.跳跃游戏II

    _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II .55.跳跃游戏.45.跳跃游戏II 题目列表 122.买卖股票的最佳时机II 55.跳跃游戏 45 ...

  5. Leetcode刷题笔记 55. 跳跃游戏

    55. 跳跃游戏 时间:2020年12月1日 知识点:贪心 题目链接:https://leetcode-cn.com/problems/jump-game/ 题目 给定一个非负整数数组,你最初位于数组 ...

  6. 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间

    本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...

  7. usaco Ordered Fractions 顺序的分数(两种解法)

    这题很好玩,这里有两种解法. 第一种我自己写的,先找到所有的既约真分数,然后写了一个cmp函数进行排序最后输出.我写的时候还在想这章不是搜索吗这跟搜索关系不大吧,难道是怕我们思维定式化故意出的题不是搜 ...

  8. 牛客--追债之旅 两种解法

    文章目录 第一种 第二种: 一共两种解法,所以即便你不会最短路,也可以做,甚至爆搜+剪枝的时间和空间消耗小于最短路做法. 第一种 题意: 小明现在要追讨一笔债务,已知有n座城市,每个城市都有编号,城市 ...

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

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

  10. leetcode 73 矩阵置零 C++ 两种解法

    leetcode 73 两种解法~~,没有一个是我想出来的,哈哈~~ one class Solution {public:void setZeroes(vector<vector<int ...

最新文章

  1. 解决AndroidStudio导入项目卡在gradle加载界面
  2. 大话数据结构03:静态链表
  3. 3.5 矩阵 $4$ 个空间和方程 $A\mathbf{x}=\mathbf{y}$ 的关系
  4. JS中ptototype和__proto__的关系
  5. 计算机机房t4,机房等级-T2-T3-T4-如何划分
  6. ElasticSearch 复合查询
  7. Linux下用ImageMagick将彩色照片转换成黑白照片
  8. python初学小甲鱼_Python零基础入门学习 作者:小甲鱼
  9. 洛谷 P3373 【模板】线段树 2 解题报告
  10. 命令关闭手机蓝牙_iPhone手机这些实用的便捷功能,你知道多少?
  11. 猫眼电影排行榜python爬虫
  12. 2021 年前端宝典【超三百篇】
  13. ipad MOV转mp4
  14. Pycharm 编辑器文本中间出现有一条分割线
  15. 计算机中各进制的转换
  16. Java应用在docker环境配置容器健康检查,如何保证消息队列的高可用
  17. 登录界面及其功能的设计
  18. “你 100% 的时间都是 IBM 员工”,程序员的业余个人项目也属于公司?
  19. 超越Java:Python正式登顶世界第一编程语言
  20. 千峰教学视频(官方)

热门文章

  1. 用Ps来制作音乐图片
  2. 输入法字母和数字间距变大的解决方法
  3. php mysql_num_rows函数_使用PHP mysqli_num_rows函数方法
  4. javaweb-青橙项目-2-77
  5. i7 1160g7参数 i71160G7怎么样
  6. echarts中饼图引导线加圆点
  7. Python (基础例子)
  8. Vue学习二:安装element-ui组件库
  9. 【SpringBoot】引入mybatis及连接Mysql数据库
  10. 台积电签约南京拼抢大陆市场