新闻详情

新闻详情

首页 / 资讯中心 / 详情

LeetCode 55. Jump Game 题解:Go 语言贪心算法判断能否跳到数组末尾

发布时间:2026/9/10 9:51:09来源:尧图网络
LeetCode 55. Jump Game 题解:Go 语言贪心算法判断能否跳到数组末尾
LeetCode 55. Jump Game 题解Go 语言贪心算法判断能否跳到数组末尾【免费下载链接】LeetCode-Go✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Go本文基于 LeetCode-Go 仓库中 leetcode/0055.Jump-Game/README.md 的官方题解结合仓库内对应的 Go 源码实现 与 表驱动测试用例系统讲解经典贪心问题 Jump Game跳跃游戏的题意、核心思路、正确性证明、复杂度分析以及在本地运行测试的完整方法。读完本文你将掌握维护最远可达下标这一贪心套路并能在 O(n) 时间内解决这类能否到达终点的跳跃问题同时能够独立在本仓库中复现运行结果。一、题目回顾非负整数数组上的跳跃判定原题描述如下Given an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that position.Determine if you are able to reach the last index.题目大意给定一个非负整数数组你最初位于数组的第一个位置下标 0。数组中的每个元素代表在该位置最多可以跳跃的长度可以是 0 到该值之间的任意步数判断你是否能够到达数组的最后一个位置。需要特别强调的是两个约束边界数组元素非负也就是说每个位置都可能出现0每个元素表示的是最大跳跃长度实际跳多少步由你决定这为贪心策略留下了空间。仓库题解leetcode/0055.Jump-Game/README.md将题意概括为给出一个非负数组要求判断从数组 0 下标开始能否到达数组最后一个位置。二、示例拆解两个典型用例原题给出了两个极具代表性的示例一个可达、一个不可达恰好覆盖了贪心判断的两种结果。示例 1可以到达末尾Input: [2,3,1,1,4] Output: true Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.过程说明位于下标 0 时最大能跳 2 步选择只跳 1 步到达下标 1下标 1 处的值为 3最大可跳 3 步直接跳到最后一个下标 4成功到达。示例 2无法到达末尾Input: [3,2,1,0,4] Output: false Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.过程说明下标 3 处的值为0也就是说无论之前怎么选择一旦到达下标 3 就无法继续前进而它最大只能跳到下标 3 本身向后无法到达下标 4因此永远无法到达最后一个位置。从结构上看示例 2 是经典的零值陷阱数组中存在一个0并且这个0之前没有任何位置能够越过它导致路径被切断。三、核心解题思路贪心维护最远可达下标本题属于经典的贪心问题。仓库题解给出的核心思路可以提炼为三点可达范围扩展如果某一个作为「起跳点」的格子可以跳跃的距离是n那么表示后面n个格子都可以作为「起跳点」。也就是说从该格子出发下标i1到in之间的所有位置都是可达的。不断更新最远距离对每一个能作为「起跳点」的格子都尝试跳一次把「能跳到的最远距离maxJump」不断更新maxJump max(maxJump, i nums[i])。断点判断如果中间有一个下标i比maxJump还要大说明在这个点和maxJump之间已经连不上了有些点不能到达最后一个位置直接返回false如果遍历完整个数组都没有出现这种情况说明可以一直跳到最后返回true。用更直观的话说我们在遍历数组的同时始终维护一个从起点出发、经过已扫描位置能到达的最远下标。只要当前下标没有超出这个最远可达范围就说明当前位置是可达的进而可以用当前位置的跳跃能力继续扩大这个范围。这本质上是一个区间逐步右推的过程属于典型的贪心也可视作隐式的区间合并 / BFS 最远层扩展策略。四、Go 语言实现仓库源码逐行解读仓库中本题的完整实现位于 leetcode/0055.Jump-Game/55.%20Jump%20Game.go与题解文档中的代码完全一致func canJump(nums []int) bool { n : len(nums) if n 0 { return false } if n 1 { return true } maxJump : 0 for i, v : range nums { if i maxJump { return false } maxJump max(maxJump, iv) } return true } func max(a int, b int) int { if a b { return a } return b }对关键分支与边界条件的解读代码片段作用与边界处理if n 0 { return false }空数组不存在最后一个位置按不可达处理该分支更多是为了防御性健壮性实际 LeetCode 输入一般非空if n 1 { return true }数组只有一个元素时起点即终点天然可达maxJump : 0初始化当前最远可达下标。起点下标 0 本身可达因此初始值 0 是合理的if i maxJump { return false }核心剪枝当前下标已经超出了此前所有位置能到达的最远范围说明中间存在断点不可达maxJump max(maxJump, iv)贪心更新当前位置下标i加上其最大跳跃长度v与历史最远值取较大者一个值得注意的细节即使当前位置的值v为 0只要maxJump已经覆盖了它程序也不会立即返回false——它只是无法继续扩大可达范围而已最终结果取决于后续下标是否仍然被覆盖。这与示例 2 中的零值陷阱恰好呼应下标 3 的 0 本身不致命致命的是没有任何一个之前的位置能跨过下标 3于是在遍历到下标 4 时发现4 maxJump(3)返回false。此外仓库中该题代码还附带了同包内独立的max辅助函数55. Jump Game.go。由于本题实现位于独立的 leetcode 包内max与包内其他题目互不冲突。五、为什么贪心是正确的不变量与复杂度分析贪心解法成立的关键在于一个不变量遍历到下标i时maxJump恰好等于从起点出发、仅借助[0, i]范围内位置的可达最远下标。归纳基础i 0时maxJump 0起点可达成立。归纳递推若处理完[0, i-1]后maxJump ≥ i说明i可达此时用i nums[i]与旧值取 max可达范围单调不减不变量保持。断点判定一旦出现i maxJump说明i不可达而数组从左到右连续推进因此之后的所有下标同样不可达直接返回false正确。时间复杂度单次线性扫描O(n)。空间复杂度仅使用常数个变量O(1)。这也正是该解法能够达到题解文档所述runtime beats 100%量级的原因——没有任何多余的分配或二次扫描。六、测试验证仓库表驱动测试用例仓库为本题编写了表驱动table-driven测试位于 leetcode/0055.Jump-Game/55.%20Jump%20Game_test.go共覆盖 4 组输入输出输入数组期望输出覆盖点[2,3,1,1,4]true原题示例 1正常可达[3,2,1,0,4]false原题示例 2零值陷阱导致不可达[]false空数组边界[0]true单元素边界起点即终点测试通过question55结构体把参数para55{one []int}与期望答案ans55{one bool}打包循环调用canJump(p.one)后与期望比对不一致时通过t.Fatalf立即报错并输出实际输入输出例如got : canJump(p.one) if got ! a.one { t.Fatalf(input: %v, expected: %v, got: %v, p.one, a.one, got) } fmt.Printf(【input】:%v 【output】:%v\n, p, got)其中空数组与单元素数组两组用例正好验证了第四节中n 0与n 1两个边界分支的处理逻辑。七、在本地运行与验证本仓库使用 Go module 管理依赖见 go.modGo 版本要求 1.19且项目根目录提供了统一的测试脚本 gotest.sh其核心命令为go test -covermodeatomic -coverprofilecoverage.txt ./leetcode/...针对本题可在仓库根目录单独运行go test -v -run Test_Problem55 ./leetcode/0055.Jump-Game/运行后可以看到针对四组用例的【input】/【output】输出以及类似PASS的最终结果。若希望看到单测覆盖率可加上-cover参数本项目在根目录执行go test -covermodeatomic -coverprofilecoverage.txt ./leetcode/...即可为全部 LeetCode 题解生成统一的覆盖率文件生成结果写入根目录 coverage.txt。八、总结与同类问题联想Jump Game 是贪心 可达区间类问题的入门经典本题的核心套路可以概括为一句话遍历过程中维护最远可达下标一旦当前位置超出该范围即宣告不可达。从源码结构看本仓库还收录了跳跃类题目的多个变体例如 45. Jump Game II最少步数到达末尾、1306. Jump Game III从指定起点按值跳跃、1696. Jump Game VI带分数的跳跃等。掌握本题的贪心思想后阅读这些变体题解将更加轻松。若需继续查阅相关题解可在仓库的 leetcode 目录下按题号定位对应文件夹每个题目目录下均包含 README 题解、.go实现与_test.go测试三件套。要点速览判断标准能否从下标 0 借助各位置最大跳跃长度到达最后下标核心变量maxJump当前最远可达下标终止条件i maxJump即不可达遍历结束则可达复杂度时间 O(n)空间 O(1)边界空数组返回false单元素数组返回true。【免费下载链接】LeetCode-Go✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Go创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

