您的位置:首页 > 其它

最大子数组

2014-03-29 22:26 211 查看
最近开始看算法导论,看一点就写一点,必须提高自己的编程能力,毕竟要养活我将来的老婆(现在还在当兵的女朋友)。第一次写,都是简单的老掉牙的题目。求谅解。另外算法导论(第三版第38页)有对此题目的另一个解法(分治法),我看着伪代码写了许久,但没运行出来,求诸位大神们指教!好了,废话不多说了。开始看题目。

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间负责度为O(n)。

思路:就是动态规划啦  从数组第一个元素开始逐个加,和如果是负数就舍弃,和(nowsum)为正的话,就将此次的和(nowsum)与前一次算的和(sum)比较,nowsum>sum的话,就将nowsum赋值给sum。从而保证sum是最大子数组的和。

代码如下:

void main (){

int A[]={13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7};

 //全是负数的话就是求最大的一个元素   代码没写

 //动态规划做         用分治法没运行出来

int i,j,sum=0;

int nowsum=0;

for(i=0;i<(sizeof(A)/sizeof(int));i++)



nowsum+=A[i];

if (nowsum<0) {

 nowsum=0;

}

if(sum<nowsum){

 sum=nowsum;

}

}

printf("%d\n",sum); 

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: