57. Jump Game && Jump Game II
Jump Game
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example: A = [2,3,1,1,4]
, return true
.
A = [3,2,1,0,4]
, return false
.
思路:若能走的最远距离小于当前距离,说明走不过来。否则,利用此位置情况更新最远距离。
class Solution {
public:
bool canJump(int A[], int n) {
int reached = 0;
for(int i = 0; i < n; ++i) {
if(reached < i) return false;
if(i+A[i] > reached) reached = i+A[i];
}
return true;
}
};
Jump Game II
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Your goal is to reach the last index in the minimum number of jumps.
For example: Given array A = [2,3,1,1,4]
The minimum number of jumps to reach the last index is 2
. (Jump 1
step from index 0 to 1, then 3
steps to the last index.)
思路:
方法1: 动态规划。(能走到下标为 n-1 位置时,就结束。)
class Solution {
public:
int jump(int A[], int n) {
if(n == 0) return 0;
vector<int> step(n, INT_MAX);
step[0] = 0;
int reached = 0;
for(int i = 0; i < n-1; ++i) {
if(reached < i || step[i] >= step[n-1]) break;
if(i + A[i] > reached) {
reached = i+A[i];
for(int j = i+1; j < n && j <= reached; ++j)
step[j] = min(step[j], step[i]+1);
}
}
return step[n-1];
}
};
方法二 : 从前往后跳,每一步长内选择选择能跳到下一步长最远的点。 第一个步长为 0 - A[0], 第二步长为 A[0] - max(0+A[0],..., A[0] + A[A[0]]),
从 0->A[0]->maxA[i](0+A[0],...,A[i] + A[A[i]], ... , A[0] + A[A[0]]);
class Solution {
public:
int jump(int A[], int n) {
int last = 0, step = 0, maxV = 0;
for(int i = 0; i < n; ++i) {
if(i > last) {
last = maxV;
++step;
}
maxV = max(maxV, i + A[i]);
}
return step;
}
};
方法三: 从后往前确定应该走的位置。(从前往后遍历,如果 i + A[i] >= last , 说明其第一个能走到最后, 更新 last = i).
class Solution {
public:
int jump(int A[], int n) {
int last = n-1, step = 0;
while(last > 0) {
for(int i = 0; i < last; ++i) {
if(i+A[i] >= last) {
last = i;
step++;
break;
}
else if(i == last) return INT_MAX;
}
}
return step;
}
};
附加:以下这个代码也可以 AC. (但是常识上不觉得是对的)
class Solution {
public:
int jump(int A[], int n) {
int last = n-1, step = 0;
while(last > 0) {
for(int i = 0; i < last; ++i) {
if(i+A[i] >= last) {
last = i;
step++;
}
}
}
return step;
}
};
57. Jump Game && Jump Game II的更多相关文章
- [LeetCode#55, 45]Jump Game, Jump Game II
The problem: Given an array of non-negative integers, you are initially positioned at the first inde ...
- BestCoder27 1001.Jump and Jump... (hdu 5162) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5162 题目意思:有 n 个 kid,每个 kid 有三个成绩 a, b, c.选最大的一个成绩作为这个 ...
- 杭电oj 1087——super jump!jump!jump(java实现)
question:Super Jumping! Jumping! Jumping! 意思就是找一串数字中的和最大子串 思路:创建另一个数组,每一项是路径数组对应项之前最大子串的和,然后遍历此数组找出最 ...
- Solution -「CodeChef JUMP」Jump Mission
\(\mathcal{Description}\) Link. 有 \(n\) 个编号 \(1\sim n\) 的格子排成一排,并有三个权值序列 \(\{a_n\},\{h_n\},\{p_n ...
- Jump Game II 解答
Question Given an array of non-negative integers, you are initially positioned at the first index of ...
- 2018今日头条杯 E-Jump a Jump
Problem E. Jump A JumpInput file: standard inputOutput file: standard outputTime limit: 1 secondsMemor ...
- LeedCde 题解目录
1. Longest Palindromic Substring ( 最长回文子串 ) 2. Median of Two Sorted Arrays (两个排序数组的中位数) 3. Sqrt(x) 4 ...
- 《CODE》读后笔记——第14~20章
14.反馈与触发器 振荡器不需要人的干涉即可自主且不断地实现断开和闭合.所有计算机都靠某种振荡器来使其他部件同步工作. 当两个开关都断开时,电路有两个稳定状态,这样的一个电路称为触发器.触发器具有记忆 ...
- TopCoder SRM 633div1
250pts PeriodicJumping 题意:从起点开始,每次按找数组jump给定的长度,即jump[0], jump[1], jump[2].....jump[n-1], 向各个方向跳,跳 ...
随机推荐
- 自动装配Bean
Spring提供了几种技巧,可以减少XML的配置数量: 自动装配(autowiring):可以减少<property>(setter注入)和<constructor-arg>( ...
- C# 6.0新特性(转载)
简介 VS 2015中已经包含C# 6.0. C#在发布不同版本时,C#总是会有新特性,比如C#3.0中出现LINQ,C#4.0中的动态特性,c#5.0中的异步操作等.. C# 6.0中与增加了不少新 ...
- UIImagePickerController 获取相片视频
1.UIImagePickerController的静态方法: imagepicker = [[UIImagePickerController alloc]init]; //UIImagePic ...
- SVG 2D入门12 - SVG DOM
使用脚本可以很方便的完成各种复杂的任务,也是完成动画和交互的一种主流方式.由于SVG是html的元素,所以支持普通的DOM操作,又由于SVG本质上是xml文档,所以也有一种特殊的DOM操作,大多称之为 ...
- BZOJ 4034 BIT & Dfs序
调了恒久突然发现输出优化忘记带负号了.. 就是差分树状数组维护Dfs序即可. #include <iostream> #include <cstring> #include & ...
- nl2br() 函数
nl2br() 函数在字符串中的每个新行 (\n) 之前插入 HTML 换行符 (<br />).经常用于在线编辑的内容,以便显示. 用法:nl2br(string) 参数 描述 stri ...
- RBL开发笔记一
从这个系列开始 陆续记录整个RBL开发的过程 废话不多说 直入主题 10:54:53 2014-08-25 今天开发任务: RBL.h 的框架搭建出来 包括RBLServer RB ...
- 无法建立SSL连接
在使用wget工具的过程中,当URL使用HTTPS协议时,经常出现如下错误:“无法建立SSL连接”. 这是因为wget在使用HTTPS协议时,默认会去验证网站的证书,而这个证书验证经常会失败.加上&q ...
- PAT (Basic Level) Practise:1038. 统计同成绩学生
[题目链接] 本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第1行给出不超过105的正整数N,即学生总人数.随后1行给出N名学生的百分制整数成绩,中间以空格分隔.最 ...
- Map/Reduce个人实战--生成数据测试集
背景: 在大数据领域, 由于各方面的原因. 有时需要自己来生成测试数据集, 由于测试数据集较大, 因此采用Map/Reduce的方式去生成. 在这小编(mumuxinfei)结合自身的一些实战经历, ...