跳跃游戏 II

简介: 跳跃游戏

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

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

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

假设你总是可以到达数组的最后一个位置。
示例:
输入: nums = {2,3,1,1,3}
输出: 2
示例:
输入:nums = ={0}
输出:0

解题思路:
用到贪心算法:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。
贪心算法一般按如下步骤进行:
①建立数学模型来描述问题 。
②把求解的问题分成若干个子问题 。
③对每个子问题求解,得到子问题的局部最优解。
④把子问题的解局部最优解合成原来解问题的一个解。
贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解。虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪心算法不要回溯。

解题方法:
就是移动下标达到了当前覆盖的最远距离下标时,步数就要加一,来增加覆盖距离。最后的步数就是最少步数。
这里还是有个特殊情况需要考虑,当移动下标达到了当前覆盖的最远距离下标时
如果当前覆盖最远距离下标不是是集合终点,步数就加一,还需要继续走。
如果当前覆盖最远距离下标就是是集合终点,步数不用加一,因为不能再往后走了
代码如下:
public int jump(int[] nums) {

    if(nums.length == 1) return 0;
    int reach = 0;
    int nextreach = nums[0];
    int step = 0;
    for(int i = 0;i<nums.length;i++){
        nextreach = Math.max(i+nums[i],nextreach);
        if(nextreach >= nums.length-1) return (step+1);
        if(i == reach){
            step++;
            reach = nextreach;
        }
    }
    return step;
}

目录
相关文章
【字节跳动】跳跃游戏
【字节跳动】跳跃游戏
|
21天前
|
算法
【力扣】55.跳跃游戏
【力扣】55.跳跃游戏
|
21天前
|
算法 测试技术 vr&ar
【动态规划】【C++算法】1340. 跳跃游戏 V
【动态规划】【C++算法】1340. 跳跃游戏 V
|
21天前
|
Java 索引
leetcode-45:跳跃游戏 II
leetcode-45:跳跃游戏 II
27 0
|
21天前
|
算法 Java
leetcode-55:跳跃游戏
leetcode-55:跳跃游戏
32 0
|
12月前
|
算法 安全 Swift
LeetCode - #55 跳跃游戏
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
12月前
|
算法
leetcode:55.跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。
52 0
|
12月前
|
算法
leetcode:45.跳跃游戏 II
给定一个非负整数数组,你最初位于数组的第一个位置。
55 0
|
UED
你也能做一个跳跃+答题游戏
这个小游戏示例其实是模仿了一个叫反诈总动员(点击左侧体验)的微信小游戏,这个小游戏是几位民警合同和志愿者利用微信小游戏制作工具做出来的,用于宣传反诈知识。这是一个公益的游戏项目,大家可以试玩并分享一下,帮助更多的人了解预防诈骗的知识。
47 0
|
索引
消除游戏中宝石下落的原理和实现
在消除游戏中,发生消除之后,会留下空白位置。此时,如果上方有其它的宝石,那这些宝石就会下落填充空白位置。今天我们就来了解一下宝石下落的方法以及实现。
134 0