c/c++アルゴリズムの連続サブ配列の最大和を求める


整数配列で、配列には正数も負数もあります.配列の中で連続する1つ以上の整数は1つのサブ配列を構成して、各サブ配列はすべて1つの和があって、すべてのサブ配列の和の最大値を求めて、例えば入力する配列は1で、-2,3,10,-4,7,2,-5で、それでは最大のサブ配列は3,10,-4,7,2で、そのため出力はこのサブ数のグループのと18です
int MaxSum(int* a,int n)
{
	
	int MaxSum=a[0];
    int TempSum=0;
	for (int i=0;i=0)
			{
				TempSum+=a[j];
				
			}
			else if (a[j]<0)
			{
				int tmpAJ=a[j];
              for (int m=j;m=0)
			  {
				  TempSum+=a[j];
				  break;
			  }
			 }
			  if(tmpAJ<0)
                ContinueAdd=false;
              
			}
			if (!ContinueAdd)
			{
				
				break;
			}
			
		}
		if(TempSum>MaxSum)
			MaxSum=TempSum;

	}
	return MaxSum;
}
int main()
{
	//int A[]={1,-2,3,10,-4,7,2,-5};
	int B[]={-11,-22,-3};
	int temp=MaxSum(B,3);
	cout<
}

実現過程は少し面倒であるが,比較的理解しやすく,アルゴリズムの複雑さを犠牲にした.
要求時間複雑度がO(n)である場合.  
int MaxSum(int* a,int n) {         int sum = a[n-1];         int max = a[n-1];         for(int i=0;i   {             sum = sum + a[n-i-1];             if(a[n-i-1] >= 0)    {                if(max < sum)        {                   max = sum ;                 }             }             if(sum < 0)     {                  sum = a[n-i-1];              }         }         return max;     }
void main() {                 int a[] = {1, -2, 3, 10, -4, 7, 2, -5};   int B[]={-22,-11,-3};         int max = MaxSum(a,8);         cout< }    
この2つの方法は、皆さんの意見を歓迎します.テストのデータが少ないので、バグがある可能性があります.指摘を歓迎します.