LeetCode 45. 跳跃游戏 II-贪心算法-java

先看题目

LeetCode 45. 跳跃游戏 II-贪心算法-java_第1张图片

这题和55题一样(55题做法已发,可以参考),但是这个给定的数组是一定可以到达的,让我们求最短的步数。

做题思想:先从头开始,每次都走到现在节点最远的那个距离,比如说例1第一次可以走2步,那么我们就可以确定一下在这个两步内最远可以走到的距离是多少并记录下来,并需要一个边界值当走到这个边界值时就需要跟新所用步数了,边界值就是当前可以走到的位置,比如当到达索引2时就表明已经到达了边界了需要增加一次步数了,并且要更新边界值为当前最大的步数

具体代码:

class Solution {
    public int jump(int[] nums) {

        if (nums.length == 1) {
            return 0;
        }
        //最远到达的位置
        int maxLength = 0;
        //记录步数
        int num = 0;
        //标记边界
        int end = 0;
        //不需要遍历最后一个元素因为是终点
        for (int i = 0; i < nums.length-1; i++) {
            //更新最大步数
            maxLength=Math.max(maxLength,i + nums[i]);
            //如果可以直接到达终点的话直接返回就可以,但是加一次步数
            if(maxLength>=nums.length-1){
                return num+1;
            }
            if (end == i) {
                //更新尾部边界
                end = maxLength;
                //增加步数
                num++;
            }
        }

        return num;
    }

}

你可能感兴趣的:(leetcode,游戏,贪心算法)