leetcode 1306. Jump Game III(跳跃游戏 3)

【编程算法】跳跃游戏ⅠⅡⅢ(Python解法) 写这篇文章源于之前4.10做的字节跳动的笔试,第二道编程题就是跳跃游戏类,可以说和牛客或者力扣上边的解题做法是完全一样的,可惜当时我才刚开始学习算法。深入了解该类型后发现真的很有意思,这篇文章给大家分享一下本人的思路及解题方法,主要将该类题分为三种类型(主要是后两种问题),算是系统性地阐述了该类问题的解法,假如把三种类型题目搞懂,我觉得在遇到该类问题便能做到得心应手了。 前言 文章分为... 一、贪心算法 看到能否走完,走得更远等题目,一般考虑动态规划和贪心算法,这题没有那么明显的 二. 阅读详情

Given an array of non-negative integers arr, you are initially positioned at start index of the array. When you are at index i, you can jump to i + arr[i] or i - arr[i], check if you can reach to any index with value 0.

Notice that you can not jump outside of the array at any time.

Example 1:

Input: arr = [4,2,3,0,3,1,2], start = 5
Output: true
Explanation:
All possible ways to reach at index 3 with value 0 are:
index 5 -> index 4 -> index 1 -> index 3
index 5 -> index 6 -> index 4 -> index 1 -> index 3

给一个数组,从start的index出发,每次能左移或右移arr[start]个位置
问能不能走到值为0的index处

显然要用DFS或者BFS

用DFS要注意

  1. 要有visited数组,访问过的地方不要再重复访问,否则容易出现死循环
  2. 如果不修改原数组数值的情况下,需要另有一个数组记录访问过的位置是否能到达0,要么就改变原数组数值,记录visited。这样就避免了重复计算
  3. 注意index是否超出了数组边界,判断index是否<0或者>=arr.length

这里不改变原数组的值

    public boolean canReach(int[] arr, int start) {       
       if(arr == null || start < 0 || start >= arr.length) {
           return false;
       } 
        
       boolean[] bVisited = new boolean[arr.length];
       boolean[] bReach = new boolean[arr.length];
        
       return dfs(arr, start, bVisited, bReach);
    }
    
    boolean dfs(int[] arr, int start, boolean[] bVisited, boolean[] bReach) {
        if(start < 0 || start >= arr.length) return false;
        if(bVisited[start]) return bReach[start];
        bVisited[start] = true;
        if(arr[start] == 0) {
            bReach[start] = true;
            return true;
        }
        if(bReach[start]) return true;
        
        return dfs(arr, start - arr[start], bVisited, bReach) || dfs(arr, start + arr[start], bVisited, bReach);
    }
leetcode 1306. Jump Game III | 1306. 跳跃游戏 III(BFS) 题目 https://leetcode.com/problems/jump-game-iii/ 题解 正如 hint 所说: 用 BFS,跳过的就不跳了,直到全部跳过,即 count == arr.length, 则返回 fasle. 过程中,如果遇到 arr[i] == 0,则返回 true. class Solution { public boolean canReach(int[] arr, int start) { boolean[] visited = new bool 阅读详情

相关推荐

深信服PT1-AF实验考试

深信服PT1-AF实验考试实验练习可以去深信服的在线实验平台(链接如下):深信服在线实验平台 (sangfor.com.cn)实验考试其实就是把所有的每一部分实验综合了起来以下内容仅做参考,不确保一样。

m0_72019240的博客 7103

Python每日一练(20230511) 跳跃游戏 I\II\III\IV

1. 跳跃游戏 Jump Game I   2. 跳跃游戏 Jump Game II   3. 跳跃游戏 Jump Game III   4. 跳跃游戏 Jump Game IV

汉阳Hann's Home 2188

基于 WebGoat 平台的 SQL 注入攻击

基于 WebGoat 平台的 SQL 注入攻击

Labulongdong的博客 3521

LeetCode高频题55,45类似的1306. 跳跃游戏 III:从start位置跳到end位置,至少需要多少步,不行返回-1

