给你一个非负整数数组 nums ,你最初位于数组的第一个位置。

    数组中的每个元素代表你在该位置可以跳跃的最大长度。

    你的目标是使用最少的跳跃次数到达数组的最后一个位置。

    假设你总是可以到达数组的最后一个位置。

    贪心算法:
    既然总能跳到最后,那么我们就设置两个值,一个为最远距离,一个为当前距离,并当指针走到当前距离时,将其更新为最大距离,
    为什么可以这样做呢?因为在更新最大距离时,我们之前走的那一步不一定是对的,但是也必然要走相同的步数,而当走到当前距离后,将当前距离更新为最大距离,就表示走路更新为了最优的那一步。

    参考代码:
    public int jump(int[] nums) {
    if(nums.length==0||nums.length==1) return 0;
    int cur=0;
    int max=0;
    int ret=0;
    for(int i=0;i max=Math.max(max,i+nums[i]);
    if(max>=nums.length-1){
    ret++;break;
    }
    if(i==cur){
    cur=max;
    ret++;
    }
    }
    return ret;
    }

    动态规划:
    分析:dp数组指到达当前格子所需的最小跳跃次数
    如何得到?答:与之前可以到达此格的dp数组相比,取最小的
    初始值?由于要取最小值,那么防止后面的数字干扰,除第一个dp值设为0外,其他数值均设为最大值

    参考代码:
    public int jump(int[] nums) {
    int[] dp = new int[nums.length];
    Arrays.fill(dp,Integer.MAX_VALUE);
    dp[0]=0;

    for(int i=1;i for(int j=0;j if(nums[j]+j>=i)
    dp[i]=Math.min(dp[i],dp[j]+1);
    }
    }
    return dp[nums.length-1];
    }