int maxSubSum2_1(int a[], int n)
{
int maxSum = 0;
for (int i = 0; i < n; i++) {
int thisSum = 0;
for (int j = i; j < n; j++) {
thisSum += a[j];
if (maxSum < thisSum)
maxSum = thisSum;
}
}
return maxSum;
}
int maxSubSum2_2(int a[], int n)
{
int maxSum = 0;
for (int i = 0; i < n; i++) {
int thisSum = 0;
//相对2_1,改变内存循环读取方式,设置了固定点,向前累加
for (int j = i; j >= 0; j--) {
thisSum += a[j];
if (maxSum < thisSum)
maxSum = thisSum;
}
}
return maxSum;
}
int maxSubSum3_1(int a[], int n)
{
int maxSum = 0;
for (int i = 0; i < n; i++) {
//相对2新增对首个元素是负数的判断
if (a[i] <= 0)
continue;
int thisSum = 0;
for (int j = i; j >= 0; j--) {
thisSum += a[j];
if (maxSum < thisSum)
maxSum = thisSum;
}
}
return maxSum;
}
int maxSubSum3_2(int a[], int n)
{
int maxSum = 0;
for (int i = 0; i < n; i++) {
//相对2新增对首个元素是负数的判断
if (a[i] <= 0)
continue;
int thisSum = 0;
for (int j = i; j >= 0; j--) {
thisSum += a[j];
if (maxSum < thisSum)
maxSum = thisSum;
else if (thisSum < 0)
thisSum = 0;
//相对3_1新增对当前序列为负数的处理
}
}
return maxSum;
}
int maxSubSum3_3(int a[], int n)
{
int maxSum = 0;
/*
for (int i = 0; i < n; i++) {
//相对2新增对首个元素是负数的判断
if (a[i] <= 0)
continue;
*/
//有了对当前序列为负数的处理后此时外层循环失去作用
int thisSum = 0;
for (int j = 0; j >= 0; j--) {
thisSum += a[j];
if (maxSum < thisSum)
maxSum = thisSum;
else if (thisSum < 0)
thisSum = 0;
//相对3_1新增对当前序列为负数的处理
}
//}
return maxSum;
}
没有1的原因是1是用三层循环,没有意义