0)我发现,其实,不管是矩阵中往右,还是斜着走,去打击怪兽,还是这种数组,往左右走,走步数,到达指定地点,都是考的分支限界的业务限制类算法,无法不走这,就走那,这种业务限制类模型,就是要把变量考虑清楚,动态规划的尝试,一定是考虑变量简单,int,Boolean类型,还不要超过3个变量,越少越好,越简单越好。 1)关于跳跃游戏,有一堆类似的题目,用DFS,BFS,或者通过控制变量来决定i与cur的关系,才能知道能否到N-1位置,也才能知道需不需要增加步数 2)本题,BFS很巧妙,i可以走左边,也可以走右边,只

weixin_46838716的博客 1106

深入解析MTK平台hang_detect机制:从原理到实战调试

本文深入解析了MTK平台hang_detect机制的工作原理与实战调试技巧。作为系统健康监测的核心机制,hang_detect通过多层级监控体系检测应用层和内核层异常,结合Kernel_exception等日志信息快速定位问题。文章详细介绍了典型问题案例、调试方法及预防措施,帮助开发者提升MTK平台系统稳定性调试能力。

purple的博客 1003

冗余位技术在SAR ADC中的动态误差恢复机制解析

本文深入解析了冗余位技术在SAR ADC中的动态误差恢复机制,详细介绍了其基本概念、动态误差产生原因及冗余位的容错空间设计、时序松弛策略和数字校正算法。通过实际电路设计案例和数学建模,展示了冗余位技术如何显著提升ADC的精度和能效比,同时探讨了未来发展方向。

weixin_28335283的博客 973

【LeetCode】1306. 跳跃游戏 III(JAVA)

原题地址:https://leetcode-cn.com/problems/jump-game-iii/ 题目描述: 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。 注意,不管是什么情况下,你都无法跳到数组之外。 示例 ...

rabbitsockx的博客 274

从设计到实战:手把手教你用SolidWorks完成一个简易离心泵叶轮的水力设计全流程

本文详细介绍了使用SolidWorks进行简易离心泵叶轮水力设计的全流程,涵盖参数计算、水力设计和三维建模等关键步骤。通过实际案例演示,帮助机械设计工程师和学生掌握从理论到实践的转化技巧,特别适合低比转速离心泵叶轮的设计需求。

weixin_30621711的博客 229

Leetcode5297. 跳跃游戏 III(Java, BFS)

1.问题描述 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。 注意,不管是什么情况下,你都无法跳到数组之外。 示例 1: 输入:arr = [4,2,3,0,3,1,2], start = 5 输出:true 解释: 到...

rosefun96的博客 519

ransac拟合2D圆(三点定圆 c++详细版)

RANSAC(Random Sample Consensus,随机采样一致性)算法是一种基于随机采样的迭代算法,主要用于从一组包含大量噪声和异常值(外点)的数据中估计数学模型的参数。

twnkie的博客 1046

带有HSE组件的S32系列芯片中各子系统如何依次启动?

仔细阐述了上电后各个子系统的启动顺序,并给出了详细的启动步骤流程图。

车载系统攻城狮 1700

力扣第 1306 题是跳跃游戏 III

下面对代码逐行进行详细的讲解,帮助您深入理解其逻辑和实现过程。

weixin_48941116的博客 1033

Vue Print Designer——一款让打印模板的设计变简单的可视化打印设计器

Vue Print Designer——一款让打印模板的设计变简单的可视化打印设计器

bjzhang75的博客 682

【LeetCode 45 55 1306】Jump Game I,II,III【JAVA】

跳跃游戏,合计三道题。 55. Jump Game 1. 题目 运行结果 45. Jump Game II 1. 题目: 运行结果 运行结果 1306. Jump Game III 1. 题目 运行结果

卤小蛋学编程 414

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Leetcode 1306.跳跃游戏 III(Jump Game III)

