求连续子数组的最大和

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)

Case1:输入数组:1,-2,3,10,-4,7,2,-5 和最大连续子数组为3,10,-4,7,2 则输出18

Case2:输入数组:3,-2,3,10,-4,7,2,-5 和最大连续子数组为3,-2,3,10,-4,7,2 则输出19

程序写的比较简单,看了网上的知道自己的缺陷:没有考虑输入为空与和最大为0的区别。。。

 #include<stdio.h>
 #include<stdlib.h>
 void InitArray(int*& A,int M){
           A = (int*)malloc(sizeof(int)*M);
   }
 int maxSum(int* A,int M){
           if(M < 1)//元素个数不符合要求
                 return 0;
         if(M == 1)//元素个数为1时,返回A[0]
                 return A[0];
          int max = A[0],sum = A[0];//初始最大和为A[0],sum用于计算连续数据和
          for(int i = 1; i < M ;i++){
                  if(sum < 0)//去掉小于0的部分和
                          sum = 0;
                  sum += A[i];//重新开始计算连续数据和
                 if(max < sum)//若所得新的连续数据和大于max,则重赋max
                         max = sum ;
          }
          return max;
  }
  int main(){
          int *A, M ;
          printf("输入元素个数:
");
          scanf("%d",&M);
          InitArray(A,M);
          printf("输入%d个元素
",M);
          for(int i = 0; i < M; i++){
                  scanf("%d",A + i);
         }
          printf("最大和是:%d
",maxSum(A,M));
         free(A);
 }
原文地址:https://www.cnblogs.com/idealing/p/3397685.html