【Leecode】Leecode刷题之路第45天之跳跃游戏II

Scroll Down

题目出处

45-跳跃游戏II-题目出处

题目描述

45-跳跃游戏II-题目描述

个人解法

思路:

todo

代码示例:(Java)

todo

复杂度分析

todo

官方解法

45-跳跃游戏II-官方解法

这道题是典型的贪心算法,通过局部最优解得到全局最优解。以下两种方法都是使用贪心算法实现,只是贪心的策略不同。

方法1:反向查找出发位置

思路:

45-跳跃游戏II-反向查找出发位置-思路

代码示例:(Java)

public class Solution1 {
    public int jump(int[] nums) {
        int position = nums.length - 1;
        int steps = 0;
        while (position > 0) {
            for (int i = 0; i < position; i++) {
                if (i + nums[i] >= position) {
                    position = i;
                    steps++;
                    break;
                }
            }
        }
        return steps;
    }


}

复杂度分析

45-跳跃游戏II-反向查找出发位置-复杂度分析

方法2:正向查找可到达的最大位置

思路:

45-跳跃游戏II-正向查找可到达的最大位置-思路1
45-跳跃游戏II-正向查找可到达的最大位置-思路2
45-跳跃游戏II-正向查找可到达的最大位置-思路3

代码示例:(Java)

public class Solution2 {
    public int jump(int[] nums) {
        int length = nums.length;
        int end = 0;
        int maxPosition = 0;
        int steps = 0;
        for (int i = 0; i < length - 1; i++) {
            maxPosition = Math.max(maxPosition, i + nums[i]);
            if (i == end) {
                end = maxPosition;
                steps++;
            }
        }
        return steps;
    }

    
}

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组长度。
  • 空间复杂度:O(1)。

考察知识点

收获

1.贪心算法

Gitee源码位置

45-跳跃游戏II-源码

同名文章,已同步发表于CSDN,个人网站,公众号