LeetCode[中等] 45. 跳跃游戏 II

给定一个长度为 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]

思路 贪心算法

currMaxPos为当前跳跃次数可达最大距离,nextMaxPos为下一次跳跃可达最大距离。

如果 i>currMaxPosition,则下标 i 超出跳跃次数 currJumps 可以到达的最大下标,因此到达下标i的最小跳跃次数 + 1,currMaxPos 更新为 nextMaxPos

cs 复制代码
public class Solution {
    public int Jump(int[] nums) {
        int currMaxPos = 0, nextMaxPos = 0;
        int stepNums = 0;
        for(int i = 0; i < nums.Length; i++)
        {
            if(i > currMaxPos)
            {
                stepNums++;
                currMaxPos = nextMaxPos;
            }
                
            nextMaxPos = Math.Max(nextMaxPos, nums[i] + i);
        }
        return stepNums;
    }
}

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。需要遍历数组一次,每个下标处的计算时间是 O(1)。

  • 空间复杂度:O(1)。

相关推荐
不吃洋葱.39 分钟前
左子树之和
算法
金融小师妹1 小时前
基于AI量化模型的比特币周期重构:传统四年规律是否被算法因子打破?
大数据·人工智能·算法
数据智能老司机2 小时前
图算法趣味学——最短路径
数据结构·算法·云计算
快去睡觉~2 小时前
力扣109:有序链表转换二叉搜索树
算法·leetcode·链表
是Dream呀3 小时前
YOLOv8深度解析:从架构革新到应用实践
人工智能·算法
小马敲马4 小时前
[4.2-2] NCCL新版本的register如何实现的?
开发语言·c++·人工智能·算法·性能优化·nccl
蒟蒻小袁5 小时前
力扣面试150题--阶乘后的零,Pow(x,n)直线上最多的点
leetcode·面试·哈希算法
SimonSkywalke5 小时前
基于知识图谱增强的RAG系统阅读笔记(五)Agentic RAG:基于代理的RAG
算法
智者知已应修善业5 小时前
【51单片机数码管循环显示3位数字】2022-10-26
c语言·经验分享·笔记·嵌入式硬件·算法·51单片机