千家信息网

C++实现跳跃游戏的方法

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"C++实现跳跃游戏的方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++实现跳跃游戏的方法"吧!Jump Game II 跳跃
千家信息网最后更新 2026年11月01日C++实现跳跃游戏的方法

这篇文章主要讲解了"C++实现跳跃游戏的方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++实现跳跃游戏的方法"吧!

Jump Game II 跳跃游戏之二

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.

Your goal is to reach the last index in the minimum number of jumps.

Example:

Input: [2,3,1,1,4]
Output: 2
Explanation: The minimum number of jumps to reach the last index is 2.
Jump 1 step from index 0 to 1, then 3 steps to the last index.

Note:

You can assume that you can always reach the last index.

这题是之前那道 Jump Game 的延伸,那题是问能不能到达最后一个数字,而此题只让求到达最后一个位置的最少跳跃数,貌似是默认一定能到达最后位置的? 此题的核心方法是利用贪婪算法 Greedy 的思想来解,想想为什么呢? 为了较快的跳到末尾,想知道每一步能跳的范围,这里贪婪并不是要在能跳的范围中选跳力最远的那个位置,因为这样选下来不一定是最优解,这么一说感觉又有点不像贪婪算法了。其实这里贪的是一个能到达的最远范围,遍历当前跳跃能到的所有位置,然后根据该位置上的跳力来预测下一步能跳到的最远距离,贪出一个最远的范围,一旦当这个范围到达末尾时,当前所用的步数一定是最小步数。需要两个变量 cur 和 pre 分别来保存当前的能到达的最远位置和之前能到达的最远位置,只要 cur 未达到最后一个位置则循环继续,pre 先赋值为 cur 的值,表示上一次循环后能到达的最远位置,如果当前位置i小于等于 pre,说明还是在上一跳能到达的范围内,根据当前位置加跳力来更新 cur,更新 cur 的方法是比较当前的 cur 和 i + A[i] 之中的较大值,如果题目中未说明是否能到达末尾,还可以判断此时 pre 和 cur 是否相等,如果相等说明 cur 没有更新,即无法到达末尾位置,返回 -1,代码如下:

解法一:

class Solution {public:    int jump(vector& nums) {        int res = 0, n = nums.size(), i = 0, cur = 0;        while (cur < n - 1) {            ++res;            int pre = cur;            for (; i <= pre; ++i) {                cur = max(cur, i + nums[i]);            }            if (pre == cur) return -1; // May not need this        }        return res;    }};

还有一种写法,跟上面那解法略有不同,但是本质的思想还是一样的,关于此解法的详细分析可参见网友 实验室小纸贴校外版的博客,这里 cur 是当前能到达的最远位置,last 是上一步能到达的最远位置,遍历数组,首先用 i + nums[i] 更新 cur,这个在上面解法中讲过了,然后判断如果当前位置到达了 last,即上一步能到达的最远位置,说明需要再跳一次了,将 last 赋值为 cur,并且步数 res 自增1,这里小优化一下,判断如果 cur 到达末尾了,直接 break 掉即可,代码如下:

解法二:

class Solution {public:    int jump(vector& nums) {        int res = 0, n = nums.size(), last = 0, cur = 0;        for (int i = 0; i < n - 1; ++i) {            cur = max(cur, i + nums[i]);            if (i == last) {                last = cur;                ++res;                if (cur >= n - 1) break;            }        }        return res;    }};

感谢各位的阅读,以上就是"C++实现跳跃游戏的方法"的内容了,经过本文的学习后,相信大家对C++实现跳跃游戏的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

位置 最远 方法 范围 末尾 解法 C++ 上一 更新 贪婪 步数 学习 代码 内容 思想 算法 还是 循环 不同 最小 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网电商科技 互联网科技公司税收优惠 互联网科技英文 以房互联网科技 百单互联网科技有限公司 互联网科技公司介绍 多迪互联网科技有限公司 青海科技产业互联网发展 国大互联网教育科技有限公司工作 互联网科技接地气 互联网科技企业商标注意事项 兰石爱特工业互联网科技分公司 银川新华互联网科技学校原画 美国五大互联网科技公司市值多少 互联网科技和医药行业 互联网科技博主张洲 第三届互联网大会安防黑科技 青岛互联网科技园 科技互联网企业在行动 现代科技的标志之一的互联网 湖南永感互联网科技有限公司 互联网巨头反垄断金融科技 黑科技闪耀互联网之光 移动互联网年度科技创新 青海科技产业互联网发展 互联网金融科技名词解释 银行科技岗属于互联网吗 广东工业互联网大赛深圳学泰科技 半导体是互联网高科技吗 互联网科技创新方面的资料
0