分治法找到最大子数组问题

问题描述

我已经阅读了分而治之方法及其解决问题的效率。查找最大子数组是本书中描述的示例。当我尝试使用C ++语言实现它时,它导致了分段错误错误。

//this is for finding the max sub array if it is in the middle it is correct
Max_Array Find_Crossing_SubArray(int * arr,int low,int hight)
{
    int sumLeft = 0,sumRight=0,sumTemp = 0,mid  = (low+hight)/2 ;
    Max_Array returned = {nullptr,0};
    for(int j = mid ; j >= 0 ; j--)
    {
        sumTemp +=arr[j] ;
        if(sumLeft < sumTemp)
        {
            returned.low = j;
            sumLeft = sumTemp ;
        }
    }

    sumTemp = 0;
    for(int j = mid+1 ; j < hight ; j++)
    {
            sumTemp += arr[j] ;
            if(sumRight < sumTemp)
            {
                returned.hight = j ;
                sumRight = sumTemp ;
            }
    }
    returned.sum =sumRight + sumLeft;
    returned.t = arr + returned.low;
    returned.size = returned.hight - returned.low ;

    return returned;
}
int mid;

//the function that throws the error+++++++++++  

Max_Array Find_Max_SubArray(int* arr,int hight) 
{
    if(low == hight)
    {
        Max_Array r = {arr,low,1,arr[low]};
        return r;
    }
    else
    {
        Max_Array rightArray,leftArray,middleArray;
         mid = (low+hight)/2 ;
        
        rightArray = Find_Max_SubArray(arr,mid+1,hight);
    
       
        leftArray = Find_Max_SubArray(arr,mid);

        middleArray = Find_Max_SubArray(arr,hight);

        if(rightArray.sum >= leftArray.sum && rightArray.sum >= middleArray.sum)
            return rightArray;
        else if(leftArray.sum >= rightArray.sum && leftArray.sum >= middleArray.sum)
            return leftArray;
        else
            return middleArray;
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...