#define max(a, b) ((a)<(b)?(b):(a))
int arr[] = {31, -41, 59, 26, -53, 58, 97, -93, -23, 84};
//扫描算法
int scanning_algorithm()
{
int maxsofar = 0;
int maxendinghere = 0;
for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
{
maxendinghere = max(maxendinghere+arr[i], 0);
maxsofar = max(maxsofar, maxendinghere);
}
return maxsofar;
}
//分治算法
int branch_algorithm(int l, int u)
{
if (l > u) //没有元素
return 0;
if (l == u) //一个元素
return max(0, arr[l]);
int m = (l + u) / 2;
int lmax = 0;
int sum = 0;
for (int i = m; i >= l; i--)
{
sum += arr[i];
lmax = max(lmax, sum);
}
int rmax = 0;
sum = 0;
for (int i = m + 1; i <= u; i++)
{
sum += arr[i];
rmax = max(rmax, sum);
}
sum = max(lmax + rmax, branch_algorithm(l, m));
sum = max(sum, branch_algorithm(m+1, u));
return sum;
}
//时间复杂度为n的平方
int square_algorithm()
{
int max_sum = 0;
int sum = 0;
int len = sizeof(arr) / sizeof(int);
for (int i = 0; i < len; i++)
{
sum = 0;
for (int j = i; j < len; j++)
{
sum += arr[j];
max_sum = max(sum, max_sum);
}
}
return max_sum;
}
//时间复杂度为n的立方
int cube_algorithm()
{
int max_sum = 0;
int sum = 0;
int len = sizeof(arr) / sizeof(int);
for (int i = 0; i < len; i++)
{
for (int j = i; j < len; j++)
{
sum = 0;
for (int k = i; k < j; k++)
{
sum += arr[k];
max_sum = max(sum, max_sum);
}
}
}
return max_sum;
}