最小大小子数组总和中的Stackoverflow错误

时间:2018-06-26 20:34:38

标签: java arrays recursion runtime-error stack-overflow

我的代码不适用于s = 120331635和非常长的数组。请在此处

http://www.filedropper.com/arraytnt 
找到数组。我在Solution.fsub(Solution.java:17)上收到错误“ 线程“主” java.lang.StackOverflowError中的异常,该异常多次出现。

问。给定一个由n个正整数和一个正整数s组成的数组,请找到总和≥s的连续子数组的最小长度。如果没有,则返回0。

示例:

输入:s = 7,nums = [2,3,1,2,4,3] 输出2 说明:在问题约束下,子数组[4,3]具有最小长度

类解决方案{

public int minSubArrayLen(int s, int[] nums) {
    if(nums.length==0) return 0;
    return fsub(s,nums,0,1);
}

public int fsub(int s, int[] A, int i, int f){
    int n=A.length;

    if(f>n) return fsub(s,A,0,f-i+1);
    int sum = 0; for(int j = i;j<f;j++) {sum += A[j];}

    if(sum>=s) return(f-i);      // if found
    else if(f-i == n) return 0;  // if nothing found

    return fsub(s,A,i+1,f+1);

}

}

1 个答案:

答案 0 :(得分:0)

通过使用递归,每次调用该方法时,它将使用方法堆栈,这将占用内存。因此,如果其时间复杂度为O(2 ^ n),其中n是数组的大小,那么对于许多方法调用,其空间复杂度将为O(2 ^ n)。因此2 ^ n个空间正在越过给定的内存限制。