最大子列和问题

举报
开心星人 发表于 2022/10/15 09:02:15 2022/10/15
【摘要】 给定N个整数的序列{A1,A2,…,An},求最大子列和算法一int MaxSubseqSum1(int A[],int N){ int ThisSum,MaxSum=0; int i,j,k; for(i=0;i<N;i++){ //i是子列左端位置,j是子列右端位置 for(j=i;j<N;j++){ ThisSum=0; //ThisSum是从A[i]到A[j]的子列和 fo...

给定N个整数的序列{A1,A2,…,An},求最大子列和

算法一

int MaxSubseqSum1(int A[],int N)
{
	int ThisSum,MaxSum=0;
	int i,j,k;
	for(i=0;i<N;i++){ //i是子列左端位置,j是子列右端位置
		for(j=i;j<N;j++){
			ThisSum=0; //ThisSum是从A[i]到A[j]的子列和
			for(k=i;k<=j;k++)
				ThisSum+=A[k];
			if(ThisSum>MaxSum)
				MaxSum=ThisSum;
		}
	}
	return MaxSum;
}
	

算法二

int MaxSubseqSum2(int A[],int N)
{int ThisSum,MaxSum=0;
 int i,j;
 for(i=0;i<N;i++){
 	ThisSum=0;
 	for(j=i;j<N;j++){
 		ThisSum+=A[j];
 		//对于相同的i,不同的j,只要在j-1次循环的基础上累加一项即可
 		if(ThisSum>MaxSum)
 			MaxSum=ThisSum;
 	}
 }
 return MaxSum;
}

算法三:在线处理

int MaxSubseqSum3(int A[],int N)
{int ThisSum,MaxSum=0;
 int i;
 for(i=0;i<N;i++){
 	ThisSum+=A[i]; //向右累加
 	if(ThisSum>MaxSum) 
 		MaxSum=ThisSum;//发现更大和则更新当前结果
 	else if(ThisSum<0)//如果当前子列和为负
 		ThisSum=0;//则不可能使后面的部分增大,抛弃之
 }
 return MaxSum;
}
 
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。