给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如:A = [2,3,1,1,4]A=[2,3,1,1,4] 能够跳跃到最后一个下标,输出true
;
A = [3,2,1,0,4]A=[3,2,1,0,4] 不能跳跃到最后一个下标,输出false
。
输入格式
第一行输入一个正整数 n(1 \leq n \leq 500)n(1≤n≤500),接下来的一行 nn 个整数,输入数组 A_iAi。
输出格式
如果能跳到最后一个下标,输出true
,否则输出false
。
样例输入
5 2 0 2 0 1
样例输出
true
解题思路:首先这个题是看是否能跳过去,最简便的方法就是贪心法。我们定义一个变量,用来标记这个数组最大可以跳到哪里去。所以就是每次都是数组元素下标与数组元素的和,如果这个和比最大跳跃的距离大,就证明这个才是现在为止可以跳的最远的。
举例:5,4,2,3,1,0,0,3,6,8
max=0;
第0号元素,可以跳跃的最大距离就是0+5=5;0<=max;max<5;max=5;
第1号元素,可以跳跃的最大距离就是1+4=5;1<=max;max不小于5;max=5;
第2号元素,可以跳跃的最大距离就是2+2=4;2<=max;不小于4;max=5;
第3号元素,可以跳跃的最大距离就是3+3=6;3<=max;max<6;max=6;
第4号元素,可以跳跃的最大距离就是1+4=5;4<=max;max不小于5;max=6;
第5号元素,可以跳跃的最大距离就是0+5=5;5<=max;max不小于5;max=6;
第6号元素,可以跳跃的最大距离就是0+6=6;6<=max;max不小于6;max=6;
第7号元素,可以跳跃的最大距离就是0+5=5;7不小于max;max<5;max=5;
到7号元素就停止了,因为前面没有一个数据能跳到7号元素。
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int count,i,max=0;
Scanner stdin = new Scanner(System.in);
count=stdin.nextInt();
int []a=new int[1000];
for(i=0;i<count;i++)
{
a[i]=stdin.nextInt();
}
for(i=0;i<count;i++)
{
if(i>max)
{
System.out.println("false");
return;
}
if(i+a[i]>max)
max=i+a[i];
}
System.out.println("true");
}
}