LeetCode-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]。

题目详见:LeetCode-45-跳跃游戏Ⅰ

解题思路: 相比55题,这道题难度会增加一点,要返回的是需要跳跃的最小步数,思路还是关注能跳跃的范围,详细步骤:

  1. 需要两个变量,cur:记录当前可以跳跃的步数;next:记录在当前可以跳的步数内可以跳的最大范围
  2. 开始遍历,跳出循环有两种情况:
    ① 当前的已经可以到达数组的最后一个位置;
    ② 当前的cur不能到达数组的最后一个位置。但是走一步后,即更新cur可以到达数组的最后一个位置。
    代码实现:
java 复制代码
class Solution {
    public int jump(int[] nums) {
        int res = 0;// 要跳的步数
        int cur = 0;// 当前可以跳的步数
        int next = 0;
        for (int i = 0; i < nums.length; i++) {
            next = Math.max(next, i + nums[i]);// 在当前可以跳的步数内可以跳的最大范围
            if (cur == i){// 表示已经达到覆盖范围
                if (cur < nums.length-1){//还没有到达数组终点
                    res++;
                    cur = next;// 下一步的覆盖范围 -> 当前覆盖范围
                    if (cur >= nums.length-1){// 更新后的 覆盖范围
                        break;
                    }
                }else {
                    break;
                }
            }
        }
        return res;
    }
}
相关推荐
菜鸡儿齐10 小时前
leetcode-有效的括号
linux·算法·leetcode
We་ct10 小时前
LeetCode 102. 二叉树的层序遍历:图文拆解+代码详解
前端·算法·leetcode·typescript
苦藤新鸡11 小时前
65.搜索平移数组的最小值
算法·leetcode
重生之后端学习11 小时前
35. 搜索插入位置
java·数据结构·算法·leetcode·职场和发展·深度优先
Frostnova丶11 小时前
(1)LeetCode 1. 两数之和
leetcode·哈希算法
努力学算法的蒟蒻11 小时前
day96(2.25)——leetcode面试经典150
算法·leetcode·面试
吕司11 小时前
LeetCode Hot Code——找到字符串中所有字母异位词
算法·leetcode
踩坑记录11 小时前
leetcode hot100 153. 寻找旋转排序数组中的最小值 medium 二分查找
leetcode
让我上个超影吧11 小时前
【力扣34】在排序数组中查找元素的第一个和最后一个位置
java·数据结构·算法·leetcode
We་ct12 小时前
LeetCode 103. 二叉树的锯齿形层序遍历:解题思路+代码详解
前端·算法·leetcode·typescript·广度优先