LeetCode45 跳跃游戏II

题目:

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

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

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

示例:

输入:[2,3,1,1,4]输出:2解释:跳到最后一个位置的最小跳跃数是2。     从下标为 0 跳到下标为 1 的位置,跳1步,然后跳3步到达数组的最后一个位置。

说明:

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


使用贪心算法思想

用两个下标,一个记录当前可以到达的最远位置,遍历过程中,只有到该范围最远位置,才更新

另一个记录在第一个记录范围内,下一次可以到达的最远位置。

并在第一个下标更新时,第二个下标赋值给第一个;

class Solution {

    public int jump(int[] nums) {

        if(nums.length < 2){

            return 0;

        }

        //当前可以达到的最远位置

        int cur_max_index = nums[0];

        //遍历过程中,可达最远的位置

        int pre_max_index = nums[0];

        int jump_min = 1;

        for(int i = 0; i < nums.length; i++){

            if(cur_max_index < i){

                jump_min++;

                cur_max_index = pre_max_index;

            }

            if(pre_max_index < nums[i] + i){

                pre_max_index = nums[i] + i;

            }

        }

        return jump_min;

    }

}

你可能感兴趣的:(LeetCode45 跳跃游戏II)