Leetcode5765. 跳跃游戏 VII(前缀和+DP)
Posted !0 !
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode5765. 跳跃游戏 VII(前缀和+DP)相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/jump-game-vii/
解题思路
对于每个点i,我们如果能到达这个点,那么在区间[i - maxJump, i - minJump]必定至少存在一个能到达的点。而我们要查找一个点是否能到达区间就可以用到前缀和。
代码
class Solution {
public boolean canReach(String s, int minJump, int maxJump) {
int n = s.length();
int[] f = new int[n + 1]; //是否能跳到第i个点
int[] s1 = new int[n + 1]; //前缀和
f[1] = 1; //初始化
s1[1] = 1;
for (int i = 2; i <= n; i ++ ) {
if (s.charAt(i - 1)== '0' && i - minJump >= 1) { //如果当前点为0,并且能到达i这个点
int l = Math.max(1, i - maxJump);//能到达i这个位置的左边界
int r = i - minJump; //能到达i这个位置的右边界
if (s1[r] > s1[l - 1]) //到达i这个位置的区间有值,代表能到达i这个位置
f[i] = 1;
}
s1[i] = s1[i - 1] + f[i]; //计算前缀和
}
return f[n] == 1; //1代表这个位置能达到
}
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(n)
以上是关于Leetcode5765. 跳跃游戏 VII(前缀和+DP)的主要内容,如果未能解决你的问题,请参考以下文章