题目描述
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
示例 1:
输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。
解题思路:
- 原则 每次选择当前位置可达的最远位置
- 使用数组index记录每个位置可到达最远位置
- 使用jump遍历index 当jump<index.length&&jump<=节点可达最远位置maxlength,jump++ 这个过程中如果jump对应的index元素>maxlength maxlength=index[jump]
- 当jump==index.length 说明可达*
class Solution {
public boolean canJump(int[] nums) {
int[] index=new int[nums.length];
for(int i=0;i<index.length;i++){
index[i]=nums[i]+i;
}
int jump=0;
int maxlength=index[0];
while(jump<=maxlength&&jump<index.length){
if(index[jump]>maxlength)
maxlength=index[jump];
jump++;
if(jump==index.length)
return true;
}
return false;
}
}