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.
class Solution {
public boolean canJump(int[] nums) {
if(nums==null || nums.length<=0) return false;
int[] dp = new int[nums.length];
dp[0] = nums[0];
for(int i=1; i<nums.length; i++){
dp[i] = Math.max(dp[i-1],nums[i-1])-1;
if(dp[i]<0) return false;
}
return true;
}
}
这一道题目的解法应该是用贪心算法,但是我为了训练一下动态规划,所以写出了动态规划的写法
下面是贪心算法的写法
class Solution {
public boolean canJump(int[] nums) {
if(nums==null || nums.length<=0) return false;
int max = 0;
for(int i=0; i<nums.length; i++){
max = Math.max(nums[i]+i,max);
if(i<nums.length-1 && max<=i) return false;
if(i==nums.length-1 && max<i) return false;
}
return true;
}
}
贪心算法需要注意的地方是末尾元素和其他元素判断false的条件不同,原因在于到达末尾元素就可以,而到达其他位置的元素的时候max的值必须大于当前的位置