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

相关推荐
天赐学c语言1 天前
1.20 - x的平方根 && vector的扩容机制以及删除元素是否会释放内存
c++·算法·leecode
52Hz1181 天前
力扣24.两两交换链表中的节点、25.K个一组反转链表
算法·leetcode·链表
老鼠只爱大米1 天前
LeetCode经典算法面试题 #160:相交链表(双指针法、长度差法等多种方法详细解析)
算法·leetcode·链表·双指针·相交链表·长度差法
ValhallaCoder1 天前
Day53-图论
数据结构·python·算法·图论
老鼠只爱大米1 天前
LeetCode经典算法面试题 #84:柱状图中最大的矩形(单调栈、分治法等四种方法详细解析)
算法·leetcode·动态规划·单调栈·分治法·柱状图最大矩形
C雨后彩虹1 天前
羊、狼、农夫过河
java·数据结构·算法·华为·面试
重生之后端学习1 天前
19. 删除链表的倒数第 N 个结点
java·数据结构·算法·leetcode·职场和发展
aini_lovee1 天前
严格耦合波(RCWA)方法计算麦克斯韦方程数值解的MATLAB实现
数据结构·算法·matlab
安特尼1 天前
推荐算法手撕集合(持续更新)
人工智能·算法·机器学习·推荐算法
鹿角片ljp1 天前
力扣14.最长公共前缀-纵向扫描法
java·算法·leetcode