55. 跳跃游戏 (两种解法)
题目:
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。
示例 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. 跳跃游戏 (两种解法)相关推荐
- 代码随想录算法训练营第三十二天_第八章_贪心算法 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
LeetCode 122.买卖股票的最佳时机II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票 ...
- 约瑟夫环问题的两种解法(详解)
约瑟夫环问题的两种解法(详解) 题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆 ...
- LeetCode—55.跳跃游戏(Jump Game)——分析及代码(C++)
LeetCode-55.跳跃游戏[Jump Game]--分析及代码[C++] 一.题目 二.分析及代码 1. 贪心 (1)思路 (2)代码(简洁) (3)代码(高效) (4)结果 三.其他 一.题目 ...
- _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II 、55.跳跃游戏、45.跳跃游戏II
_28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II .55.跳跃游戏.45.跳跃游戏II 题目列表 122.买卖股票的最佳时机II 55.跳跃游戏 45 ...
- Leetcode刷题笔记 55. 跳跃游戏
55. 跳跃游戏 时间:2020年12月1日 知识点:贪心 题目链接:https://leetcode-cn.com/problems/jump-game/ 题目 给定一个非负整数数组,你最初位于数组 ...
- 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间
本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...
- usaco Ordered Fractions 顺序的分数(两种解法)
这题很好玩,这里有两种解法. 第一种我自己写的,先找到所有的既约真分数,然后写了一个cmp函数进行排序最后输出.我写的时候还在想这章不是搜索吗这跟搜索关系不大吧,难道是怕我们思维定式化故意出的题不是搜 ...
- 牛客--追债之旅 两种解法
文章目录 第一种 第二种: 一共两种解法,所以即便你不会最短路,也可以做,甚至爆搜+剪枝的时间和空间消耗小于最短路做法. 第一种 题意: 小明现在要追讨一笔债务,已知有n座城市,每个城市都有编号,城市 ...
- LeetCode 55. 跳跃游戏 中等难度
55. 跳跃游戏 题目: 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1:输入: [2,3,1,1, ...
- leetcode 73 矩阵置零 C++ 两种解法
leetcode 73 两种解法~~,没有一个是我想出来的,哈哈~~ one class Solution {public:void setZeroes(vector<vector<int ...
最新文章
- 解决AndroidStudio导入项目卡在gradle加载界面
- 大话数据结构03:静态链表
- 3.5 矩阵 $4$ 个空间和方程 $A\mathbf{x}=\mathbf{y}$ 的关系
- JS中ptototype和__proto__的关系
- 计算机机房t4,机房等级-T2-T3-T4-如何划分
- ElasticSearch 复合查询
- Linux下用ImageMagick将彩色照片转换成黑白照片
- python初学小甲鱼_Python零基础入门学习 作者:小甲鱼
- 洛谷 P3373 【模板】线段树 2 解题报告
- 命令关闭手机蓝牙_iPhone手机这些实用的便捷功能,你知道多少?
- 猫眼电影排行榜python爬虫
- 2021 年前端宝典【超三百篇】
- ipad MOV转mp4
- Pycharm 编辑器文本中间出现有一条分割线
- 计算机中各进制的转换
- Java应用在docker环境配置容器健康检查,如何保证消息队列的高可用
- 登录界面及其功能的设计
- “你 100% 的时间都是 IBM 员工”,程序员的业余个人项目也属于公司?
- 超越Java:Python正式登顶世界第一编程语言
- 千峰教学视频(官方)