55. Jump Game
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.
Example 1:
Input: [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
Example 2:
Input: [3,2,1,0,4]
Output: false
Explanation: You will always arrive at index 3 no matter what. Its maximum
jump length is 0, which makes it impossible to reach the last index.
1、直接迭代
class Solution {
public boolean canJump(int[] nums) {
return canJump(0,nums);
}
public boolean canJump(int i,int[] nums) {
if(i>=nums.length-1)
return true;
for(int step=nums[i];step>0;step–){
if(canJump(i+step,nums)){
return true;
}
}
return false;
}
}
严重超时
2、染色法
遍历数组,第i个元素的值为x,则之后x个元素皆被染色,未被染色的元素是无法达到的。
class Solution {
public boolean canJump(int[] nums) {
int rightMost=0;
for(int i=0;i<nums.length;i++){
if(i>rightMost)
return false;
rightMost=Math.max(rightMost,i+nums[i]);
}
return true;
}
}