一、题目说明

题目55. Jump Game,给定一组非负数,从第1个元素起,nums[i]表示你当前可以跳跃的最大值,计算能否到达最后一个index。难度是Medium。

二、我的解答

非常惭愧,这个题目我做完,提交n次,除了几次边界错,其他就是Time Limit Exceeded,而且优化也无果。

我的代码:

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

经过分析,上述代码是采用dp解答的,问题出在“从左到右”计算。如果“从右到左”,用不用dp都很容易解决:

class Solution{
public:
bool canJump(vector<int>& nums) {
//数组长度为1可以到达,如果nums[0]为0不可到达
if(nums.size()<=1)
return true;
else if(nums[0] == 0)
return false;
for(int i=nums.size()-2;i>0;i--){
//找到0,从前1个开始,判断能否跳过去
if(nums[i]==0){
int j=i-1;
while(j>=0){
if(nums[j]>(i-j)){
i = j;
break;
}else if(j==0)
return false;
j--;
}
}
}
return true;
}
};

性能:

Runtime: 16 ms, faster than 29.20% of C++ online submissions for Jump Game.
Memory Usage: 9.9 MB, less than 80.26% of C++ online submissions for Jump Game.

三、优化措施

看了大神的解答,十年苦读白费了。4行代码,可读性好,绝妙之极!

class Solution{
public:
//dp算法,从最后一个开始,last指示最后要能跳到的位置
bool canJump(vector<int>& nums) {
int last = nums.size() - 1;
for(int i = nums.size() - 2; i >= 0; i--)
if(last - i <= nums[i]) last = i;
return last == 0;
}
};

性能还不错:

Runtime: 12 ms, faster than 74.46% of C++ online submissions for Jump Game.
Memory Usage: 9.9 MB, less than 86.84% of C++ online submissions for Jump Game.

刷题55. Jump Game的更多相关文章

  1. leetcode刷题-55跳跃游戏

    题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 思路 贪心算法:记录每一个位置能够跳跃到的最远距离,如果 ...

  2. [LeetCode] 系统刷题5_Dynamic Programming

    Dynamic Programming 实际上是[LeetCode] 系统刷题4_Binary Tree & Divide and Conquer的基础上,加上记忆化的过程.就是说,如果这个题 ...

  3. LeetCode刷题记录(python3)

    由于之前对算法题接触不多,因此暂时只做easy和medium难度的题. 看完了<算法(第四版)>后重新开始刷LeetCode了,这次决定按topic来刷题,有一个大致的方向.有些题不止包含 ...

  4. leetcode 刷题记录(java)-持续更新

    最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...

  5. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  6. 55. Jump Game leetcode

    55. Jump Game Total Accepted: 95819 Total Submissions: 330538 Difficulty: Medium Given an array of n ...

  7. 用js刷题的一些坑

    leecode可以用js刷题了,我大js越来越被认可了是吧.但是刷题中会因为忽略js的一些特性掉入坑里.我这里总结一下我掉过的坑. 坑1:js中数组对象是引用对象 js中除了object还有数组对象也 ...

  8. BZOJ4590 自动刷题机

    Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写 ...

  9. leetcode刷题总结一

    大四狗找工作,要刷题了,leetcode上面题目比较适合面试算法类题目,也不纯粹为了蒙题,锻炼一下面试类型的思维 Single Number: 有N个数,其中只有一个数出现了一次,其他都是两次,找出那 ...

随机推荐

  1. Linux重装为Windows后读取原EXT类型数据盘

    Linux重装为Windows后读取原EXT类型数据盘 1 2 3 4 分步阅读 Windows的文件系统通常使用NTFS或者FAT32格式,而Linux的文件系统格式通常是EXT系列.当操作系统从L ...

  2. Feign代理必须加value否则启动失败

    Feign代理必须加value否则启动失败 @RequestParam(value=”xxx”)

  3. linux与python3安装redis

    1.linux安装redis服务 apt-get install redis* 进入客户端管理 redis-cli 启动服务 service redis startservice redis rest ...

  4. 【转】弹出USB大容量存储设备时出问题的解决方法

    原文链接 如下图所示,这个问题,相信很多人都有遇到过,而且经常难以解决,试了很多方法都无效.到最后,只能抱着侥幸的心理直接拔出,如果运气好,可能没有事,如果运气不好,你的U盘或者移动硬盘就要从此报废了 ...

  5. Jquery 事件 文本框常用

    1.只许输入类型 //只能输入整数和小数 function txtKeyUpDecimal(txtName) { getID(txtName).keyup(function(){ //keyup事件处 ...

  6. php对象、面向对象

    对象 万物皆对象 一切可见之物都是对象 一切不可见之物也是(抽象的事物也是对象): 对象包含两部分 1对象的组成元素 对象的数据模型又称为对象的属性,又被称为对象的成员变量 2.对象的行为 是对象的行 ...

  7. 移动端 safari苹果手机对大额数字自动变成电话号码

    1.苹果手机safari浏览器,用<meta name="format-detection" content="telephone=no">解决.缺 ...

  8. jsp include参数传送接收与应用

    先看一个简单的应用,在a.jsp中写如下代码 <html> <head></head> <body> <div> <jsp:inclu ...

  9. 浅谈CVE-2018-12613文件包含/buuojHCTF2018签到题Writeup

    文件包含 蒻姬我最开始接触这个 是一道buuoj的web签到题 进入靶机,查看源代码 <!DOCTYPE html> <html lang="en"> &l ...

  10. JavaScript - 运行机制,作用域,作用域链(Scope chain)

    参考 https://www.jianshu.com/p/3b5f0cb59344 https://jingyan.baidu.com/article/4f34706e18745be386b56d46 ...