Leetcode 1306.跳跃游戏 III 1 题目描述(Leetcode题目链接)   这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。 注意,不管是什么情况下,你都无法跳到数组之外。 输入:arr = [4,2,3,...

qq_39378221的博客 448

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LeetCode 1306. 跳跃游戏 III(广度优先搜索BFS)

1. 题目 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。 当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。 注意,不管是什么情况下,你都无法跳到数组之外。 示例 1: 输入:arr = [4,2,3,0,3,1,2], start = 5 输出:true 解释: 到...

Michael是个半路程序员 2529

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【LeetCode】第1306题——跳跃游戏III(难度:中等)

【LeetCode】第1306题——跳跃游戏III(难度:中等)题目描述解题思路代码详解注意点 题目描述 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 其中一个 下标处。 注意,不管是什么情况下,你都无法跳到数组之外。 示例 1: 输入:arr = [4,2,3,0,3,1,2], start = 5 输出:true 解释: 到达值为 0

Se7en_Dayz的博客 582

[leetcode]1306. 跳跃游戏 III

DFS解法 class Solution { vector<bool>visited; vector<int>arr; int len; public: bool DFS(int pos) { if(arr[pos] == 0) { return true; ...

qq_40691051的博客 361

[leetcode] 1306. Jump Game III

Description Given an array of non-negative integers arr, you are initially positioned at start index of the array. When you are at index i, you can jump to i + arr[i] or i - arr[i], check if you can reach to any index with value 0. Notice that you can not

Learning from the mistakes 236

1306. Jump Game III

https://leetcode.com/problems/jump-game-iii/ Given an array of non-negative integersarr, you are initially positioned atstartindex of the array. When you are at indexi, you can jumptoi + arr[i]ori - arr[i], check if you can reach toanyindex with...

Young's Blog 108

Leetcode 1306:跳跃游戏III

题目描述 这里有一个非负整数数组arr,你最开始位于该数组的起始下标start处。当你位于下标i处时,你可以跳到i + arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。 注意,不管是什么情况下,你都无法跳到数组之外。 示例 1: 输入:arr = [4,2,3,0,3,1,2], start = 5 输出:true...

weixin_35338624的博客 394

1306. 跳跃游戏 III — 图搜索思路拆解

给定一个非负整数数组arr和起始位置start,当位于下标i时,可以跳到i + arr[i]或i - arr[i](不能越界)。判断能否跳到的下标处。🌏这道题的模式在真实系统中无处不在:网页爬虫从种子 URL 出发,沿着链接爬向新页面,已爬过的不重复爬——这就是图的遍历。理解了这道题,你就理解了爬虫的核心逻辑,也是所有"从 A 出发能否到达 B"问题的通用解法。:我第一次看到这道题,脑子里先闪过"贪心"——Jump Game I 不是贪心吗?。一旦能往左跳,就可能出现环(比如 0→3→0)。

qq_37510030的博客 497

LeetCode-1306. Jump Game III

Given an array of non-negative integersarr, you are initially positioned atstartindex of the array. When you are at indexi, you can jumptoi + arr[i]ori - arr[i], check if you can reach toany...

reigns的博客 555

Leetcode 1306. Jump Game III

文章作者:Tyan 博客:noahsnail.com  |  优快云  |  简书 1. Description 2. Solution **解析:**Version 1,使用广度优先搜索,其实是个二叉树遍历问题,使用字典记录搜索过的索引,每次根据当前值计算下一次搜索的左右索引,如果在数组范围内且没被搜索过,则将其记录到队列中,依次搜索,如果当前值为0,返回True,如果队列为空时都没找到,则返回False。 Version 1 class Solution:

SnailTyan 249

Leetcode1306. 跳跃游戏 III(medium,BFS,DFS)

Leetcode1306. 跳跃游戏 III(medium,BFS,DFS),Python题解

chenxy_bwave的专栏 553

1306. 跳跃游戏 III

题干 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。 注意,不管是什么情况下,你都无法跳到数组之外。 示例 1: 输入:arr = [4,2,3,0,3,1,2], start = 5 输出:true 解释: 到达值为 ...

QAQ123666的博客 345
上一篇: leetcode 1290. Convert Binary Number in a Linked List to Integer(链表的二进制转为十进制数)
下一篇: FCN8s 转 tensorrt(通过wts文件)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值