动态规划或者是贪心算法
贪心算法和动态规划在这个问题上的实现确实非常相似,因为这个问题具有贪心选择性质,也适合用贪心算法解决。在这个特定问题上,贪心算法和动态规划的思路是一样的,都是通过维护一个变量来记录当前能够到达的最远位置,然后遍历数组来更新这个变量。
class Solution {
public static boolean canJump(int[] nums) {
int maxReach = 0; // 记录当前能够到达的最远位置
for (int i = 0; i < nums.length; i++) {
if (i > maxReach) { // 如果当前位置已经超过了能够到达的最远位置,则无法到达终点
return false;
}
maxReach = Math.max(maxReach, i + nums[i]); // 更新能够到达的最远位置
if (maxReach >= nums.length - 1) { // 如果最远位置大于等于数组最后一个位置,则可以到达终点
return true;
}
}
return false;
}
}
-
定义状态数组 这里是一维线性的 直接定义一个变量int maxReach = 0; // 记录当前能够到达的最远位置
-
初始化 这里一维的直接int i = 0开始
-
状态转移方程 maxReach = Math.max(maxReach, i + nums[i]); // 更新能够到达的最远位置