您的位置:首页 > 编程语言

编程之美: 第二章 数字之魅 2.14求数组的子数组之和的最大值

2015-08-03 01:03 267 查看
/*
求数组的子数组之和的最大值:
一个由N个整数元素的数组,这个数组有很多子数组,子数组之和的最大值是什么?
f(n) = {f(n-1) + pArr[i],f(n-1)>0
       {pArr[i],f(n-1)<=0

输入:
7
-2 5 3 -6 4 -8 6
6
0 -2 3 5 -1 2
6
1 -2 3 5 -3 2
5
-9 -2 -3 -5 -3
输出:
8
9
8
-2
*/

#include <stdio.h>

const int MAXSIZE = 10000;
const int INF = 0x7fffffff;

int maxSum(int* pArr,int iLen)
{
	if(!pArr || iLen <= 0)
	{
		return INF;
	}
	int iSum = 0,iMax = pArr[0];
	for(int i = 0 ; i < iLen ; i++)
	{
		if(iSum <= 0)
		{
			iSum = pArr[i];
		}
		else
		{
			iSum += pArr[i];
		}
		if(iSum > iMax)
		{
			iMax = iSum;
		}
	}
	return iMax;
}

void process()
{
	int n;
	while(EOF != scanf("%d",&n))
	{
		int iArr[MAXSIZE];
		for(int i = 0 ; i < n ; i++)
		{
			scanf("%d",&iArr[i]);
		}
		printf("%d\n",maxSum(iArr,n));
	}
}  

int main(int argc,char* argv[])
{
	process();
	getchar();
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: