刷题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个数,其中只有一个数出现了一次,其他都是两次,找出那 ...
随机推荐
- 无数据库模式kong/kong-ingress-controller
apiVersion: v1kind: Namespacemetadata: name: kong---apiVersion: apiextensions.k8s.io/v1beta1kind: C ...
- ASP.NET学习记录点滴
1.判读是否是第一次请求,有表单的页面,第一次请求时get请求,而不是post请求,所以可以用来判断请求是否是get,在apsx页面中,有微软封装的属性IsPostBack来判断是否是get还是pos ...
- Nexus-vPC与FHRP
去往vPC的流量,如何可能将会被本地的vPC成员端口所转发.FHRP的行为是被修改的,所有的FHRP路由器都会主动转发从vPC收到的流量.修改结果:如果可能,流量避免使用Peer link,这样创建一 ...
- oracle误操作表数据--回退(闪回)被提交后的数据
// 查询该时间段 这个表的状态 (就是表状态正常的时刻 下面的时间仅用于举例) select * from 表名 as of timestamp to_timestamp('2019-09-26 1 ...
- 【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
题意: 输入一个正整数N(<=1000),接下来输入N个点的序号.如果刚才输入的序列是一颗二叉搜索树或它的镜像(中心翻转180°)的先序遍历,那么输出YES并输出它的后序遍历,否则输出NO. t ...
- maven搭建ssm 完整过程
https://blog.csdn.net/qq_28008917/article/details/79755935
- if条件语句!
1.if 单分支语句 if [ 条件语句 ] then 条件操作fi 例子: [root@localhost ~]# if [ 1 -eq 0 ] //如果1等 ...
- 什么是SOA架构
什么是SOA架构 SOA是Service-Oriented Architecture的首字母简称,它是一种支持面向服务的架构样式.从服务.基于服务开发和服务的结果来看,面向服务是一种思考方式.其实SO ...
- vue.js 第九课
这次讲红色框框. 方法与事件处理器: 方法处理器: 内联语句处理器: 事件修饰符: 按键修饰符: 为什么在HTML中监听事件? 1.v-on绑定事件 带参数 2.事件对象$event: 有时也需要调用 ...
- 如何在PHP中防止SQL注入
使用PDO对象(对于任何数据库驱动都好用) addslashes用于单字节字符串的处理, 多字节字符用mysql_real_escape_string吧. 另外对于php手册中get_magic_qu ...