java - 这个dfs算法的时间复杂度是多少

标签 java algorithm data-structures

问题陈述:给定一个非负整数数组,您最初位于数组的第一个索引处。//一个leetcode问题

我只是对计算它的复杂性感到困惑。 tike 复杂度是多少?您能否推荐任何教授 tike 复杂度计算的书籍或教程

   class Solution {
    public boolean canJump(int[] nums,int sum,boolean isreach[]) {
        if(sum == nums.length-1){
            return true;
        }
        if(sum >= nums.length){
            return false;
        }
        if(isreach[sum]) return true;
        int j = nums[sum];
        int k = 1;
        boolean check = false;
        while( k <= j && sum + k < nums.length ){       
           check = check || canJump(nums, sum+k,isreach);
           if(check) {isreach[sum] = check; return true;}
           k++;
        }
        return false;
    }
    public boolean canJump(int[] nums) {
        boolean isreach[] = new boolean[nums.length];
        return canJump(nums,0,isreach);
    }
 }

我认为是n^2

最佳答案

首先,这不是广度优先搜索算法。我很确定您所指的问题是 Jump Game problem from LeetCode ,其最优解是使用动态规划,而不是广度优先搜索。

您上面介绍的算法只是一种自上而下的动态规划算法,它会记住它找到的较小子问题的解决方案。该算法的运行时间为 O(N)(其中 N 是您想要达到的 sum 值),因为最多有 >N 个您将访问的不同州。

关于java - 这个dfs算法的时间复杂度是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61431011/

相关文章:

检查老虎机所有排列是否获胜的算法

c - 有没有同时使用堆栈和队列(双端队列)ADT 的有趣算法?

java - 单例模式面试

java - 具有相似特征的对象的 UML 思想。

java - 用于创建交互式 PDF 的 API

algorithm - Trie 复杂度和搜索

java - 在一个循环中使用 HashMap 的第一个非重复字符?

java - 与文件相关的 NullPointerException

algorithm - 网格中具有公共(public)角的所有矩形

javascript - 找到距离原点 (0, 0) 最近的 K 个点