当前位置: 首页 > news >正文

力扣经典算法篇-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 <= nums[i] <= 105

解题:
方法一:
贪心算法。
思路:要想达到终点,只需要依次遍历终点前的所有元素,获取每一步所能达到的最远距离,当最远距离超过目标距离则能达到,反之则不能达到。
最远距离 = 已知前一个元素的最远距离 和 当前元素位置计算的最远距离 的最大值。
代码示例:

 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;   // 最远距离是否大于目标距离
    }

方法二:
反向递推。
思路:正向达到终点的距离,则也可以反向递推,看能否从终点回到起点位置。
满足公式 : 当前位置可移动的距离 + 当前元素的位置 >= 目标距离
代码示例:

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!!!

相关文章:

  • Debezium嵌入式连接postgresql封装服务
  • 前端常用环境安装
  • Python3 MySQL (PyMySQL) 教程
  • DHCPv6 笔记250405
  • Word在生成PDF后,PDF左侧导航书签目录错误显示的解决方法
  • AI Agent设计模式六:ReAct
  • VSCode中结合DeepSeek使用Cline插件的感受
  • 2-Docker常用命令
  • 30--当路由器学会“反侦察“:华为URPF协议配置全解
  • 2022 年 6 月青少年软编等考 C 语言七级真题解析
  • 2025年渗透测试面试题总结- 某58同城-安全工程师扩展(题目+回答)
  • 当AI助理接管云计算-走向智能运维的新时代
  • Spring AI Alibaba示例项目深度解析:helloworld子模块详解(经典解读版)
  • 2025年渗透测试面试题总结- 某深某服-漏洞研究员实习扩展(题目+回答)
  • Spring AI Alibaba示例项目深度解析:dashscope-audio子模块详解
  • Android学习之Material Components
  • PyTorch构建自定义模型
  • 从2G到5G:认证体系演进与网元架构变迁深度解析
  • 使用 iPerf 测试内网两台机器之间的传输速度
  • 2025大唐杯仿真4——信令流程
  • 做袜子娃娃的网站/爱站网关键词
  • 长沙网站免费建站/品牌运营管理有限公司
  • 南充做网站 www.xinbay.com/营销型网站制作公司
  • 上海公司企业网站怎么做/百度下载安装2019
  • 网站上的按钮怎么做/新冠疫苗接种最新消息
  • 哈尔滨网站设计联系方式/域名查询备案