leetcode 第55题 跳跃游戏

2023-11-11

题目

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。

示例1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game

思路

这个题思考过程比较快。

第一想法是从数组后面往前推,有一个位置x能到最后一个位置的话,那么就继续找能到位置x的其他位置即可,只要能到位置x就一定能到最后的位置。代码如下:

class Solution {
    public boolean canJump(int[] nums) {
       int toPosition = nums.length - 1;  // 要到达的索引位置,持续向前推进
       for (int i = nums.length - 2; i >= 0; i--) {
           if (nums[i] + i >= toPosition) {
               toPosition = i;
           }
       }
       return toPosition <= 0;
    }
}

时间复杂度:O(n)
空间复杂度:O(1)

第二个想法是从前往后遍历,其实类似动态规划的思想,可以找到一个子问题和状态转移方程。令f(k)为在k位置之前能够到达的最远位置,首先k肯定是要能够到达的,这种情况下,f(k-1)肯定是大于等于k的。在满足这个前提条件的情况下: f(k) = max(f(k-1), nums[k] + k)。代码如下

class Solution {
    public boolean canJump(int[] nums) {
        int maxK = 0; // 最远能够达到的位置
        // 在maxK已经能够到达最后的索引位置时,可以提前停止遍历
        for (int i = 0; i < nums.length && maxK >= i && maxK < nums.length - 1; i++) {
            maxK = Math.max(maxK, nums[i] + i);
        }

        return maxK >= nums.length - 1;
    }
}

时间复杂度:O(n)
空间复杂度:O(1)

用时25分钟

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode 第55题 跳跃游戏 的相关文章

  • linux之perf(2)list事件

    Linux之perf 2 list事件 Author Onceday Date 2023年9月3日 漫漫长路 才刚刚开始 参考文档 Tutorial Perf Wiki kernel org perf list 1 Linux manual

