LeetCode55题:跳跃游戏(原创)

news2025/2/7 8:47:49

【题目描述】

       给你一个非负整数数组 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)1 <= nums.length <= 104
2)0 <= nums[i] <= 105。

【解题代码】

class Solution {
    public boolean canJump(int[] nums) {
        boolean[] mark = new boolean[nums.length];
        return jump(nums, 0, mark);
    }

    public boolean jump(int[] nums, int n, boolean[] mark) {
        mark[n] = true;
        if (n > nums.length - 2) return true;
        for (int i = 1; i <= nums[n]; i++) {
            if (!mark[n + i] && jump(nums, n + i, mark))
                return true;
        }
        return false;
    }
}

【解题思路】

        拿到题目,首先想到就是采用递归的方式不断地尝试下一步。按照这个思路很快完成代码编写

class Solution {
    public boolean canJump(int[] nums) {
        return jump(nums, 0);
    }

    public boolean jump(int[] nums, int n) {
        if (n > nums.length - 2) return true;
        for (int i = 1; i <= nums[n]; i++) {
            if (jump(nums, n + i))
                return true;
        }
        return false;
    }
}

代码很容易编写,但这种简单粗暴的方式,性能肯定不过关,一提交,结果不出所料

分析原因,感觉问题应该出现在重复计算的问题,即几次的跳跃一旦落到同一个格子里,之后的结果肯定是一样的,如果避开标记好跳过的格子,性能应该会大大提高,快速修改代码,并提交成功

【解题步骤】

  1. 定义一个函数,从某个下标开始,往后跳,看最终是否能跳到最后一格
    public boolean jump(int[] nums, int n, boolean[] mark) {
        // 如果当前下标大于等于数字为不下标返回true
        if (n > nums.length - 2) return true;
        // 标记第n个下标已经跳过
        mark[n] = true;
        // 从第n个下标开始,从1步到最大步数依次递归跳跃计算
        for (int i = 1; i <= nums[n]; i++) {
            // 如果当前下标没有跳过,则递推进行跳跃尝试
            if (!mark[n + i] && jump(nums, n + i, mark))
                return true;
        }
        // 所有步数都尝试不成功,最后返回失败
        return false;
    }

  2. 定义一个数组,标记所有下标是否跳过
    boolean[] mark = new boolean[nums.length];
  3. 从下标0开始递归跳跃,并返回最终结果
     return jump(nums, 0, mark);

【思考总结】

  1. 递归算法比较简单,但会有重复计算的陷阱,之前动态规划算法里也提到过了;
  2. 官方的题解算法更简单,性能更好,大家也可以看看;
  3. LeetCode解题之前,一定不要看题解,看了就“破功”了! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1598443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四.音视频编辑-音频混合-概述

引言 当我们在前两篇博客中成功地构建了一个媒体组合&#xff0c;并且略过了音频部分时&#xff0c;我们意识到了我们需要对这个项目进行更详细的探讨。在本篇博客中&#xff0c;我们将会展示如何创建一个包含视频轨道、配音音频轨道以及背景音频轨道的完整媒体组合。更进一步…

Elastic安装后 postman对elasticsearch进行测试

一、创建索引和mapping //id 字段自增id //good_sn 商品SKU //good_name 商品名称 //good_introduction 商品简介 //good_descript 商品详情 PUT http://IP:9200/shop { "mappings":{ "good":{ "properties":{ …

Windows电脑使用Everything+cpolar搭建在线资料库并实现无公网IP管理文件

文章目录 推荐前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家…

网络安全赛事中开源威胁情报的妙用

写在前面 近期参与了一场网络安全赛事&#xff0c;一些题目的解法涉及到开源网络威胁情报&#xff0c;遂对相关题目及涉及到的知识点进行分析。 什么是OSCTI 开源网络威胁情报 (Open-Source Cyber Threat Intelligence,OSCTI)是详细描述针对某个组织网络安全威胁的数据。OSC…

基于ssm的社区再就业培训管理系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本社区再就业培训管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数…

解决微信报错,错误码:80051

方法一&#xff1a;uniapp勾选-->运行时是否压缩代码 工具栏-->运行-->运行到小程序模拟器-->运行时是否压缩代码 方法二&#xff1a;将项目中的静态图片换成网络图片 静态图片非常占用空间 方法三&#xff1a;分包处理 具体方法&#xff1a;http://t.csdnimg.cn…

2022年高教社杯数学建模国赛C题创新多思路详解

C题古代玻璃制品的成分分析与鉴别 题目定位&#xff1a;数据分析题&#xff08;数据量少&#xff0c;维度较多&#xff09; 参考往年题目&#xff1a;2021年国赛B题 一、题目背景分析 这几段主要是交代题目的背景&#xff0c;讲解了古代玻璃制品的特征&#xff0c;解释了其化…

低敏猫粮怎么选?看这一篇就够了!

