美文网首页
最少跳跃步数(跳跃游戏2)

最少跳跃步数(跳跃游戏2)

作者: 环宇飞杨 | 来源:发表于2020-04-13 21:57 被阅读0次

题目

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

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

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

示例:

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

解题思路

贪心算法,使用局部最优解,每次跳跃时都去找能跳的范围内最大的那个然后继续
比如[2,3,1,1,4,7]
当前为2时,可以跳到3或1的位置,那么选其中最大,跳到3,然后选能跳的3步中最大的4,如此往复,如果能跳到最后,那么跳的次数一定是最少的。

代码方面,因为有跳的动作,所以需要知道什么时候该跳,往哪跳,那就需要两个变量来不断的告诉程序如何执行跳的动作。
先说往哪跳,可以确定的知道是在某个范围内能跳的最远的下标,能跳的最远计算应该为index(当前在哪)+nums[index](能跳多远); 可用三目或Max函数不断求得即可。
另外什么时候跳,仔细想下就是上面提到的那某个范围的终点,这个范围也好理解,其实就是上次跳到的那个位置的下标。在循环里,用(curIndex == i)判断就可得知是不是该跳了,当然,这个值一开始为0;

代码

class Solution {
    public int jump(int[] nums) {
        if (nums.length == 0) return 0;
        int jumpCount = 0;
        int curIndex = 0;
        int nextIndex = 0;
        for (int i = 0 ; i < nums.length -1; i++){
            nextIndex = (nums[i]+i) > nextIndex ? (nums[i]+i) : nextIndex;
            if (curIndex == i){
                curIndex = nextIndex;
                jumpCount ++;
            }
        }
        return jumpCount;
    }
}

相关文章

  • 最少跳跃步数(跳跃游戏2)

    题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的...

  • 跳跃游戏2

    【链接】https://nanti.jisuanke.com/t/20【题目】给定一个非负整数数组,假定你的初始位...

  • 跳跃游戏2

    题目要求 给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的...

  • 跳跃游戏

    可以正向扫描数组,记录当前位置可以到达最远的位置,a、游标要小于可以到达最远的位置,否则return false。...

  • 跳跃游戏

    【链接】https://nanti.jisuanke.com/t/18【题目】给定一个非负整数数组,假定你的初始位...

  • 跳跃游戏

    LintCode题目地址给出一个非负整数数组,你最初定位在数组的第一个位置。数组中的每个元素代表你在那个位置可以跳...

  • 跳跃游戏

    给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否...

  • 跳跃游戏

    给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你...

  • 跳跃游戏

    在跳跃游戏中,要明白贪心法则的定义。贪心法则:最基本的理解就是,每次选择当前最优的解,到最后就能得到整个问题的最优...

  • 跳跃游戏

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/jump...

网友评论

      本文标题:最少跳跃步数(跳跃游戏2)

      本文链接:https://www.haomeiwen.com/subject/jbevmhtx.html