随机推荐

  • DevOps理念:开发与运维的融合

    在现代软件开发领域 DevOps 不仅仅是一个流行的词汇 更是一种文化 一种哲学和一种方法论 DevOps 的核心理念是通过开发和运维之间的紧密合作 实现快速交付 高质量和持续创新 本文将深入探讨 DevOps 文化的重要性 原则以及如何在
  • C语言 - 整形在内存中的存储方式

    一 以补码的形式存储在内存当中 1 有符号型的整数二进制首位0表示正 1表示负数 2 正数的原码 反码 补码都相同 如 3 负数的反码为原码的首位数不变 其他位按位取反所得 补码为反码 1 如 当然 要得到负数的原码 可以反过来 即补码 1
  • 基于SpringCloud的Microservices架构实战案例-在线API管理

    simplemall项目前几篇回顾 1基于SpringCloud的Microservices架构实战案例 序篇 2基于SpringCloud的Microservices架构实战案例 架构拆解 3基于SpringCloud的Microserv
  • C语言读取load格式文件,求指导,如何用c语言实现读取*.raw格式图像

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这个程序是读取jpg图像的 后续加上jpg图像打开和存放 include include include include include define SOI 0xD8 文件头 define E
  • 【Redis篇】Redis缓存之双写一致性

    1 引言 redis做为缓存 mysql的数据如何与redis进行同步呢 本质上问的就是双写一致性 注意 回答这个问题前一定要结合自己的业务背景 分两种情况 一个是你的业务一致性要求高 另一个是你的业务允许延迟一致 2 双写一致性 2 1
  • 大数据技术之数据质量管理

    一 数据质量概述 1 数据质量简介 数据质量的高低代表了该数据满足数据消费者期望的程度 这种程度基于他们对数据的使用预期 只有达到数据的使用预期才能给予管理层正确的决策参考 数据质量管理作为数据仓库的一个重要模块 主要可以分为数据的健康标准
  • 前端实现导出excel表格(单行表头)

    需求 实现勾选行导出为表格 一 安装插件 npm install save file saver xlsx 运行项目报如下警告的话 运行npm install xlsx 0 16 0 save 来降低版本号 最初我安装的版本号是0 18 1
  • android天气预报开题报告,开题报告-基于Android手机移动天气预报系统.doc

    毕业设计 论文 开题报告 题目 基于Android手机移动天气预报系统 一 选题依据 目的和意义 天气预报就是对未来时期内天气变化的预先估计和报告 它是根据大气科学的基本理论和技术对每一地区的未来天气做出分析和预测 这是大气科学为国民经济建
  • 比尔盖茨现身西雅图SAS 2007“治疗失眠”

    结束了4月18 21号的访华活动 比尔盖茨又现身在了西雅图5月8号开始的为时两天的第八届微软战略合作伙伴高峰会议上 Strategic Account Summit Conference 这次会议请来了众多重量级的大腕嘉宾 包括负责微软网络
  • Springboot 接口方式硬通知实现ConfigurationProperties 、@Value 动态刷新

    前言 看到这个文章标题 也许有的看官就觉得很多余 因为Nacos 可以设置 NacosValue value XXX autoRefreshed true 实现动态刷新 又因为cloud config的 RefreshScope 实现动态刷
  • 基于Warshall算法的连通图及欧拉图判定方法

    1736年欧拉解决了哥尼斯堡七桥问题 他在这一具体问题的基础上进一步研究 最终找到了一个简便的原则可以鉴别一个图 多重图 能否一笔画成 本文中 笔者使用布尔矩阵来存储一个无向图 并结合集合论中 传递闭包 的概念给出了一种欧拉图的判定方法 本
  • (系统的推送)友盟推送

    今年再次负责这个模块 最大亮点就是支持了系统的推送 也就是说你设备退出后台应用了 发推送还可以收到推送 https info umeng com detail id 169 cateId 1 测试方案 选择测试模式 可以无限制的发送数量 公
  • Pytorch深度学习入门与实战三——循环神经网络

    1 常见的循环神经网络 RNN LSTM GRU RNN torch nn RNN 单纯的RNN会出现随着地柜次数的增加 权重指数级爆炸或小时的问题 从而难以捕捉长时间的关联 导致RNN训练是收敛困难 LSTM 引入门的机制 使网络有更强的
  • 草料二维码统计扫描信息

    目录 1 注册账号并登陆 2 创建活码 2 1 点击活码后编辑 2 1 1 新建 gt 空白建码 也可以选择模板 3 查看统计信息 3 1 扫描创建的活码 3 2 数据分析 gt 扫描量统计 需求说明 由于服务推广需要统计扫码人数 所以使用
  • 相似图像的检测方法

    背景 以图搜图 是日常生活中我们经常会用到 例如在选购一款商品时 想要对比价格 往往会在各个购物app上通过搜图的形式来看同一款产品的价格 当你碰到某种不认识的植物时 也可以通过以图搜图的方式来获取该种植物的名称 而这些功能大都是通过计算图
  • Hook 学习系列(一) —— State Hook

    React Hook State Hook 使用多个 state 变量 以 use 开头的函数被称为 Hook React Hook 是 React 16 8 引入的新特性 它用在函数组件中 允许开发者不使用 class 的情况下 使用状态
  • QT 正则表达式 QRegExp 使用

    直接贴代码 QRegExp rx startxref s d rx setMinimal false int pos 0 while pos rx indexIn trl pos 1 pos rx matchedLength qDebug
  • 重构-提取重复的代码

    在编写程序过程中 特别是刚刚入行没有多久的程序员 经常会犯的一个错误就是大段大段的复制粘贴代码 把功能相近的代码直接复制过来而不加以修改 这个习惯也许来源于你的老师也许来源于你本身的原因 总之 对于这一类程序员最好的设计模式就是 Ctrl
  • 电信aep平台和iot平台区别_移远BC95使用CoAP协议接入华为IoT平台

    点击上方蓝色字体 关注我们 BC95的CoAP测试需要云平台配合 当前的支持CoAP协议的平台有华为OceanConnect平台 电信天翼云 除了 Logo 其他和华为的一样 移动 OneNet等 此教程以华为的OceanConnect 平
  • leetcode 第55题 跳跃游戏

    题目 给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例1 输入 nums 2 3 1 1 4 输出 true 解释 可以先跳 1 步 从下标