【力扣】45.跳跃游戏Ⅱ

45.跳跃游戏Ⅱ

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

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

  • 0 <= j <= nums[i]
  • i + j < n

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

示例 1:

输入 : nums = [2,3,1,1,4]
输出 : 2
解释 : 跳到最后一个位置的最小跳跃数是 2。

从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

输入 : nums = [2,3,0,1,4]
输出: 2

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 1000
  • 题目保证可以到达 nums[n-1]

解题方案

  • C 贪心算法
c 复制代码
#define MAX(a, b) ((a) > (b) ? (a) : (b))

int jump(int* nums, int numsSize) {
    int max_tg = 0;     // 能跳跃到的最远位置
    int step = 0;       // 跳跃次数
    int next_start = 0; // 下次起跳点
    for (int i = 0; i < numsSize - 1; i++) {
        max_tg = MAX(max_tg, i + nums[i]);
        if (i == next_start) {
            next_start = max_tg; // 更新起跳位置
            step++;              // 跳跃计数
        }
    }
    return step;
}

复杂度分析

时间复杂度为 O(n),其中 nnn 是数组长度。

空间复杂度为 O(1)。

相关推荐
资深web全栈开发21 分钟前
LeetCode 3625. 统计梯形的数目 II
算法·leetcode·组合数学
橘颂TA22 分钟前
【剑斩OFFER】算法的暴力美学——外观数列
算法·leetcode·职场和发展·结构与算法
Liangwei Lin23 分钟前
洛谷 P1434 [SHOI2002] 滑雪
算法
c#上位机41 分钟前
halcon图像增强之自动灰度拉伸
图像处理·算法·c#·halcon·图像增强
rit843249944 分钟前
压缩感知信号恢复算法:OMP与CoSaMP对比分析
数据库·人工智能·算法
Pluchon1 小时前
硅基计划4.0 算法 FloodFill算法
java·算法·leetcode·决策树·逻辑回归·深度优先·图搜索算法
wanhengidc2 小时前
使用云手机都要注意哪些?
运维·服务器·科技·游戏·智能手机
菜鸟233号2 小时前
力扣347. 前k个高频元素 java实现
算法
Xの哲學3 小时前
Linux设备管理:从内核驱动到用户空间的完整架构解析
linux·服务器·算法·架构·边缘计算
深蓝学院3 小时前
VLA,正在沦为纸上谈兵的“学术游戏”。。。
游戏