0055. 跳跃游戏
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
- __55跳跃游戏01__动态规划
- __55跳跃游戏01__贪心
原题链接:
0055. 跳跃游戏
https://leetcode-cn.com/problems/jump-game/
完成情况:
解题思路:
参考代码:
__55跳跃游戏01__动态规划
package 西湖算法题解___中等题;
public class __55跳跃游戏01__动态规划 {
public static void main(String[] args) {
}
public boolean canJump(int[] nums){
if (nums.length == 1){
return true;
}
/*
输入:
[0]
输出:
false
预期结果:
true
*/
if (nums[0] == 0){
return false;
}
int dp[] = new int[nums.length];
dp[0] = nums[0];
//单数组动态规划,单变量
for (int i=1;i< nums.length-1;i++){
dp[i] = Math.max(dp[i-1],nums[i]+1);
//dp[i]表示最远能走到哪儿,,,,,,+1代表之前有一个数组占位了。
if (dp[i] >= nums.length-1){
return true;
}
//如果出现0或者原地踏步,则说明走不动了
//因为dp[i] = Math.max(dp[i-1],nums[i]+1);
//所以不管怎样,都会有+1操作
if (dp[i] == i){ //说明原地踏步了
return false;
}
}
return true;
}
}
__55跳跃游戏01__贪心
package 西湖算法题解___中等题;
public class __55跳跃游戏01__贪心 {
public boolean canJump(int[] nums){
//从头到尾进行判断
int jumpWhere = 0;
for (int i=0;i< nums.length;i++){
if (i<=jumpWhere){ //之前点走出来的最远可达
jumpWhere = Math.max(jumpWhere,i+nums[i]);
if (jumpWhere >= nums.length-1){
return true;
}
}
}
return false;
}
}