开发者社区> 问答> 正文

StackOverFlow发生分而治之的问题:最大subArray

我试图用分而治之的方法解决最大subArray总和问题,但是发生了运行时错误(StackOverFlow),我不知道如何处理它,我认为这是由于我的递归调用而发生的。这是我的方法(错误发生在第一行递归行):

public int maxSubArray(int[] nums){
        int length = nums.length;
        int middle = length/2;
        if(length ==1 ){
            return nums[0];
        }
        int[] starting = Arrays.copyOfRange(nums, 0, middle+1);
        int[] ending = Arrays.copyOfRange(nums, middle +1, length);

            int left = maxSubArray(starting);
            int right = maxSubArray(ending);
            int crossing = computeCrossingSum(starting,ending);

            int result = Math.max(left,right);
            int finalResult = Math.max(result,crossing);
           return finalResult;
        }



   public int computeCrossingSum (int[] left, int[]right){

       int leftS =Integer.MIN_VALUE;
       int rightS =Integer.MIN_VALUE;
       int leftIndex;
       int rightIndex;

       int sumS = 0;
       for(int i = left.length -1 ; i>=0 ; i--){
           sumS+=left[i];
           if (sumS > leftS){
           leftS = sumS;
           leftIndex = i;
           }
       }


       int sumA = 0;
       for(int i = 0 ; i< right.length ; i++){
           sumA+=right[i];
           if (sumA > rightS){
           rightS = sumA;
           leftIndex = i;
           }
       }

       int crossingSum = leftS+rightS;
       return crossingSum;
   }

}

展开
收起
几许相思几点泪 2019-12-08 22:20:00 418 0
0 条回答
写回答
取消 提交回答
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载