力扣经典算法篇-9-跳跃游戏(贪心算法,反向递推)

题干:

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

示例 1:

输入:nums = 2,3,1,1,4

输出:true

解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例 2:

输入:nums = 3,2,1,0,4

输出:false

解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

提示:

1 <= nums.length <= 104

0 <= numsi <= 105

解题:
方法一:

贪心算法。

思路:要想达到终点,只需要依次遍历终点前的所有元素,获取每一步所能达到的最远距离,当最远距离超过目标距离则能达到,反之则不能达到。

最远距离 = 已知前一个元素的最远距离 和 当前元素位置计算的最远距离 的最大值。
代码示例:

java 复制代码
 public static boolean canJump(int[] nums) {
        int dest = nums.length - 1;    // 目标位置

        int maxStep = nums[0];      // 初始的的最远位置
        for (int i = 1; i < nums.length-1; i++) {
            if (i <= maxStep) {  // 遍历数组,如果距离在最远范围内,则校验最远距离是否需要变更
                maxStep = Math.max(maxStep, i + nums[i]);   // 已知最远距离和新节点最远距离的最大值
            } else {
                break;
            }
        }

        return maxStep >= dest;   // 最远距离是否大于目标距离
    }

方法二:

反向递推。

思路:正向达到终点的距离,则也可以反向递推,看能否从终点回到起点位置。

满足公式 : 当前位置可移动的距离 + 当前元素的位置 >= 目标距离
代码示例:

java 复制代码
public static boolean canJump(int[] nums) {
    int r = nums.length - 1;
    for (int l = r - 1; l >= 0; l--) {   // 反向遍历推导
        if (nums[l] + l >= r) {     // 当前位置可移动的距离 + 当前位置 >= 目标距离
            r = l;        // 当前位置可以达到目标,位置向前移动,计算前面一个位置是否可达
        }
    }
    return r == 0;     // 可以前移到初始为止,表示满足要求
}

逆风翻盘,Dare To Be!!!

相关推荐
qq_40860686几秒前
确界的倒数性质证明
学习·算法
小蒋观天下6 分钟前
【安防AI工程实战二】AI摄像头帧率抖动根治:ISP曝光时序与AI推理时序冲突深度定位
人工智能·深度学习·算法·安全·机器学习·ai大模型
云和数据.ChenGuang18 分钟前
trace 是RAG检索链路的**全链路追踪日志对象
人工智能·深度学习·算法·排序算法
Evand J20 分钟前
【PMSM例程6】永磁同步电机(PMSM)基于增广EKF的d-q轴电感分阶段辨识算法|电机参数估计与误差分析
算法·matlab·电机·ekf
垆边人似月.21 分钟前
华为题:最多可以参加的会议数目
数据结构·c++·算法
Matlab程序猿25 分钟前
【MATLAB源码-第460期】基于matlab的OTFS通信系统SLM峰均比抑制及非线性功率放大器失真与误码性能仿真
开发语言·算法·matlab·slm·otfs
xiangyun6126 分钟前
C++ list 模拟实现(一):手撕双向链表,从节点到迭代器
数据库·c++·算法·链表·stl·list
码爸9 小时前
线性回归算法
算法·机器学习·线性回归
Coder-magician10 小时前
《代码随想录》刷题打卡day51:图论-part09(dijistra堆优化,Bellman_ford算法)
算法·图论
Nil20810 小时前
leetcode 763划分字母区间
算法·leetcode·职场和发展