最大子数组和

  

1,问题描述

,在数组中,有正数,负数,0,求其最大子数组和吗?

,算法思想:


2,暴力破解

# include//求最大子数组和,暴力破解法,时间复杂度:O (n ^ 3)   int  maxSubArray (int  *, int  n);   int  maxSubArray (int  *, int  n) {   ,,,int 我;   ,,,int  j;   ,,,int  k;   ,,,int  ans =, -100000000;      ,,,(小姐:=,0;,小姐:& lt;, n;,我+ +){   ,,,,,,,,(=j 我;,j  & lt;, n;, j + +) {   ,,,,,,,,,,,int  sum =, 0;   ,,,,,,,,,,,,(=k 我;,k  & lt;=, j;, k + +) {   ,,,,,,,,,,,,,,,sum  +=, [k];   ,,,,,,,,,,,}   ,,,,,,,,,,,如果(sum 祝辞,ans) {   ,,,,,,,,,,,,,,,ans =,总和;   ,,,,,,,,,,,}   ,,,,,,,}   ,,,}   ,,,return 答;   }      void 主要(void) {   ,,,int 一个[],=,{1,,2,,3,3,5,6,1};   ,,,int  count =, sizeof (a)/sizeof (int);   ,,,int  maxNumber;      ,,,maxNumber =, maxSubArray(,,数);   ,,,printf (" % d \ n ",, maxNumber);   }

结果截图

最大子数组和“> <br/> </p> <p> <br/> </p> <p> 3,贪心算法</p> <pre类= # include//最大子数字和:贪心算法,时间复杂度为:O (n)   int  maxSubArray (int  *, int  n);   int  maxSubArray (int  *, int  n) {   ,,,int 我;   ,,,int  ans =, -10000000;   ,,,int  sum =, 0;      ,,,(小姐:=,0;,小姐:& lt;, n;,我+ +){   ,,,,,,,sum  +=,(我);   ,,,,,,,如果(sum 祝辞,ans) {   ,,,,,,,,,,,ans =,总和;,,//保存先前的最大值   ,,,,,,,}   ,,,,,,,如果(sum  & lt;, 0) {   ,,,,,,,,,,,sum =, 0;,//将一部分和& lt; 0的直接删去   ,,,,,,,}   ,,,}      ,,,return 答;   }      void 主要(void) {   ,,,int 一个[],=,{1,,2,,3,,,,,,3,,3,,2,,3};   ,,,int  count =, sizeof (a)/sizeof (int);   ,,,int  maxNumber;      ,,,maxNumber =, maxSubArray(,,数);   ,,,printf (" % d \ n ",, maxNumber);   }

结果截图

最大子数组和“> <br/> </p> <p> <br/> </p> <p> <br/> </p> <p> <br/> </p> <p> <br/> </p><h2 class=最大子数组和