Java 最小大小子数组和中的堆栈溢出错误

Java 最小大小子数组和中的堆栈溢出错误,java,arrays,recursion,runtime-error,stack-overflow,Java,Arrays,Recursion,Runtime Error,Stack Overflow,我的代码不适用于s=120331635和非常长的数组。请在这里找到数组。我在Solution.fsub(Solution.java:17)的线程“main”java.lang.StackOverflowerError中收到错误异常,该异常多次出现 http://www.filedropper.com/arraytnt Q.给定一个由n个正整数和一个正整数组成的数组,求其和为≥ s如果没有,则返回0。 例如: 输入:s=7,nums=[2,3,1,2,4,3] 产出:2 说明:子阵列[4,3]在问

我的代码不适用于s=120331635和非常长的数组。请在这里找到数组。我在Solution.fsub(Solution.java:17)的线程“main”java.lang.StackOverflowerError中收到错误异常,该异常多次出现

http://www.filedropper.com/arraytnt Q.给定一个由n个正整数和一个正整数组成的数组,求其和为≥ 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);

}
public int minSubArrayLen(int s,int[]nums){
如果(nums.length==0)返回0;
返回fsub(s,nums,0,1);
}
公共整数fsub(整数s,整数[]A,整数i,整数f){
int n=A.长度;
如果(f>n)返回fsub(s,A,0,f-i+1);
int sum=0;for(int j=i;j=s)返回(f-i);//如果找到
else if(f-i==n)返回0;//如果未找到任何内容
返回fsub(s、A、i+1、f+1);
}

}

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

如果您使用调试器缓慢地运行它,您将很快看到错误发生的位置。