45. 跳跃游戏II - LeetCode

45. 跳跃游戏II

题目链接

动态规划

  • 用step数组记录到达每个位置需要的最小步数,初始step[0]=0,其他为无穷
  • 遍历每个位置,从这个位置起跳,更新后面的位置
  • 但是要注意,每个位置都只需要更新一次
    • 因为起跳点越靠前,步数一定越少
    • 如果第二次更新,起跳点的步数一定不会比第一次更新的少
    • 因此,每次只需要从上一次更新结束的地方开始即可
class Solution {
    public int jump(int[] nums) {
        int len = nums.length;
        int[] step = new int[len];
        step[0] = 0;
        for(int i = 1; i < len; i++)
            step[i] = Integer.MAX_VALUE;
        int j = 1;
        for(int i = 0; i < len - 1 && j < len; i++)
            for(; j < len && j <= i + nums[i]; j++)
                step[j] = Math.min(step[j], step[i] + 1);
        return step[len - 1];
    }
}
posted @ 2021-03-02 15:34  一天到晚睡觉的鱼  阅读(58)  评论(0)    收藏  举报