一、题目链接与题目介绍
本题是LeetCode中等难度经典题型,也是贪心算法的入门必刷题。题目给定一个0索引的整数数组,我们初始停留在下标0的位置。数组中每个元素 nums[i] ,代表当前位置能够向后跳跃的最大长度,在范围内可以选择任意步数跳转。题目核心要求是,计算出从起点到达数组最后一个下标,所需的最小跳跃次数,且题目保证所有测试用例都可以顺利抵达终点,无需考虑无法到达的特殊情况。
举个典型例子,输入数组 [2,3,1,1,4] ,最优路径是从下标0跳至下标1,再从下标1直接跳到末尾,仅需2次跳跃,这也是本题最直观的解题参考。
二、题目难点分析
初次接触这道题时,很容易陷入暴力枚举的误区,尝试遍历每一种跳跃路径再比对步数,但这种方法时间复杂度高,面对数组长度10⁴的数据会直接超时。
其实这道题的核心突破口在于求最小跳跃次数,想要步数最少,每一次跳跃都需要尽可能跳得更远,这恰好契合贪心算法的核心思想,也是这道题最优解的关键。
三、贪心算法核心思路介绍
贪心算法并非追求全局最优的预判,而是在每一步决策中,都选择当前局部的最优解,通过持续的局部最优叠加,最终推导得出全局最优解。
放在本题场景中,局部最优就是:在当前一次跳跃的可覆盖区间内,找到能抵达的最远距离。每走完当前区间,就完成一次有效跳跃,再以新的最远距离作为下一区间的边界,层层推进直至终点。这种方式只需一次遍历数组,时间复杂度O(n)、空间复杂度O(1),是效率最高的解法。
四、详细解题思路
我们可以用三个核心变量辅助解题:记录总跳跃步数、当前跳跃的最大边界、遍历过程中的最远可达位置。
遍历数组时,每走到一个下标,就实时更新当前区间能跳到的最远距离。当遍历指针走到当前跳跃的边界位置时,说明当前区间的所有可能性已遍历完毕,必须进行一次跳跃,更新新的边界为之前记录的最远位置,步数加一。
需要注意的是,遍历只需到倒数第二个元素即可,避免抵达终点后额外多算一次跳跃。整套逻辑层层递进、没有冗余操作,完美适配题目所有测试场景。
五、总结
跳跃游戏II是贪心算法的经典应用场景。只要找准每一步的最优策略,通过区间迭代、边界更新的方式,就能用最简代码、最高效率解决问题。掌握这道题的思路,也能为后续区间贪心类算法题目打下扎实基础。