LeetCode 题解工作台

跳跃游戏 III

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

category

3

题型

code_blocks

5

代码语言

hub

3

相关题

当前训练重点

中等 · 图·搜索

bolt

答案摘要

我们可以使用 BFS 来判断是否能够到达值为 的下标。 定义一个队列 ,用于存储当前能够到达的下标。初始时,将 下标入队。

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 图·搜索 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]

请你判断自己是否能够跳到对应元素值为 0 的 任一 下标处。

注意,不管是什么情况下,你都无法跳到数组之外。

 

示例 1:

输入:arr = [4,2,3,0,3,1,2], start = 5
输出:true
解释:
到达值为 0 的下标 3 有以下可能方案: 
下标 5 -> 下标 4 -> 下标 1 -> 下标 3 
下标 5 -> 下标 6 -> 下标 4 -> 下标 1 -> 下标 3 

示例 2:

输入:arr = [4,2,3,0,3,1,2], start = 0
输出:true 
解释:
到达值为 0 的下标 3 有以下可能方案: 
下标 0 -> 下标 4 -> 下标 1 -> 下标 3

示例 3:

输入:arr = [3,0,2,1,2], start = 2
输出:false
解释:无法到达值为 0 的下标 1 处。 

 

提示:

  • 1 <= arr.length <= 5 * 10^4
  • 0 <= arr[i] < arr.length
  • 0 <= start < arr.length
lightbulb

解题思路

方法一:BFS

我们可以使用 BFS 来判断是否能够到达值为 00 的下标。

定义一个队列 qq,用于存储当前能够到达的下标。初始时,将 startstart 下标入队。

当队列不为空时,取出队首下标 ii,如果 arr[i]=0arr[i] = 0,则返回 true。否则,我们将下标 ii 标记为已访问,如果 i+arr[i]i + arr[i]iarr[i]i - arr[i] 在数组范围内且未被访问过,则将其入队,继续搜索。

最后,如果队列为空,说明无法到达值为 00 的下标,返回 false

时间复杂度 O(n)O(n),空间复杂度 O(n)O(n)。其中 nn 为数组长度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
    def canReach(self, arr: List[int], start: int) -> bool:
        q = deque([start])
        while q:
            i = q.popleft()
            if arr[i] == 0:
                return True
            x = arr[i]
            arr[i] = -1
            for j in (i + x, i - x):
                if 0 <= j < len(arr) and arr[j] >= 0:
                    q.append(j)
        return False
speed

复杂度分析

指标
时间complexity is O(n) since each index is visited at most once. Space complexity is O(n) due to the visited set and the recursion stack for DFS or the queue for BFS.
空间Depends on the final approach
psychology

面试官常问的追问

外企场景
  • question_mark

    Focus on array traversal patterns using DFS/BFS.

  • question_mark

    Check for cycles to avoid infinite loops.

  • question_mark

    Consider edge cases where start index is already zero.

warning

常见陷阱

外企场景
  • error

    Not marking visited indices leading to infinite loops.

  • error

    Assuming jumps can go outside the array bounds.

  • error

    Forgetting to check both forward and backward jumps at each index.

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    Use a weighted jump array where arr[i] is the maximum jump length.

  • arrow_right_alt

    Allow multiple start indices instead of a single start.

  • arrow_right_alt

    Determine the minimum number of jumps to reach zero instead of just reachability.

help

常见问题

外企场景

跳跃游戏 III题解:图·搜索 | LeetCode #1306 中等