45. 跳跃游戏 II

260 阅读1分钟

image.png

  • 贪心算法:找能跳的最远的
    • 使用 curMax 记录目前能够跳到的最高位置
    • 使用 end 记录这次跳跃的边界,到达边界就跳跃次数 + 1

image.png

image.png

class Solution {
    public int jump(int[] nums) {
        int jumps = 0;
        int end = 0;
        int curMax = 0;
        // 因为是起跳的时候就 + 1 了,如果最后一次跳跃刚好到达了最后一个位置,那么遍历到最后一个位置的时候就会再次起跳,这是不允许的,因此不能遍历最后一个位置
        for (int i = 0; i < nums.length - 1; i++) {
            curMax = Math.max(curMax, i + nums[i]);
            //第一次起跳 或 到达跳跃的边界
            if (i == end) {
                jumps++;
                end = curMax;
            }
        }
        return jumps;
    }
}