【数据结构】求最大(连续)子列和--在线处理 C语言

最大连续子列
例如:一个数组 A1,A2,A3,A4,A5,A6,A7,A8
其连续子列A1 A2 A3 A4 或者 A2 A3 A4 A5 A6或者A6 A7
求最大的一个子序列

#include 
#include 

int i;
int MaxSubseqSum( int a[], int n)
{
	int ThisSum, MaxSum;
	int i;
	ThisSum = MaxSum = 0;
	for( i = 0; i < n; i++ ){
		ThisSum += a[i];//当前和
		if(ThisSum >MaxSum)//更新当前最大子列和
			MaxSum = ThisSum;
		else if(ThisSum < 0)//判断当前子列和是否为负数,是负数则当前子列清零,因为负数不可能使子列和变大
			ThisSum = 0;
	}
	return MaxSum;
}

int main(){
	int b[100] = {0}, m;
	scanf("%d", &m);//输入元素数量
	for( int i = 0; i<m; i++){
		scanf("%d", &b[i]);//获取元素值
	}
	int answer = 0;
	answer = MaxSubseqSum(b, m);
	printf("%d",answer );
	
	return 0;
}

输入: 8
-1 3 -2 4 -6 1 6 -1
结果: 7

在线处理:即时的对每一个输入进行处理,在任何时候中止输入都能给出当前正确解

参考:https://www.icourse163.org/learn/ZJU-93001#/learn/content?type=detail&id=1214143610&cid=1217772322

你可能感兴趣的:(学习笔记)