LeetCode 55. 跳跃游戏 ( 回溯 dp 贪心

55. Jump Game(跳跃游戏)三种解法(C++ & 注释) 55. Jump Game(跳跃游戏)1. 题目描述2.2.1 解题思路2.2 实例代码2.2.1 解题思路2.2 实例代码2.2.1 解题思路2.2 实例代码2. 参考资料 1. 题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3步到达最后一个位置。 示例 2 阅读详情

这个题字节一面做过 不过当时没想到好的解法

首先能写出一个回溯的搜索算法:

class Solution {
    private boolean[] vis;
    private boolean dfs(int[] nums,int cur){
        if(cur==nums.length-1){
            return true;
        }
        boolean rs=false;
        vis[cur]=true;
        for(int i=1;i<=nums[cur];i++){
            // 向右/向左
            // 👆 指正,这里是不需要向左跳的,不过即使如此也过不了qaq
            if(cur+i<nums.length&&!vis[cur+i]){
                vis[cur+i]=true;
                rs=rs||dfs(nums,cur+i);
                vis[cur+i]=false;
            }
        }
        return rs;
    } 
    public boolean canJump(int[] nums) {
        vis=new boolean[nums.length];
        return dfs(nums,0);
    }
}

超时

突然想到这个题很适合用dp来做:

class Solution {
    public boolean canJump(int[] nums) {
        // dp[i]表示从第i个位置出发,能否到达终点
        // 递推公式:dp[i]=dp[i+1] || dp[i+2] || ... || dp[i+nums[i]]
        boolean[] dp=new boolean[nums.length];
        dp[dp.length-1]=true;
        for(int i=dp.length-2;i>=0;i--){
            // 从当前点,判断所有他能到达的点,看能否到达
            for(int j=1;j<=nums[i];j++){
                if(dp[i+j]){
                    dp[i]=true;
                    break;
                }
            }
        }
        return dp[0];
    }
}

虽然挺慢的

最妙的还是这个(,虽然不是不能马上想到,这个题dp应该是能马上想到的

class Solution {
    public boolean canJump(int[] nums) {
        // reach表示能通过跳跃到达的最远位置
        int reach=0;
        for(int i=0;i<nums.length;i++){
            if(i>reach){
                // 当前遍历到的位置,是不能通过跳跃到达的
                // 那么自然也到不了终点
                return false;
            }
            reach=Math.max(reach,nums[i]+i);
        }
        // 上述循环走完,说明对于终点,也是可以通过跳跃到达
        return true;
    }
}

 

LeetCode 55. 跳跃游戏 I 贪心三种思路 + 动态规划 跳跃游戏 I LeetCode 55 力扣 55. 跳跃游戏 动态规划 时间复杂度 O(n2)O(n^2)O(n2), 空间复杂度O(n)O(n)O(n) 数组记录当前元素是否可以到达,1表示可以到达,0表示不可到达 状态转移:(dp[j] == 1) && (nums[j] >= i - j)时,dp[i] = dp[j]; ⚠️j要从后往前进行遍历,找到dp[i]的值后break,不然会超时 bool canJump(vector<int>& nums 阅读详情

相关推荐

LeetCode 55. 跳跃游戏

文章目录55. 跳跃游戏题目解题思路代码实现实现结果 55. 跳跃游戏 题目来源:https://leetcode-cn.com/problems/jump-game 题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置。

算法-贪心/回溯-跳跃游戏1

算法-贪心/回溯-跳跃游戏1 1 题目概述 1.1 题目出处 https://leetcode-cn.com/problems/jump-game 1.2 题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位...

迷路剑客个人博客 453

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港 前脚刚走,后脚又来,山姆大叔又来刷存在感,2020年7月28日,USS Ronald Reagan流窜在我国东海海区被卫星拍了下来: 2020年8月1日,最新卫星图像显示USS Ronald Reagan已经返回母港日本横须贺:距离其出港(2020年6月8日)已经过去了快两个月 然而事情并没有到此结束,“America”级#两#栖#攻#击#舰#(LHA-6)选择在 “八.一” 这个特殊的日子前后出港颇具挑衅的味道。 根据2020年

qq_46071146的博客 1565

算法-贪心/回溯-跳跃游戏2

算法-贪心/回溯-跳跃游戏2 1 题目概述 1.1 题目出处 https://leetcode-cn.com/problems/jump-game-ii 1.2 题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一...

迷路剑客个人博客 257

GPS定位不准?可能是GDOP在作怪!手把手教你优化卫星几何分布

本文深入解析了GPS定位精度不佳的常见原因——几何精度因子GDOP。通过剖析卫星几何分布对定位误差的放大效应,文章提供了从理解GDOP、PDOP、HDOP等关键指标,到使用专业APP实时诊断卫星天空图,再到利用在线工具提前规划最佳定位时机的完整实战指南。旨在帮助户外爱好者、无人机飞手及专业用户主动优化卫星几何条件,从而显著提升定位可靠性。

weixin_29062823的博客 305

Spring Authorization Server 实战指南:构建企业级 OAuth2/OIDC 授权中心

本文介绍了Spring Authorization Server作为构建企业级OAuth2/OIDC授权中心的解决方案。首先分析了传统认证模式的不足和OAuth2/OIDC协议的优势,然后详细讲解了如何从零搭建授权服务器,包括核心配置类、授权流程、数据库持久化等关键实现。文章还涵盖了资源服务器配置、客户端应用集成、安全最佳实践以及生产环境部署建议,完整呈现了Spring Authorization Server的核心功能和使用场景。通过本教程,开发者可以掌握统一认证授权系统的构建方法,为微服务架构提供安全可

qq_39476913的博客 783

LeetCode55. 跳跃游戏(java,回溯,动态规划)

1.问题 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 2.解答 方法一:回溯 // 贪婪,每次走尽可能大的步数, // 如果无法到达最后一个位置,走次大的步数; // 直到没有遍历的可能性。 class Solution { public boolean canJump(int[] nums) ...

rosefun96的博客 606

ICC2: place阶段的clock network delay

设置了set_clock_latency之后,即便没长tree,也会有反标值,显示为clock network delay(ideal)和设置的clock latency值,需要注意的是同时设置set_clock_latency和set_clock_latency -source,clock network delay(ideal)值是二者叠加的。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 316

Leetcode55. 跳跃游戏--贪心算法,回溯算法

贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。 局部最优推出全局最优,找不出反例,试试贪心! class Solution { public: bool canJump(vector<int>& nums) { int cover=0; if (nums.size()==1) return true; for (int i=0; i<=cover;i++){ .

weixin_41811657的博客 271

【UG\NX二次开发】使用内部函数展开和折叠工序导航器

NX二次开发-群精选」专栏收录了那些曾散落在聊天对话框里的精彩的知识分享,这都是被遗落的宝贵财富。让我们一起向大佬学习,充满激情地进步,不断超越自己。底部联系方式,欢迎您加入一起交流。​下次一定。

王牌飞行员_里海的博客 819

Bev算法在J5平台的部署

支持多种形式的Bev算法:ipmlss时序,以及基于transformer的gkt。

@bangbang的博客 846

力扣(19) - 跳跃游戏

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。 示例 2: 输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

Touale的博客 929

微信小程序逆向实战:从HTTPS抓包到API接口全解构

方案原理优点缺点方案一:使用低版本微信+系统代理微信7.0以下版本未强制不走代理操作简单容易被封号,无法使用新版小程序方案二:Hook SSL层(Xposed/Frida)动态Hook Java的TrustManager或系统的SSLContext,绕过证书校验灵活可控需要Root/越狱,技术门槛高方案三:VPN转发抓包(PacketCapture)利用Android VPNService将所有流量转发到本地代理无需Root,兼容性好部分机型存在性能问题。

2201_76125261的博客 266

算法:01 贪心、DP、回溯解决 Leetcode 第55题 跳跃游戏

Leetcode 55.跳跃游戏 问题描述:   1、贪心 思想:每一次都找到局部最优解 具体分析: 拿数组 a = [2, 3, 1, 1, 4] 举例 首先,我们必能跳到索引位置0,即 a[0] 的位置,而 a[0] 的最大跳跃长度为 2,则在 a[0] 处、我们可以走 1 步 or 2 步 这时,如果我们可以通过 a[0] 位置直接走到最后一个位置,那么我们一定可以在 从 a[...

echofzoe的博客 1207

【CC精品教程】iTwin capture倾斜摄影建模完整操作流程

【CC精品教程】iTwin capture倾斜摄影建模完整操作流程。包括:无人机航测外业作业流程(像控点布设、航线规划、仿地飞行、航拍)和内业数据处理软件(Pix4d、CC、EPS、PhotoScan、Globalmapper)像控点权重调配、空三加密、DOM、DSM、DEM,DLG生成、等高线生成、高程点提取,点云分类过滤分割、点云生成DEM、三维模型生成等。

智慧空间实验室 3959

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

面试官最爱问的‘贪心 vs 动态规划’:从LeetCode真题看区别与选择

本文深入解析了贪心算法与动态规划在技术面试中的核心区别与应用场景。通过LeetCode经典题目如买卖股票最佳时机和跳跃游戏,详细对比两种算法的时间复杂度、空间复杂度及适用条件,帮助读者掌握选择最优解法的决策框架,提升面试表现。

weixin_30294295的博客 469

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】

通过5种算法和实际案例详细介绍了跳跃游戏

10年数据\经营分析经验,现任大厂数据分析负责人 2446

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【每日算法】LeetCode 55. 跳跃游戏(贪心算法)

前端开发中,算法能力是进阶关键。本文以LeetCode 55题"跳跃游戏"为例,分析三种解法:1)贪心算法(最优解,O(n)时间),通过维护最远可达位置判断;2)动态规划(O(n²)时间),自底向上记录状态;3)暴力回溯(仅理解用)。类比前端场景如进度条加载、多级菜单展开,推荐贪心算法实现,代码简洁高效。不同解法对比显示贪心算法最适合实际应用,帮助开发者从功能实现者成长为系统设计者。

LYFlied的博客 590

【Leetcode hot 100】55.跳跃游戏

摘要: 55.跳跃游戏要求判断能否从数组起始点跳到终点。最优解法是贪心算法:遍历数组,维护当前能到达的最远位置maxReach。若当前位置在maxReach范围内,更新maxReach;若超出范围则失败;若覆盖终点则成功。时间复杂度O(n),空间O(1)。也可倒序遍历,从终点回溯到起点。动态规划解法(O(n²))效率较低但易于理解。贪心法(正序/倒序)是实际首选,动态规划适合辅助学习。

专注Java和MySQL领域知识分享 833

LeetCode 55跳跃游戏 【动态规划 + 贪心】

55. 跳跃游戏 难度中等631 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出: fa...

liuhehe123的博客 754

Leetcode 55. 跳跃游戏

4、在一些问题上,nonlocal声明是必不可少的,尤其是当变量为非类对象时,比如res=int,bool等具有实际内存的变量,必须要在递归函数中声明nonlocal res;后来发现这道题其实是动态规划问题,典型的从子问题可以推到父问题,但是需要注意这道题对于时间和空间复杂度的要求是比较高的,从这也能看出来这道题其实也是个贪心问题。回溯的核心思维其实是遍历所有并且记录路径path,并且当子状态无法返回父状态时,是不需要记录visited的,只需要记录path。回溯的核心是回溯路径也就是path。

普通攻击往后拉的博客 601

hot100 跳跃游戏(55)

本题采用贪心算法(又称“最远可达边界单调扫描法”)解决一维数组可达性判定问题。其核心本质是将原本属于图论连通性或动态规划的状态空间搜索,简化为在单次线性扫描中动态维护与收敛全局最远可达下标边界mx。当前提供的源码实现了在时间复杂度 O(n) 和额外空间复杂度 O(1) 条件下的全局最优检索,最终走向是精准判定初始位置能否跨越所有零值障碍并覆盖最后一个数组下标。

2603_96126046的博客 344

55. 跳跃游戏

题目描述: 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例1: 输入: [2,3,1,1,4] 输出: true 解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。 示例2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到...

wchzh2015的博客 165

LeetCode刷题:55. Jump Game 跳跃游戏

LeetCode刷题:55. Jump Game 跳跃游戏 原题链接:https://leetcode.com/problems/jump-game/ Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in th...

梅森上校的博客 业精于勤荒于嬉,形成于思毁于随。 470

LeetCode_贪心算法

记录贪心经典算法题

qq_43563660的博客 918

【贪心算法】leetcode55跳跃游戏贪心算法和动态规划

题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。 通过的代码一

qq_38391210的博客 240
上一篇: LeetCode 49. 字母异位词分组(hashmap
下一篇: LeetCode 56. 合并区间(排序
RedemptionC
博客等级 码龄11年 103粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值