力扣HOT100-跳跃游戏II

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

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

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

返回到达 n - 1 的最小跳跃次数。测试用例保证可以到达 n - 1

代码:

cpp 复制代码
class Solution {
public:
    int jump(vector<int>& nums) {
        int n=nums.size();
        int current_end=0;//本次跳跃的最远位置
        int fastest=0;//下次可以跳到的最远位置
        int times=0;
        if(n<=1) return times;
        for(int i=0;i<n;++i)
        {
            fastest=max(fastest,i+nums[i]);
            if(i==current_end)
            {
                current_end=fastest;
                times++;

                if(current_end>=n-1)
                {
                    return times;
                }
            }
        }

        return times;
    }
};

**解题思路:**使用贪心策略。用current_end记录本次跳跃可到的最远位置,记录每个位置可跳跃到的最远位置,用它们的最大值不断更新fastest。这样当i==current_end时,fastest的值就是本次跳跃中可到达的下次跳跃的最远位置,直接用fastest更新current_end,最终得到的times就是到达n-1位置的最小跳跃次数。

时间复杂度:O(n)

算法中只有一个 for 循环,遍历了数组一次(从索引 0 到 n-2)

循环内部的操作(比较、赋值等)都是常数时间 O (1)

因此整体时间复杂度为 O (n),其中 n 是数组 nums 的长度
空间复杂度:O(1)

算法只使用了有限的几个额外变量(jumps、current_end、farthest 等)

这些变量的数量与输入规模 n 无关,不随 n 的变化而变化

因此空间复杂度为常数阶 O (1)

相关推荐
hans汉斯几秒前
国产生成式人工智能解决物理问题能力研究——以“智谱AI”、“讯飞星火认知大模型”、“天工”、“360智脑”、“文心一言”为例
大数据·人工智能·算法·aigc·文心一言·汉斯出版社·天工
v_for_van3 分钟前
力扣刷题记录3(无算法背景,纯C语言)
c语言·算法·leetcode
ValhallaCoder7 分钟前
hot100-矩阵
数据结构·python·算法·矩阵
散峰而望8 分钟前
【基础算法】穷举的艺术:在可能性森林中寻找答案
开发语言·数据结构·c++·算法·随机森林·github·动态规划
心.c10 分钟前
Vue3+Node.js实现文件上传分片上传和断点续传【详细教程】
前端·javascript·vue.js·算法·node.js·哈希算法
散峰而望10 分钟前
【基础算法】算法的“预谋”:前缀和如何改变游戏规则
开发语言·数据结构·c++·算法·github·动态规划·推荐算法
We་ct11 分钟前
LeetCode 48. 旋转图像:原地旋转最优解法
前端·算法·leetcode·typescript
爱尔兰极光11 分钟前
LeetCode--长度最小的子数组
算法·leetcode·职场和发展
仰泳的熊猫12 分钟前
题目1432:蓝桥杯2013年第四届真题-剪格子
数据结构·c++·算法·蓝桥杯·深度优先·图论
有一个好名字19 分钟前
力扣-电话号码组合
算法·leetcode·职场和发展