O(n^3)
#include<stdio.h>
int MaxSum(int* A, int n){
int maximum = -(1<<31);
int sum=0,i,j,k;
for(i = 0; i < n; i++)
{
for(j = i; j < n; j++)
{
for( k = i; k <= j; k++)
{
sum += A[k];
}
if(sum > maximum)
maximum = sum;
sum=0; //这里要记得清零,否则的话sum最终存放的是所有子数组的和。
//也就是编程之美上所说的bug。多谢苍狼。
}
}
return maximum;
}
int main()
{
int data[]={-10, -3,-4, -3, -4, -1, -5};
int max;
printf("%d\n",MaxSum(data,7));
return 0;
}
//o(N)
#include <iostream>
using namespace std;
int maxSum(int a[],int n)
{
int max=a[0]; //全负情况,返回最大数
int sum=0;
for(int j=0;j<n;j++)
{
if(sum>=0) //如果sum>=0的话,就加
sum+=a[j];
else
sum=a[j]; //如果加上某个元素,sum<0了,就不加
if(sum>max)
max=sum;
}
return max;
}
int main()
{
int a[]={1, -2, 3, 100, -4, -7, 2, -5,0,2,20};
//int a[]={-1,-2,-3,-4}; //测试全是负数的用例
cout<<maxSum(a,11)<<endl;
return 0;
}