【LeetCode】55. 跳跃游戏

算法编程题:跳跃游戏 II 本文首发于我的公众号码农之屋(id:Spider1818),专注于干货分享,包含但不限于Java编程、网络技术、Linux内核及实操、容器技术等。欢迎大家关注,二维码文末可以扫。 一、题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例:输入: [2,3,1,1,4] ... 阅读详情

在这里插入图片描述

解法 1

从左到右遍历数组,假设当 index = x1 时,nums[x1] = 0,则继续向右遍历,直接遇到不为 0 的元素,假设此时 index = x2。

且在遍历的时候,记录 index 在 x1 之前的元素,有 maxIndex = index+nums[index](maxIndex 表示下标为 index 对应的元素值所能跨到最远位置)。

如果 maxIndex < x2,则表示从 x1 之前的任一元素位置跳跃,都无法跨过 x2 位置时的 0,因此返回 false。

但是要记住一种特殊情况,假设 maxIndex >= nums.length - 1,则表示已经跳跃到末尾了,此时可以直接返回 true。

public boolean canJump(int[] nums) {
    if (nums == null || nums.length == 0) {
        return false;
    }
    int len = nums.length;
    // 注意 nums[0] 为 0 的特殊情况
    if (nums[0] == 0) {
        return len == 1;
    }
    
    int index = 0;
    int lastMax = 0;
    while (index < len) {
        if (nums[index] == 0) {
            ++index;
            // 防止越界
            while (index < len && nums[index] == 0) {
                ++index;
            }
            if (lastMax < index) {
                return false;
            }
        } else {
            if (index + nums[index] > lastMax) {
                lastMax = index + nums[index];
                if (lastMax >= len - 1) {
                    return true;
                }
            }
            ++index;
        }
    }
    return true;
}
解法 2

引用自该题目前为止通过的最快解法。

从右到左返回来遍历。

如果有 index = y1,假定 y1 对应的位置能够跳跃到末尾,则只要在 index < y1 的元素中,找到能够跳跃到 y1 位置,或者超越 y1 位置的元素即可。

如果最后能够逆着来到起始位置,则表示成立。

public boolean canJump(int[] nums) {
    int leftGood = nums.length - 1;
    for (int i = nums.length - 2; i >= 0; i--) {
        if (i + nums[i] >= leftGood) {
            leftGood = i;
        }
    }
    return leftGood == 0;
}

上述即贪心算法的实现,具体可以参考 官方解析。

【中等】力扣算法题解析LeetCode55:跳跃游戏 本文介绍了如何用贪心算法解决跳跃游戏问题,判断是否可以从数组起点跳到终点。通过维护当前能到达的最远位置(maxReach),遍历数组时实时更新maxReach,若当前位置不可达则返回false,若maxReach覆盖终点则提前返回true。算法时间复杂度O(n),空间复杂度O(1)。代码使用Java实现,包含初始化、遍历处理和边界检查,确保高效解决问题。 阅读详情

相关推荐

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4586

【力扣算法】55-跳跃游戏

题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置。但该...

ZeromaXHe的博客 831

Apache-Plc4x-Modbus-Tcp学习记录(一)

Apache-Plc4x-Modbus-Tcp学习记录(一)

weixin_45325423的博客 6985

【LeetCode】134. 加油站

(注意题目给出的条件) 1. 暴力破解 如果对于起点 index 有 gas[index] - cost[index] < 0,则 index 肯定无法作为起点。因此肯定是从 start = x && gas[x] - cost[x] >= 0 的点开始,该点才有可能是答案。 为什么说是有可能,因为还要计算该点之后的所有点是否符合要求。否则就要再换一个起点继续去...

一个有思想的搬运工 945

libiec61850实战:手把手教你用C语言动态获取IED设备模型(附完整代码解析)

本文详细介绍了如何使用libiec61850库通过C语言动态获取IED设备模型,包括环境配置、连接建立、模型遍历及错误处理等关键步骤。通过完整的代码示例和实战案例,帮助开发者掌握智能变电站通信中的核心技术,提升工业自动化系统的开发效率。

