MOOC 1.3 最大子列和

// 求最大子列和
#include <cstdio>
int a[5];

// O(n^3) 
int MaxSeq1(int a[], int n)
{
	int max = 0, sum = 0;
	for(int i = 0; i < n; ++ i)
	{
		for(int j = i; j < n; ++ j)
		{
			sum = 0;
			for(int k = i; k <= j; ++ k)
			{
				sum += a[k];
			}
			if(sum > max)	max = sum;
		}
	}
	return max;
} 

// O(n^2)
int MaxSeq2(int a[], int n)
{
	int max = 0, sum = 0;
	for(int i = 0; i < n; ++ i)
	{
		sum = 0;
		for(int j = i; j < n; ++ j)
		{
			sum += a[j];
			if(sum > max)	max = sum;
		}
	}
	return max;
} 

// 在线处理 O(n)
// "在线"的意思是指每输入一个数据就进行及时处理
// 在任何一个地方终止输入, 算法都能正确给出当前解 
int MaxSeq4(int a[], int n)
{
	int sum = 0, max = 0;
	for(int i = 0; i < n; ++ i)
	{
		sum += a[i];
		if(sum > max)	max = sum;
		else if(sum < 0)	sum = 0;
	}
	return max;
}

int main()
{
	for(int i = 0; i < 5; ++ i)
	{
		scanf("%d", &a[i]);
	}
	printf("%d\n", MaxSeq4(a, 5));
	
	return 0;
}

/*
1 6 -5 9 -3
11
*/

  

posted @ 2019-08-27 19:20  青衫客36  阅读(144)  评论(0编辑  收藏  举报