参考自@陈利人 先生维护的微信公众账号@待字闺中
#include<stdio.h>
/*
给定一个数组,求子数组的最大和
*/
int getMaxSubSum( int *arr, int n)
{
if(n<1)
return 0;
int sum=arr[0];
int temp = arr[0];
for(int i=1;i<n;i++)
{
if(temp<0)
temp=arr[i];
else
temp+=arr[i];
if(sum<temp)
sum=temp;
}
return sum;
}
/*
给定一个数组,求子数组的最大成绩
*/
int max2(int a,int b)
{
if(a>b)
return a;
return b;
}
int min2(int a, int b)
{
if(a<b)
return a;
return b;
}
int max3(int a,int b,int c)
{
return max2(max2(a,b),c);
}
int min3(int a,int b,int c)
{
return min2(min2(a,b),c);
}
int getSubAccumulate(int *arr,int n)
{
if(n<1)
return 0;
int max = arr[0];
int min = arr[0];
int a = max;
for(int i=1;i<n;i++)
{
max = max * arr[i];
min = min * arr[i];
max = max3( max, min , arr[i]);
min = min3( max, min , arr[i]);
a = max2(a,max);
}
return max;
}
int main()
{
int arr[4]={2,-3,5,-1};
printf("%d\n",getMaxSubSum(arr,4));
printf("%d\n",getSubAccumulate(arr,4));
getchar();
getchar();
return 0;
}