刷题55. Jump Game
一、题目说明
题目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的更多相关文章
- leetcode刷题-55跳跃游戏
题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 思路 贪心算法:记录每一个位置能够跳跃到的最远距离,如果 ...
- [LeetCode] 系统刷题5_Dynamic Programming
Dynamic Programming 实际上是[LeetCode] 系统刷题4_Binary Tree & Divide and Conquer的基础上,加上记忆化的过程.就是说,如果这个题 ...
- LeetCode刷题记录(python3)
由于之前对算法题接触不多,因此暂时只做easy和medium难度的题. 看完了<算法(第四版)>后重新开始刷LeetCode了,这次决定按topic来刷题,有一个大致的方向.有些题不止包含 ...
- leetcode 刷题记录(java)-持续更新
最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...
- C#LeetCode刷题-数组
数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...
- 55. Jump Game leetcode
55. Jump Game Total Accepted: 95819 Total Submissions: 330538 Difficulty: Medium Given an array of n ...
- 用js刷题的一些坑
leecode可以用js刷题了,我大js越来越被认可了是吧.但是刷题中会因为忽略js的一些特性掉入坑里.我这里总结一下我掉过的坑. 坑1:js中数组对象是引用对象 js中除了object还有数组对象也 ...
- BZOJ4590 自动刷题机
Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写 ...
- leetcode刷题总结一
大四狗找工作,要刷题了,leetcode上面题目比较适合面试算法类题目,也不纯粹为了蒙题,锻炼一下面试类型的思维 Single Number: 有N个数,其中只有一个数出现了一次,其他都是两次,找出那 ...
随机推荐
- Java后台技术(Dubbo入门)
我现在公司提供的产品是即时通讯软件,因为我从.net桌面应用开发转岗,从java后台转项目经理,让我有幸拥有了后台开发人员所有的权限,所有的后台源码和技术文档对我开放,可惜仅在后台待了3周不到,还没来 ...
- Linux新手常用命令
Linux下有时候需要转换到管理员权限 su root 然后输入密码 或者直接 su ---------------------------------------- 但可能存在鉴定错误的异常 ...
- POJ1321棋盘问题(暴搜)
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...
- [蓝桥杯2017初赛]Excel地址
题目描述 Excel单元格的地址表示很有趣,它使用字母来表示列号. 比如,A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,.... 当然Excel的最 ...
- 开关机安全控制!(设置进入bois的密码)
1.调整 BOIS 引导设置(1)将第一引导设备设为当前系统所在硬盘 (2)设置管理员密码 (3)进入bois后如图所示需输入bols密码才能登入
- Python开发:Python运算符
运算符 1.算数运算: 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返 ...
- 记一次RocketMQ源码导入IDEA过程
首先,下载源码,可以官网下载source包,也可以从GitHub上直接拉下来导入IDEA.如果是官网下载的source zip包,直接作为当前project的module导入,这里不赘述太多,只强调一 ...
- Write-Up-wakanda-1
关于 下载地址:点我 哔哩哔哩:哔哩哔哩 祖传开头 信息收集 这里用vm虚拟机可能有一点问题,因为官方的是用vbox虚拟机导出的镜像文件.所以这次使用vbox虚拟机. ➜ ~ ip a show de ...
- HTML5模板引擎 Thymeleaf 教程(转)
原文:http://www.open-open.com/lib/view/open1383622135586.html Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非 ...
- GsonUtils.getGson().fromJson() 转泛型集合用法
//计算其他收费 List<QiTaFree> qiTaFreeList = GsonUtils.getGson().fromJson(exhiMain.getQiTaFressJson( ...