LeetCode 题解工作台
跳跃游戏 VII
给你一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump 。一开始,你在下标 0 处,且该位置的值一定为 '0' 。当同时满足如下条件时,你可以从下标 i 移动到下标 j 处: i + minJump 且 s[j] == '0' . 如果你可以到达 s 的下标 s.…
4
题型
6
代码语言
3
相关题
当前训练重点
中等 · 状态·转移·动态规划
答案摘要
我们定义一个长度为 的前缀和数组 ,其中 表示 的前 个位置中能够到达的个数。定义一个长度为 的布尔数组 ,其中 表示 是否能够到达。初始时 $pre[1] = 1$,而 $f[0] = true$。 考虑 $i \in [1, n)$,如果 $s[i] = 0$,那么我们需要判断 的前 个位置中是否存在一个位置 ,满足 能够到达且 到 的距离在 $[minJump, ma…
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 状态·转移·动态规划 题型思路
题目描述
给你一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump 。一开始,你在下标 0 处,且该位置的值一定为 '0' 。当同时满足如下条件时,你可以从下标 i 移动到下标 j 处:
i + minJump <= j <= min(i + maxJump, s.length - 1)且s[j] == '0'.
如果你可以到达 s 的下标 s.length - 1 处,请你返回 true ,否则返回 false 。
示例 1:
输入:s = "011010", minJump = 2, maxJump = 3 输出:true 解释: 第一步,从下标 0 移动到下标 3 。 第二步,从下标 3 移动到下标 5 。
示例 2:
输入:s = "01101110", minJump = 2, maxJump = 3 输出:false
提示:
2 <= s.length <= 105s[i]要么是'0',要么是'1's[0] == '0'1 <= minJump <= maxJump < s.length
解题思路
方法一:前缀和 + 动态规划
我们定义一个长度为 的前缀和数组 ,其中 表示 的前 个位置中能够到达的个数。定义一个长度为 的布尔数组 ,其中 表示 是否能够到达。初始时 ,而 。
考虑 ,如果 ,那么我们需要判断 的前 个位置中是否存在一个位置 ,满足 能够到达且 到 的距离在 之间。如果存在这样的位置 ,那么我们就有 ,否则 。在判断 是否存在时,我们可以通过前缀和数组 在 的时间内判断是否存在这样的位置 。
最终答案即为 。
时间复杂度 ,空间复杂度 。其中 为字符串 的长度。
class Solution:
def canReach(self, s: str, minJump: int, maxJump: int) -> bool:
n = len(s)
pre = [0] * (n + 1)
pre[1] = 1
f = [True] + [False] * (n - 1)
for i in range(1, n):
if s[i] == "0":
l, r = max(0, i - maxJump), i - minJump
f[i] = l <= r and pre[r + 1] - pre[l] > 0
pre[i + 1] = pre[i] + f[i]
return f[-1]
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | Depends on the final approach |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Look for a candidate's understanding of state transition DP.
- question_mark
Evaluate their ability to optimize using sliding windows.
- question_mark
See how they manage time and space complexity when implementing dynamic programming in a real-world scenario.
常见陷阱
外企场景- error
Overcomplicating the solution by checking all possible combinations instead of limiting the range of valid moves.
- error
Failure to optimize the solution by using a sliding window, leading to inefficient time complexity.
- error
Not managing memory effectively when using dynamic programming to track reachable indices, potentially causing excessive space usage.
进阶变体
外企场景- arrow_right_alt
Consider cases where the string starts with a larger number of '1's, blocking early jumps.
- arrow_right_alt
What if there were more than two jump ranges instead of just minJump and maxJump?
- arrow_right_alt
What if the string had a large number of consecutive '1's, requiring careful interval handling?