求最大的连续子列和

#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