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], 向各个方向跳,跳 ...
随机推荐
- java 异常
异常简介 java中有Error和Exception Error:是程序无法处理的错误,表示运行应用程序中较严重问题.大多数错误与代码编写者执行操作无关,而表示运行时JVM出现的问题. Excepti ...
- MYSQL中关于日期处理的函数
< DOCTYPE HTML PUBLIC -WCDTD HTML TransitionalEN> MySQL数据库中SQL语句中 关于日期.时间\时间戳的函数 一 MySQL 获得当 ...
- no package 'webkit-1.0' found
linux安装程序的时候 ./configure 提示 no package 'webkit-1.0' found 解决方法: 安装 libwebkitgrk-dev包 1. sudo apt-get ...
- Java最最基础的语法小结
一定得记住,不然吃大亏了真的 注意不可同时运行,每次只能运行一个类型 package aad;///建根文件的时候选择了这一项就要写,没选择可以不用写 import java.io.*; import ...
- 跨服务器之间的session共享
跨服务器之间的Session共享方案需求变得迫切起来,最终催生了多种解决方案,下面列举4种较为可行的方案进行对比探讨: 1. 基于NFS的Session共享 NFS是Net FileSystem的简称 ...
- Socket编程基础——Socket选项
有些情况下,我们需要对Socket行为和属性进一步控制,例如修改缓冲区大小,查看Socket状态,这就需要设置/获取Socket选项. 1.获取Socket选项int getsockopt(SOCKE ...
- 重写ScrollView 解决ScrollView嵌套viewpager事件冲突
import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetecto ...
- mm/kmalloc.c
/* * linux/mm/kmalloc.c * * Copyright (C) 1991, 1992 Linus Torvalds & Roger Wolff. * * Writt ...
- linux iftop流量查看工具的安装与使用
1.安装依赖包yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel 2.下载iftop wget http://www ...
- 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 (二) : 引入中间层NotificationCenter
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 一对多的观察者模式机制有什么缺点? 想要查看 ...