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)的主要内容,如果未能解决你的问题,请参考以下文章

HDU5765 Bonds (高维前缀和)

[Leetcode]44.跳跃游戏Ⅰ&&45.跳跃游戏Ⅱ

LeetCode 45. 跳跃游戏 II | Python

LeetCode 45. 跳跃游戏2

[leetcode] 55. 跳跃游戏

力扣Leetcode 45. 跳跃游戏 II - 贪心思想