题目描述:
题目分析:
这道题我觉得最关键的是要知道在当前位置所能达到最远的距离是多少。
比如第i个下标处所能达到的最远距离是i+nums[i],那么如果j<i+nums[i],那么比可以从i到达j处。
因此我们只需要时刻维护好这个最远距离,当最远距离大于等于最后一个元素的下标时,我们就说肯定能够到达。
但是需要注意的是,尽管最远距离应该保持在max(max,i+nums[i]),但是我们的i能够遍历到的最远位置也受到max的限制,因此需要注意满足一个条件i<=max的情况下,进行更新max。
代码:
public class CanJump55 {
public static void main(String[] args) {
int[] nums = {3,2,1,0,4};
System.out.println(canJump(nums));
}
public static boolean canJump(int[] nums) {
int max = 0; //表示可以到达的最大下标
int i = 0; //表示当前下标
int len = nums.length;
while(i<=max&&max<len-1){ //第一个判断条件是i必须受到max的限制,最远只能到达max位置,第二个判断条件判断是否能够到达最后一个元素,够了就直接退出
max = Math.max(max,i+nums[i]);
i++;
}
if (max<len-1)
return false;
else
return true;
}
}