我是靠谱客的博主 包容翅膀,最近开发中收集的这篇文章主要介绍分治法求数组最大值 c语言,使用分治法求最大子数组的下标。,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

int max(int a[],int left,int right);

int maxcross(int a[],int left,int right,int middle);

int xyzleft,xyzright;

int main()

{

int T;

int asd;

int num[100000];

scanf("%d",&T);

while(T--)

{

scanf("%d",&asd);

getchar();

int i;

for(i=0;i

{

scanf("%d",&num[i]);

getchar();

}

printf("%d %d %dn",max(num,0,asd),xyzleft+1,xyzright+1);

printf("n");

}

return 0;

}

int maxcross(int a[],int left,int right,int middle)

{

int sumleft=0,maxleft=-1001;

for(int i=middle;i>=left;i--)

{

sumleft+=a[i];

if(sumleft>maxleft)

{

maxleft=sumleft;

xyzleft=i;

}

}

int sumright=0,maxright=-1001;

for(int i=middle+1;i<=right;i++)

{

sumright+=a[i];

if(sumright>maxright)

{

maxright=sumright;

xyzright=i;

}

}

return maxright+maxleft;

}

int max(int a[],int left,int right)

{

int leftmax,rightmax,crossmax;

if(left==right)

{

xyzleft=xyzright=0;

return a[left];

}

else

{

int mid=(left+right)/2;

leftmax=max(a,left,mid);

rightmax=max(a,mid+1,right);

crossmax=maxcross(a,left,right,mid);

if(leftmax>rightmax&&leftmax>crossmax)

return leftmax;

else if(rightmax>leftmax&&rightmax>crossmax)

return rightmax;

else

return crossmax;

}

}

最后

以上就是包容翅膀为你收集整理的分治法求数组最大值 c语言,使用分治法求最大子数组的下标。的全部内容,希望文章能够帮你解决分治法求数组最大值 c语言,使用分治法求最大子数组的下标。所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部