亲爱的朋友们&#xff0c;你们是否曾经为了家中敏感肠胃的小猫咪而犯愁&#xff0c;不知道如何选择适合的猫粮呢&#xff1f;今天&#xff0c;就让我们一起聊聊低敏猫粮与普通猫粮的那些不同之处吧&#xff01;&#x1f431; 1️⃣ **成分差异**&#xff1a;首先&#xff0c;从…

Odoo 17 库存补给报告概览

Odoo 17 的库存补给报告对于优化库存水平和确保供应链顺畅运作至关重要。该报告深入分析库存变动&#xff0c;帮助企业维持理想的库存水平&#xff0c;减少缺货现象&#xff0c;提升整体运营效率。报告主要基于需求预测和历史消费模式来指导库存补充&#xff0c;通过分析销售趋…

eBay跨境商家必读:自养号测评补单的四大优势

eBay的流量并不比亚马逊差&#xff0c;这与eBay在简化买家退货流程&#xff0c;促进批量购买打折产品等方面改善用户购买体验所做的努力是分不开的。那么作为ebay跨境卖家该如何在平台上卖的更好&#xff1f; 1、店铺建设&#xff0c;做好产品的详情页面 1.一般来说&#xff…

WebApis知识总结以及案例(续3)

综合案例 小兔鲜页面注册 分析业务模块 发送验证码模块 用户点击之后&#xff0c;显示05 秒后重新获取 时间到了&#xff0c;自动改为重新获取 //1.发送短信验证码模块const codedocument.querySelector(.code)let flagtrue//通过一个变量来控制 节流阀 // 1.1 点击事件co…

[docker] 核心知识 - 概念和运行

[docker] 核心知识 - 概念和运行 之前 docker 学了个开头就去搞项目去了&#xff0c;不过项目也开展了好久了&#xff0c;前端差不多吃透了&#xff0c;有些新功能需要用 docker 和 k8s……是时候重新学习一下了。 这一部分简单的过一下概念和讲一下怎么运行 docker 镜像和启…

洛谷P1229 遍历问题

洛谷P1229 遍历问题 遍历问题 文章目录 遍历问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 正确代码 题目描述 我们都很熟悉二叉树的前序、中序、后序遍历&#xff0c;在数据结构中常提出这样的问题&#xff1a;已知一棵二叉树的前序和中序遍历&#xff0c;求它…

windows wireshark抓包rtmp推流出现TCP Retransmission

解决办法&#xff1a;tcp.port1935 && !(tcp.analysis.retransmission)

springcloud-fegin 组件调用

一、Feign 概述 Feign是Netflix开发的声明式、模板化的HTTP客户端&#xff0c; Feign可以帮助我们更快捷、优雅地调用HTTP API。 在Spring Cloud中&#xff0c;使用Feign非常简单——创建一个接口&#xff0c;并在接口上添加一些注解&#xff0c;代码就完成了。Feign支持多种…

武汉星起航:亚马逊跨境引领全球贸易新趋势,展现积极影响力

随着全球化浪潮的持续推进&#xff0c;跨境电商行业正迎来前所未有的发展机遇。亚马逊作为全球领先的电商平台&#xff0c;其在跨境电商领域的发展趋势备受瞩目。亚马逊跨境电商不仅扩大了跨境市场的规模&#xff0c;优化了供应链管理&#xff0c;还积极应用科技创新&#xff0…

硬件开源--Model 3C(简称M3)芯片驱动RGB接口86中控屏PCBA原理图

针对市场IOT应用需求&#xff0c;基于启明智显的Model3C芯片(简称M3)设计开发的一款超高性价比的86型中控屏PCBA原理图开源。 Model3C芯片(简称M3)是一款基于 RISC-V 的高性能、国产自主、工业级高清显示与智能控制 MCU&#xff0c;配备强大的 2D 图形加速处理器、PNG/JPEG 解码…

大话设计模式之访问者模式

访问者模式是一种行为设计模式&#xff0c;它允许你在不修改对象结构的前提下定义作用于这些对象结构元素的新操作。 在访问者模式中&#xff0c;有两个核心概念&#xff1a; 访问者&#xff08;Visitor&#xff09;&#xff1a;定义了对对象结构中每个元素的访问操作。每个访…

STM32的GPIO端口的八种模式解析

目录 STM32的GPIO端口的八种模式解析 一、上拉输入模式 二、下拉输入模式 三、浮空输入模式 四、模拟输入模式 五、推挽输出模式 六、开漏输出模式 七、复用推挽输出模式 八、复用开漏输出模式 STM32的GPIO端口的八种模式解析 在学习STM32的过程中&#xff0c;GPIO端口…

惨痛教训:我的专业赢得了辩论,却用情商丢掉了客户。

某一年&#xff0c;我给某市级部门做了一个3D展示的系统&#xff0c;时间紧&#xff0c;任务重&#xff0c;也是如期完成了。最后到市里去评审的时候&#xff0c;现场来了11个副主任&#xff0c;大家你一言我一语的对系统提出意见和建议。 那个时候我是年轻气盛&#xff0c;知道…