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

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

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

0 <= j <= nums[i]

i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 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)。

相关推荐
XuanRanDev2 小时前
【数据结构】树的基本:结点、度、高度与计算
数据结构
王老师青少年编程2 小时前
gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
开发语言·c++·算法·gesp·csp·信奥赛
DogDaoDao2 小时前
leetcode 面试经典 150 题:有效的括号
c++·算法·leetcode·面试··stack·有效的括号
一只小bit3 小时前
C++之初识模版
开发语言·c++
CodeClimb4 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
apz_end5 小时前
埃氏算法C++实现: 快速输出质数( 素数 )
开发语言·c++·算法·埃氏算法
仟濹5 小时前
【贪心算法】洛谷P1106 - 删数问题
c语言·c++·算法·贪心算法
苦 涩5 小时前
考研408笔记之数据结构(七)——排序
数据结构
北顾南栀倾寒6 小时前
[Qt]系统相关-网络编程-TCP、UDP、HTTP协议
开发语言·网络·c++·qt·tcp/ip·http·udp
ToDesk_Daas6 小时前
游戏设备升级怎么选?RTX4070独显,ToDesk云电脑更具性价比
科技·游戏·电脑·玩游戏