#include <iostream>
using namespace std;
/*
给定N个整数的序列{ A1, A2, …, AN}求连续的子列的最大值
有四种方式实现
*/
//算法一
int MaxSubseqSum1 (int A[], int N);
//算法二
int MaxSubseqSum2 (int A[], int N);
//算法三 分治法
//算法四
int MaxSubseqSum4 (int A[], int N);
int main()
{
int A[] = {4, -3, 5, -2, -1, 2, 6, -2};
int result1 = MaxSubseqSum1(A, 8);
cout << result1 << endl;
cout << "-------" << endl;
int result2 = MaxSubseqSum2(A, 8);
cout << result2 << endl;
cout << "-------" << endl;
int result4 = MaxSubseqSum4(A, 8);
cout << result4 << endl;
return 0;
}
int MaxSubseqSum1 (int A[], int N)
{
int ThisSum, MaxSum = 0;
int i, j, k;
for(i = 0; i < N; i++){
for(j = i; j < N; j++){
ThisSum = 0;
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];
if (ThisSum > MaxSum)
MaxSum = ThisSum;
}
}
return MaxSum;
}
int MaxSubseqSum4(int A[], int N)
{
int ThisSum, MaxSum, 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;
}
求最大的连续子列和
猜你喜欢
转载自blog.csdn.net/fdkneverstoplearning/article/details/80192135
今日推荐
周排行