首页 > 代码库 > 多种方法求最大连续和
多种方法求最大连续和
最大连续和的定义:给出一个长度为n的序列A1,A2,...,An,求最大连续和,即找要求找到1<=i<=j<=n,使得Ai+Ai+1+..+Aj最大。
方法一,根据定义容易想到:
int maxSubSeqSum(int A[],int N) { int maxSum=A[0]; int i,j,k; for(i=2;i<N;i++) for(j=i;j<N;j++) { int sum=0; for(k=i;k<=j;k++) { sum+=A[k]; } if(sum>maxSum) maxSum=sum; } return maxSum; }
方法二
int maxSubSeqSum(int A[],int N) { int i,j; int maxSum=A[0]; for(i=1;i<N;i++) { int sum=0; for(j=i;j<N;j++) { sum+=A[j]; if(sum>maxSum) maxSum=sum; } } return maxSum; }
方法三
int max(int a,int b) { return a>b?a:b; } int maxSubSeqSum(int a[],int x,int y) { if(y-x==1) return a[x]; int m=x+(y-x)/2; int maxValue=http://www.mamicode.com/max(maxSubSeqSum(a,x,m),maxSubSeqSum(a,m,y));> 方法四
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; }
方法一到方法四,算法的复杂度依次降低,方法一时间复杂度O(N^3),方法二时间复杂度O(N^2),方法三时间复杂度O(NlogN),方法四时间复杂度O(N)
多种方法求最大连续和
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。