题目:
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
.
题意:
给定一个非负整数数组,初始化位置在数组的首位置。
数组中的每个元素表示你可以在这个位置能够跳跃的最大距离。
判断你是否可以到达数组的最后位置。
比如:
A = [2,3,1,1,4]
, return true
.
A = [3,2,1,0,4]
, return false
.
算法分析:
用贪心策略,刚开始step = A[0],到下一步step--, 并且取step = max(step, A[1]),这样step一直是保持最大的能移动步数,局部最优也是全局最优
AC代码:
public class Solution
{
public boolean canJump(int[] nums)
{
if(nums==null||nums.length==0)
return false;
int step = nums[0];
for(int i = 1; i < nums.length; i++)
{
if (step > 0)
{
step--;//因为这里已经往前走了一步了,所以步数需要减1
step = Math.max(step, nums[i]);
}
else
return false;
}
return true;
}
}