【C++】每日一题 45 跳跃游戏

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums0。

每个元素 numsi 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 numsi 处,你可以跳转到任意 numsi + j 处:

0 <= j <= numsi

i + j < n

返回到达 numsn - 1 的最小跳跃次数。生成的测试用例可以到达 numsn - 1。

cpp 复制代码
int jump(std::vector<int>& nums) {
    int n = nums.size();
    int jumps = 0;
    int reach = 0;
    int nextReach = 0;

    for (int i = 0; i < n - 1; ++i) {
        nextReach = std::max(nextReach, i + nums[i]);
        if (i == reach) {
            reach = nextReach;
            jumps++;
        }
    }

    return jumps;
}

使用贪心算法来解决。jumps 变量用于记录跳跃的次数,维护两个变量:当前能够到达的最远位置(reach)和当前步数内能够到达的最远位置(nextReach)。通过遍历数组并更新这两个变量,最终可以得到到达终点的最小跳跃次数。

时间复杂度为 O(n),其中 n 为数组 nums 的长度。由于只需对数组进行一次线性遍历,因此时间复杂度为 O(n)。

空间复杂度为 O(1),因为算法只使用了固定数量的额外变量(jumps、reach 和 nextReach),并不随着输入规模的增大而增加额外的空间消耗,因此空间复杂度为 O(1)。

相关推荐
青瓦梦滋5 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
装备研究社9 小时前
对峙2掉线排查实测
游戏
xcLeigh9 小时前
Unity基础:Destroy与DestroyImmediate——正确销毁游戏物体的方式
游戏·unity·游戏引擎·教程
sunxfancy10 小时前
EVEngine 0.6 到 0.6.1:让 AI 参与游戏开发,还需要补上哪些环节?
游戏
CodeYp201910 小时前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树
sunxfancy11 小时前
AI 改完场景,怎么知道没改坏?EVEngine 0.6.1 的白盒自动试玩
游戏
shehuiyuelaiyuehao11 小时前
算法56,重排链表
数据结构·算法·链表
pipixia2003311 小时前
C++继承面试四连问:内存叠加、私有继承、sizeof、权限重映射
c++·面试·嵌入式·继承·面向对象·对象模型
suhan12 小时前
【数据结构】七、查找:1.查找的概念、线性结构查找(顺序、折半(二分)、插值、稠密、分块、倒排)
数据结构·算法·排序算法
极客 - L U12 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu