跳跃游戏
题目链接:跳跃游戏
思路:
- 利用动态规划的思路:定义一个dp数组,存放每个对应的位置所能抵达的最远下标值,递归式为:dp[i] = max{dp[i-1],i+nums[i]},如果当前下标大于dp[i-1],说明当前下标是达不到的位置,故直接return false
- 对上述数组转化为一个int型数,即变为贪婪,上述dp数组我们发现仅仅用到前一个数就可以得到更新,所以可以不定义数组,那么当前值的意义就是当前下标可以到达的最远下标是多少,如果当前下标大于该值,说明当前下标抵达不到,return false
public boolean canJump(int[] nums) {
// //定义一个dp[]
// int[] dp = new int[nums.length];
// dp[0] = nums[0];
// for(int i=1;i<nums.length;i++) {
// if(i<=dp[i-1]) {
// dp[i] = Math.max(dp[i-1], i+nums[i]);
// }else {
// return false;
// }
// }
// return true;
int dp = nums[0];
for(int i=1;i<nums.length;i++) {
if(i<=dp) {
dp = Math.max(dp, i+nums[i]);
}else {
return false;
}
}
return true;
}