

这题我们可以换一个思想,将跳跃问题转换为覆盖问题,我们每遇到一个元素就跳到这个元素可以覆盖到的最大位置,当能覆盖下整个数组的时候,就说明能达到,返回true,否则返回false
这题的局部最优是每次取最大跳跃步数 全局最优是最后得到整体最大覆盖范围,看是否能到终点。
- class Solution {
- public boolean canJump(int[] nums) {
- int cover = 0;
- if(nums.length == 1)
- {
- return true;
- }
- for(int i = 0;i<=cover;i++)
- {
- cover = Math.max(i+nums[i],cover);
- if(cover>=nums.length-1)
- {
- return true;
- }
-
- }
- return false;
-
- }
- }