【问题标题】:Stackoverflow Error in Minimum Size Subarray Sum最小大小子数组总和中的 Stackoverflow 错误
【发布时间】:2018-12-05 15:41:48
【问题描述】:

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

http://www.filedropper.com/arraytnt
。我收到错误 Exception in thread "main" java.lang.StackOverflowError at Solution.fsub(Solution.java:17) 多次出现。

问。给定一个由 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);

}

}

【问题讨论】:

  • 如果你用调试器慢慢地运行它,你会很快看到错误发生在哪里。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2016-05-27
    • 2013-08-06
    • 2019-01-19
    • 2014-08-26
    • 2013-06-04
    相关资源
    最近更新 更多