weixin_42519985的博客 433

电力现货市场出清机制解析:从理论到实践(附节点电价计算实例)

本文深入解析电力现货市场的核心出清机制,重点阐述了节点边际电价的计算原理与实践方法。通过对比系统边际电价、节点边际电价和分区边际电价三种模式,揭示了市场出清价格如何反映电力供需与网络阻塞。文章结合IEEE 30节点系统,提供了基于MATLAB和最优潮流模型的计算实例,详细展示了从构建模型到求解对偶变量以获取节点电价的全过程,为理解电力市场定价机制提供了从理论到实践的完整路径。

whisky的博客 754

算法-跳跃游戏问题合集

算法-跳跃游戏II跳跃游戏II 跳跃游戏II 跳跃游戏II也是Leetcode上一道经典的题目,难度为hard,其实可以暴力求解,思路是使用两个指针,第一个指针指向初始位置,第二个指针指向i+nums[i]位置,在两个指针间的窗口中,选择一个nums[k]+k最大的值作为要跳跃的位置。时间复杂度是O(N),很符合我们的直观。 不过我们采用另一种O(N)的算法来解决这个问题 public int j......

qq_23594799的博客 2847

5种超实用方法:快速获取Windows文件夹下所有文件名(含CMD/PowerShell脚本)

本文详细介绍了5种快速获取Windows文件夹下所有文件名的实用方法,包括图形界面操作、Excel数据导入、CMD命令和PowerShell脚本。特别提供了高效的CMD和PowerShell脚本示例,帮助用户轻松实现文件名的批量获取与管理,大幅提升工作效率。

opencv7vision的博客 447

【leetcode】一道让我卧槽的看似简单题

求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 没看题还纳闷为啥是中等题,原来不让用那些。。。。 要是没有限制,我们显然可用递归。但是不让用if,那么递归出口还能怎么写呢? 答案就是逻辑运算符的短路性质。 以逻辑运算符 && 为例,对于 A && B 这个表达式,如果 A 表达式返回 False ,那么 A && B 已经确定为False ,此时不会去执行表达式 B。同

daixd5520的博客 303

CAN总线介绍及硬件设计

1. CAN是什么 CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO*1 国际标准化的串行通信协议。 在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统 被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很 多,线束的数量也随之增加。为适应“减少线束的数量”、“......

sinat_15677011的博客 9989

Calibre:LVS 快速debug short/open技巧

用Fix Suggestion和Short Isolate两种方法debug LVS问题

m0_61544122的博客 7455

LeetCode55跳跃游戏//力扣55跳跃游戏(贪心)

LeetCode55跳跃游戏//力扣55跳跃游戏 来源:力扣(LeetCode) 链接:题目跳转 给定一个非负整数数组nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例1: 输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。 示例2: 输入:nums = [3,2,1,0,4] 输出...

MyHeaven7的博客 476

[Dify实战] 多轮对话状态管理:上下文保持与槽位填充

本文探讨了基于LLM的对话应用中多轮对话状态管理的核心挑战与解决方案。文章指出,单纯的"能聊"远远不够,关键在于建立有效的状态管理机制,包括上下文保持和槽位填充两大核心能力。通过Dify实战视角,详细阐述了如何设计工程化落地方案:采用混合策略的上下文管理(窗口+摘要+关键槽位)、JSON Schema强约束的槽位抽取、统一状态对象存储、冲突处理机制和优化追问策略。文章特别强调,合理的状态管理能将"聊天"转化为"可执行的业务流程",避免模型成为&qu

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 228

LeetCode 力扣 55. 跳跃游戏

题目描述(中等难度) 45题的时候已经见过这道题了,只不过之前是返回从第 0 个位置能跳到最后一个位置的最小步数,这道题是返回是否能跳过去。 leetCode Solution 中给出的是动态规划的解法,进行了一步一步的优化,但都也比较慢。不过,思路还是值得参考的,上边说的比较详细,这里就不啰嗦了。这里,由于受到 45 题的影响,自己对 45 题的解法改写了一下,从而解决了这个问题。 下边的解法...

