这个题目很明显的就能想到一个动态规划的算法
public class Solution {
public boolean canJump(int[] nums) {
boolean[] record=new boolean[nums.length];
record[0]=true;
for(int i=0;i<nums.length;i++)
{
for(int j=0;j<i;j++)
{
if(record[j]&&j+nums[j]>=i)
{
record[i]=true;
break;
}
}
}
return record[record.length-1];
}
}
不过提交上系统会有超时。。。
这个题目有一个贪心的解法。。算法在下面
int reach=nums.length-1;
for(int i=nums.length-1;i>=0;i--)
{
if(nums[i]+i>=reach)
{
reach=i;
}
}
return reach==0;
reach是我们维护的可以达到的一个点。而在这个点之后的所有点我们都可以达到。成立的原因就是。数组中存的是最多可以走多少步,若不是必须走多少步。这就可以用贪心来解。