【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)。

相关推荐
wunaiqiezixin6 小时前
如何在C++中创建和管理线程
c++
雪度娃娃7 小时前
转向现代C++——在意为改写的函数添加 override
开发语言·c++
王老师青少年编程7 小时前
csp信奥赛C++高频考点专项训练之前缀和&差分 --【一维差分】:[NOIP 2018 提高组] 铺设道路
c++·前缀和·差分·csp·高频考点·信奥赛·铺设道路
星马梦缘7 小时前
aaaaa
数据结构·c++·算法
OpenApi.cc7 小时前
神经网络结构驱动+数据结构分析
数据结构·人工智能·神经网络
喵星人工作室8 小时前
C++火影忍者1.1.2
开发语言·c++
basketball6168 小时前
C++ 中的 ptrdiff_t 详解
开发语言·c++
星恒随风9 小时前
C语言数据结构排序算法详解(下):冒泡排序、快速排序、归并排序和计数排序
c语言·数据结构·笔记·学习·排序算法
wunaiqiezixin9 小时前
互斥锁与自旋锁的区别
c++
代码中介商9 小时前
深入解析STL中的stack、queue与priority_queue
开发语言·c++