OpenSSL 测试开发指南:为 test/recipes 编写 TAP 测试脚本与 C 测试可执行程序 2026/9/10 10:33:15

OpenSSL 测试开发指南:为 test/recipes 编写 TAP 测试脚本与 C 测试可执行程序

OpenSSL 测试开发指南:为 test/recipes 编写 TAP 测试脚本与 C 测试可执行程序 【免费下载链接】openssl General purpose TLS and crypto library 项目地址: https://gitcode.com/GitHub_Trending/ope/openssl 本文以 OpenSSL 仓库 test/README-dev.md 为核…

阅读更多 →
数字信号编码从NRZ到8B/10B:物理层比特映射与工程选型详解 2026/9/10 10:33:15

数字信号编码从NRZ到8B/10B:物理层比特映射与工程选型详解

做嵌入式、通信或者底层硬件开发的同行,应该都有过这种时刻:拿着示波器戳在芯片引脚上,明明协议栈里跑的全是0和1的逻辑,示波器上却是一串完全不认识的电平波形;翻了大半天手册,最后发现问题是出在物理层编…

阅读更多 →
【单片机毕业设计】基于 STM32 或 51 单片机人体感应节能台灯监测系统设计 基于 STM32 或 51 单片机的坐姿检测与灯光调控系统设计(021407) 2026/9/10 10:33:15

【单片机毕业设计】基于 STM32 或 51 单片机人体感应节能台灯监测系统设计 基于 STM32 或 51 单片机的坐姿检测与灯光调控系统设计(021407)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

阅读更多 →
CANN/GE图引擎设置图int64属性API 2026/9/10 10:33:15

CANN/GE图引擎设置图int64属性API

EsSetInt64AttrForGraph 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

阅读更多 →
STM32F103C8T6智能小车测速与距离计算:编码器、定时器与单位换算调参指南 2026/9/10 10:33:15

STM32F103C8T6智能小车测速与距离计算:编码器、定时器与单位换算调参指南

简介:STM32F103C8T6智能小车测速与行驶距离显示实验的完整程序源码包,适合嵌入式入门学习者与小车DIY爱好者参考。程序基于Keil4环境编写,适配STM32F103C8T6主控,配合L293D电机驱动、TT直流减速电机、测速模块及OLED屏&#xff0c…

阅读更多 →
SEO优化预算全解析:从几千到几万,钱到底花在哪? 2026/9/10 10:30:15

SEO优化预算全解析:从几千到几万,钱到底花在哪?

1. 先搞懂预算差异的根源:同样叫SEO,报价为什么能差出百倍我做SEO这行十几年,每隔几天就会接到一次类似的咨询,开场白通常是这样:"我看网上有人做SEO两千块一个月,也有人说花了十几万没效果&#xff0…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