wind_liang的博客 1092

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

55. 跳跃游戏(力扣LeetCode)

i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。刚看到本题一开始可能想:当前位置元素如果是 3,我究竟是跳一步呢,还是两步呢,还是三步呢,究竟跳几步才是最优呢?通过这种方法,代码高效地解决了“跳跃游戏”的问题,它的时间复杂度为O(n),因为只需要遍历一次数组。每次移动取最大跳跃步数(得到最大的覆盖范围),每移动一个单位,就更新最大覆盖范围。不一定非要明确一次究竟跳几步,每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围。

m0_73841621的博客 1496

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

golang力扣leetcode 55.跳跃游戏

55.跳跃游戏55.跳跃游戏题解代码 55.跳跃游戏 55.跳跃游戏 题解 //state: dp[x]=true表示可以到达x下标 //function: nums[j]+j>x -> dp[x]=true //intialize:dp[0]=true //answer: dp[len(dp)-1] 代码 package main func canJump(nums []int) bool { dp := make([]bool, len(nums)) dp[0] = true for

清风 762

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

力扣55.跳跃游戏

力扣,C++,菜菜奋斗小记

2402_88149600的博客 417

【算法题】55. 跳跃游戏-力扣(LeetCode)

我们要想跳到最后一格,就需要保证,我们能在某个位置时,这个位置的步数加上它的索引大于或者等于最后一个位置的索引。

Janium的博客 499

[LeetCode 55] 跳跃游戏

1≤nums.length≤1041 \le nums.length \le 10^41≤nums.length≤104 0≤nums[i]≤1050 \le nums[i] \le 10^50≤nums[i]≤105贪心记录最大能跳到的下标就行了,假设用 maxPosmaxPosmaxPos 记录。

qq_45371462的博客 1209

力扣第 55 题 跳跃游戏

我们可以用贪心算法来解决这个问题。贪心的核心思想是始终维护当前能够到达的最远位置,并判断是否可以覆盖到数组的最后一个位置。初始化变量maxReach为 0,表示当前能够跳到的最远位置。遍历数组的每个位置i,判断:如果当前下标i大于maxReach,说明无法从前面的跳跃到达位置i,返回false。更新maxReach为,表示当前能够跳到的最远位置。如果遍历结束后,maxReach大于等于数组的最后一个下标,则返回true。

weixin_48941116的博客 993

《LeetCode力扣练习》第55题 跳跃游戏 Java

《LeetCode力扣练习》第55题 跳跃游戏 Java 一、资源 题目: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。 示例 2: 输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标

XRT_knives的博客 282

leetcode 55. 跳跃游戏(C++)

leetcode 55. 跳跃游戏(C++) :给定一个非负整数数组,每个元素代表你在该位置可以跳跃的最大长度,判断你是否能够到达最后一个位置。

nanashi_F的博客 463

Leetcode 55 - 跳跃游戏

Leetcode 55 - 跳跃游戏 - 题解以及解析 题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。 示例 2: 输入:...

XJ09S3的博客 943

LeetCode55-跳跃游戏

LeetCode55-跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到...

lyd1995的博客 271

LeetCode 55 跳跃游戏

Leetcode 55 跳跃游戏 解题思路: 这个题典型的贪心算法,不过一开始我用的递归法,结果递归栈爆掉了,我查了一下那个超时的测试用例,结果如下: 当我看到这个测试数据,我整个人都裂开了。。。于是求助了大神的思路,真的是太简洁了。。。 整体将所有的step遍历一次,cindex记录了当前的索引位置,jump_length记录了这个人所能跳的最远距离(注意,如果当前位置比这个人所能跳的最远...

chizhonghang的博客 178

LeetCode 55-跳跃游戏

LeetCode 55-跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出...

weizui0401的博客 203
上一篇: HTTPS 笔记整理
下一篇: 【LeetCode】134. 加油站
OneDeveloper
博客等级 码龄9年 61粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值